这些微基准测试虽然不全面,但确实测试了编译器在各种常见代码模式上的性能,例如函数调用、字符串解析、排序、数值循环、随机数生成、递归和数组操作。
重要的是要注意,基准测试代码并非为绝对最大性能而编写(计算recursion_fibonacci(20)
的最快代码是常量字面量6765
)。相反,基准测试是为测试每种语言中实现的相同算法和代码模式的性能而编写的。例如,斐波那契基准测试都使用相同的(低效)双递归算法,而 pi 求和基准测试使用相同的 for 循环。“算法”矩阵乘法是调用最明显的内置/标准随机数和矩阵乘法例程(或者如果语言不提供高级矩阵乘法则直接调用 BLAS),除了矩阵乘法/BLAS 调用不可能的地方(例如 JavaScript 中)。
请注意,上面显示的 Julia 结果不包括编译时间。
纵轴显示每个基准时间相对于 C 实现的归一化值。上面显示的基准数据是使用 Julia v1.0.0、SciLua v1.0.0-b12、Rust 1.27.0、Go 1.9、Java 1.8.0_17、Javascript V8 6.2.414.54、Matlab R2018a、Anaconda Python 3.6.3、R 3.5.0 和 Octave 4.2.2 计算的。C 和 Fortran 使用 gcc 7.3.1 编译,从所有优化级别(-O0 到 -O3)中获取最佳计时。C、Fortran、Go、Julia、Lua、Python 和 Octave 使用 OpenBLAS v0.2.20 进行矩阵运算;Mathematica 使用 Intel® MKL。矩阵统计和矩阵乘法的 Python 实现使用 NumPy v1.14.0 和 OpenBLAS v0.2.20 函数;其余为纯 Python 实现。以 CSV 格式提供的原始基准数字可在 此处 获取,并且每种语言的基准测试源代码可以在列出的 perf 文件中找到 此处。该图使用此 IJulia 基准测试笔记本 生成。
这些微基准测试结果是在 Intel® Core™ i7-3960X 3.30GHz CPU 上的单个内核(串行执行)上获得的,该 CPU 具有 64GB 的 1600MHz DDR3 RAM,运行 openSUSE LEAP 15.0 Linux。