Mandelbrot 基准测试

设置
一个 2000 x 2000 的 Mandelbrot 集,最大迭代次数为 1000(正确的校验和为 689833081),在每种语言中都以相同的方式编写:整数运算、浮点运算、循环、分支、函数调用和内存写入。只有打印出与参考实现相同校验和的运行才计入结果。
结果(2026-10-24,暂定)
以下是来自基准测试仓库的当前结果,它们是暂定的:测量时机器上还运行着其他工作,因此每个数字都可能略有变动,最慢的程序变动最大。每个时间都是五轮(较慢的程序为三轮)的中位数,从启动进程测量到其退出,因此包含了运行时的启动时间。只能在本表内比较各行;仓库中保存了完整的方法、工具链、机器负载以及更早的记录。
| 排名(按时间) | 平台 | 大小 | 运行时间(ms,中位数) | 范围(ms) | 峰值内存 |
|---|---|---|---|---|---|
| 1 | Go | 2.4 MB | 1,335.84 | 1,294.75 - 5,219.69 | 37.48 MB |
| 2 | C++ | 15 KB | 1,368.68 | 1,347.09 - 1,490.50 | 19.08 MB |
| 3 | C# AoT | 916 KB | 1,406.34 | 1,382.91 - 1,619.13 | 22.30 MB |
| 4 | JavaScript (Node) | 1 KB + 104 MB | 1,441.62 | 1,425.10 - 1,529.44 | 53.57 MB |
| 5 | JavaScript (Web/Chrome) | 3 KB | 1,466.70(仅渲染) | 1,375.70 - 1,525.80 | N/A |
| 6 | Julia | 1 KB + 1.1 GB | 1,546.59 | 1,523.35 - 1,831.54 | 163.32 MB |
| 7 | C# (.NET 10) | 12.3 MB | 1,556.33 | 1,518.21 - 1,630.63 | 40.13 MB |
| 8 | Java (Temurin 17.0.11) | 2 KB + 303 MB | 2,225.39 | 1,703.51 - 2,905.58 | 56.14 MB |
| 9 | Pure 2 (Divooka Pure) | 1 KB + 1.75 GB | 2,526.64 | 2,432.84 - 2,683.12 | 202.84 MB |
| 10 | Haskell (GHC 9.10.3) | 11.4 MB | 2,831.05 | 2,818.44 - 2,921.94 | 43.38 MB |
| 11 | Divooka(AviatorBeta 程序) | 77.2 MB | 3,793.71 | 3,754.41 - 4,236.41 | 53.61 MB |
| 12 | Divooka(Stewer,编译) | 7 KB + 1.75 GB | 6,410.04 | 6,120.30 - 6,912.88 | 343.46 MB |
| 13 | Elixir (1.14.4, OTP 25) | 2 KB + 387 MB | 12,973.86 | 10,847.94 - 19,745.77 | 56.94 MB |
| 14 | Ruby (4.0.9) | 1 KB + 304 MB | 96,404.04 | 82,093.14 - 111,871.05 | 47.19 MB |
| 15 | Python (3.13.5) | 1 KB + 151 MB | 96,981.26 | 84,764.84 - 97,928.50 | 61.74 MB |
| 16 | Perl (5.42.3) | 1 KB + 1.1 GB | 206,107.18 | 201,216.36 - 224,165.19 | 200.11 MB |
| 17 | Prolog (SWI 9.0.4) | 2 KB + 47 MB | 664,090.70(11 分钟) | 576,466.76 - 672,132.51 | 13.66 MB |
| 18 | GNU Octave (7.3.0) | 1 KB + 2.2 GB | (估计)5,074,024(85 分钟) | 根据 100 x 100 时的 7,624 和 200 x 200 时的 45,319 推算 | 35.17 MB |
| 19 | Divooka(Stewer,解释) | 7 KB + 1.75 GB | (估计)13,517,210(3.8 小时) | 根据 100 x 100 时的 49,078 和 200 x 200 时的 149,285 推算 | 205.57 MB |
说明:
- 简而言之,构建为独立程序(AviatorBeta)的 Divooka 文档运行约需 3.8 秒;由 Stewer 在每次运行时编译,约需 6.4 秒;而在逐节点解释器中(即编辑器的 Interpreted 运行所用的方式),估计需要 3.8 小时。这一估计值是根据两次较小规模的运行推算的,因为完整规模太慢,无法等待其完成。
- “Divooka(Stewer,编译)”在每次运行时都会编译文档,这是它与 AviatorBeta 程序之间差距的主要来源。Divooka 的文档在 Divooka Compute 文件夹(1.75 GB,包含一切)中运行,而 AviatorBeta 程序是将文档构建成的自包含程序,与 Divooka Compute 的 Publish 所构建的程序相同。
- Pure 2 将 C# 版本作为脚本运行,在运行开始时由 Roslyn 在 Divooka Pure 的进程内编译。
- 本页面的早期版本显示 Divooka 估计需要 95.8 小时。那是针对旧版编辑器解释器的估计,取自较早的一次记录,采用的方法也不同,现已被上述数字取代。
- 浏览器在预热之后为自身的渲染计时,因此 JavaScript (Web) 无法与其他行进行比较。
较早的结果,仅供参考
仓库中较早的记录采用了不同的方法,其中还包括一些 AI 模型,作为大众可能感兴趣的结果;它们不在上表中。在这些记录中,ChatGPT (5.3 Instant) 用时 26,320 ms(26.32 秒),Kimi (2.6 Instant) 用时 340,330 ms,而 Grok (Fast) 和 Gemini (Fast) 失败。仓库中注明 ChatGPT 的输出并不可靠。
参考资料
- 基准测试仓库:完整的方法、工具链、光线追踪器基准测试、SteelPython 结果以及所有较早的记录。