生命 2000 基准测试

对 CPU 和渲染要求很高的基准测试:康威生命游戏在固定的 800×500 网格上运行 2000 代。所有参与者从同一个确定的初始状态出发(Mulberry32 种子 2000,30% 填充率)。用时越短越好。

Preview
...
你的结果
— ms

查看 TOP 500 排行榜

关于这个基准测试

生命 2000 是一个基于康威生命游戏的元胞自动机基准测试,该游戏由数学家约翰·霍顿·康威于 1970 年提出。模拟在固定的 800×500 网格(40 万个单元格)上运行。初始状态由种子为 2000、填充密度为 30% 的 Mulberry32 伪随机数生成器产生,这保证了所有参与者无论设备或屏幕尺寸如何,都从完全相同的配置出发。基准测试在恰好 2000 代后结束;经过的时间越短,设备越快。

每一代,所有单元格同时应用四条规则:有 2 或 3 个活邻居的活细胞存活;邻居少于 2 个或多于 3 个则死亡;恰好有 3 个活邻居的死细胞诞生。40 万个单元格中的每一个都需要 8 次 Uint8Array 读取:每代 320 万次读取,整个基准测试共 64 亿次读取。这项负载受限于内存带宽而非算术运算,因此结果对 CPU 的缓存层级和数据预取效率很敏感。

每个动画帧计算 27 步生命游戏,然后通过 putImageData API 绘制整个 800×500 网格,一次性写入 40 万像素的 ImageData 缓冲区。这种计算与渲染的交替既考验 CPU 的顺序整数性能,也考验浏览器的画布合成管线。环面(循环)边界通过对每个边缘单元格进行取模运算来实现。从第一帧到完成第 2000 代的实际时间用 performance.now() 记录。