It's been a while since we've posted an update on what we've been working on,
so we felt it was about time for one.
New Baremetal Judges
The biggest news we have to share is already over a month old by now: DMOJ judges
now run on a dedicated, bare-metal machine!
Until now we've sourced our judges from cloud providers, but that has always
been a bit of hardware roulette: sometimes a judge VM would be provisioned on
Intel hardware, while other times our provider would give us shiny new AMD EPYC
cores. Typically, these machines were also overcommitted by our hosts, so
timing consistency between submissions was at the mercy of potentially noisy
No longer! We've gone and purchased real hardware to run judges on: a 6-core (12-thread) AMD
Ryzen 5 3600X @ 3.8 GHz, with 16 GB 3200 MHz CL16 dual-channel RAM. Frequency
scaling has been disabled for timing consistency. Each judge runs in a QEMU
instance allocated 2 GB RAM and 1 physical core (2 threads).
These judges are much (2-5×) faster than the old ones (and empirically,
much more consistent). As a result, problem time limits have been rescaled
based off a randomized sample of submissions — some problems may
currently have time limits that are either too low, or too high. If you think
you've run into such a problem, please let us know in
New Runtime Versions
We maintain Docker images based off stable Debian (Buster) with runtimes as
part of the DMOJ/runtimes-docker
project; these are the runtimes used by judges on the DMOJ. Since the GCC in
Buster (version 8) was incorrectly identifying the Zen 2 judges as Bulldozer,
we've upgraded our images to Debian Sid in order to get GCC 9. Apart for better
support for our judges, you can read what's new here.
As a side-effect of upgrading to Sid, we now have much newer
versions of most runtimes.
Notably, Python 3 has been upgraded from 3.7 to 3.8, and Clang from 7 to 9. OCaml
was also upgraded from 4.05 to 4.10; we took this opportunity to rewrite the OCaml
backend to link Jane Street Core/Base/Stdio and Zarith libraries, for a nicer
functional programming experience :)