The three examples
This is not the simulator. The engine is a Rust CLI that writes tables. What you have here is a reading of three locked examples so you can see why packing free GPUs is not the same as meeting a deadline.
Example A
32 servers, eight GPUs each. This is the map. No jobs yet.
Example B
One ring AllReduce, eight GPUs, 64 MiB. A stopwatch. No leftover, no packing.
Example C
Two jobs. One rail is already full. Naive takes the first free GPUs and admits both; both miss. Joint puts the first job on the cool rail and refuses the second.
Arrow keys step. 1 / 2 / 3 pick the example.