Life 2000 Benchmark

Heavy CPU + rendering benchmark: Conway's Game of Life on a fixed 800×500 grid, 2000 generations. All participants start from the same deterministic state (Mulberry32 seed 2000, 30% fill). Lower time is better.

Preview
...
Your Result
ms

View TOP 500 Leaderboard

About this benchmark

Life 2000 is a cellular automaton benchmark based on Conway's Game of Life, described by mathematician John Horton Conway in 1970. The simulation runs on a fixed 800×500 grid (400,000 cells). The initial state is generated by the Mulberry32 pseudorandom number generator with seed 2000 at 30% fill density — ensuring every participant, regardless of device or screen size, starts from an identical configuration. The benchmark ends after exactly 2,000 generations; lower elapsed time indicates a faster device.

At each generation every cell applies four rules simultaneously: a live cell with 2 or 3 live neighbors survives; fewer than 2 or more than 3 neighbors causes death; a dead cell with exactly 3 live neighbors is born. Each of the 400,000 cells requires 8 Uint8Array reads — 3.2 million reads per generation and 6.4 billion reads over the full benchmark run. The workload is memory-bandwidth-bound rather than arithmetic-bound, making results sensitive to CPU cache hierarchy and data-prefetch efficiency.

Each animation frame computes 27 GOL steps and then renders the entire 800×500 grid via the putImageData API, writing a 400,000-pixel ImageData buffer in one call. This alternation between computation and rendering stresses both the CPU's sequential integer throughput and the browser's canvas compositing pipeline. Toroidal (wrap-around) boundaries are enforced with modular arithmetic on every border cell. Elapsed wall-clock time from the first frame to completion of generation 2,000 is recorded with performance.now().