解读现代 PC 上的 Dhrystone 基准测试结果
Interpreting the Dhrystone Benchmark results on Modern PC
首先,我要运行评价我所做的事情。
我从这里下载了 dhry.h dhry_1.c 和 dhry_2.c:
http://giga.cps.unizar.es/~spd/src/other/dhry/
然后我根据这个做了一些修正(以便我编译):
https://github.com/maximeh/buildroot/blob/master/package/dhrystone/dhrystone-2-HZ.patch
还有这个
Errors while compiling dhrystone in unix
我已经使用以下命令行编译了文件:
gcc dhry_1.c dhry_2.c -O2 -o 运行
我最后输入的运行个数是1000000000
然后等待。我使用四种不同的优化级别进行编译,得到了这些 DMIPS 值(根据 http://en.wikipedia.org/wiki/Dhrystone 这是每秒 Dhrystones 除以 1757):
O0: 8112 O1: 16823.9 O2: 22977.5 O3: 23164.5(这些代表编译器标志,例如 -O2 是优化级别 2,O0 是 none)。
这将给出以下 DMIPS/MHz(我的处理器的基本频率是 3.4 GHz):
2.3859 4.9482 6.7581 6.8131
但是,我感觉 6.7 太低了。根据我读到的内容,A15 在 3.5 到 4 DMIPS/MHz 之间,而第三代 I7 只有它的两倍?不是应该高很多吗?
任何人都可以从我的程序中看出我可能做错了什么吗?或者我对结果的解释不正确?
除了广泛的笔刷处理外,您无法比较不同编译器产生的基准测试结果。作为第一个标准基准测试 (Whetstone) 的设计权威,我可以建议将与计算机制造商内部编译器的结果进行比较更不安全。在小型机时代,制造商发现可以优化 Whetstone 基准测试的部分,使分数翻倍。我安排了更改和更详细的结果,以避免后来强调过度优化。
以下是我最初(1990 年代)Dhrystone 基准测试在 PC 上的示例结果。有关详细信息,更多结果和(免费)执行和源文件,请参见:
http://www.roylongbottom.org.uk/dhrystone%20results.htm
还包括并从相同的源代码编译而来的是后来的 MS 编译器的结果,一些通过 Linux 和 Android,通过 ARM CPU,加上一个用于 Intel Atom,通过 Houdini 兼容层。我更喜欢 VAX MIPS 这个术语而不是 DMIPS,因为 1757 除数是 DEC VAX 11/780 的结果。反正也显示了MIPS/MHz个计算。注意由于编译器和 Android ARM CPU 上特别低的比率造成的差异。
Dhry1 Dhry1 Dhry2 Dhry2 Dhry2
Opt NoOpt Opt NoOpt Opt
VAX VAX VAX VAX MIPS/
CPU MHz MIPS MIPS MIPS MIPS MHz
AMD 80386 40 17.5 4.32 13.7 4.53 0.3
80486 DX2 66 45.1 12 35.3 12.4 0.5
Pentium 100 169 31.8 122 32.2 1.2
Pentium Pro 200 373 92.4 312 91.9 1.6
Pentium II 300 544 132 477 136 1.6
Pentium III 450 846 197 722 203 1.6
Pentium 4 1900 2593 261 2003 269 1.1
Atom 1666 2600 772 1948 780 1.2
Athlon 64 2211 5798 1348 4462 1312 2.0
Core 2 Duo 1 CP 2400 7145 1198 6446 1251 2.7
Phenom II 1 CP 3000 9462 2250 7615 2253 2.5
Core i7 4820K 3900 14776 2006 11978 2014 3.1
Later Intel Compiler
Pentium 4 1900 2613 1795 0.9
Athlon 64 2211 6104 3720 1.7
Core 2 Duo 2400 8094 5476 2.3
Phenom II 3000 9768 6006 2.0
Core i7 4820K 3900 15587 10347 2.7
Linux Ubuntu GCC Compiler
Atom 1666 5485 1198 2055 1194 1.2
Athlon 64 2211 9034 2286 4580 2347 2.1
Core 2 Duo 2400 13599 3428 5852 3348 2.4
Phenom II 3000 13406 3368 6676 3470 2.2
Core i7 4820K 3900 29277 7108 16356 7478 4.2
ARM Android NDK
926EJ 800 356 196 0.4
v7-A9 1500 1650 786 1.1
v7-A15 1700 3189 1504 1.9
Atom Houdini 1866 1840 1310 1.0
首先,我要运行评价我所做的事情。
我从这里下载了 dhry.h dhry_1.c 和 dhry_2.c: http://giga.cps.unizar.es/~spd/src/other/dhry/
然后我根据这个做了一些修正(以便我编译):
https://github.com/maximeh/buildroot/blob/master/package/dhrystone/dhrystone-2-HZ.patch
还有这个
Errors while compiling dhrystone in unix
我已经使用以下命令行编译了文件:
gcc dhry_1.c dhry_2.c -O2 -o 运行
我最后输入的运行个数是1000000000
然后等待。我使用四种不同的优化级别进行编译,得到了这些 DMIPS 值(根据 http://en.wikipedia.org/wiki/Dhrystone 这是每秒 Dhrystones 除以 1757):
O0: 8112 O1: 16823.9 O2: 22977.5 O3: 23164.5(这些代表编译器标志,例如 -O2 是优化级别 2,O0 是 none)。
这将给出以下 DMIPS/MHz(我的处理器的基本频率是 3.4 GHz):
2.3859 4.9482 6.7581 6.8131
但是,我感觉 6.7 太低了。根据我读到的内容,A15 在 3.5 到 4 DMIPS/MHz 之间,而第三代 I7 只有它的两倍?不是应该高很多吗?
任何人都可以从我的程序中看出我可能做错了什么吗?或者我对结果的解释不正确?
除了广泛的笔刷处理外,您无法比较不同编译器产生的基准测试结果。作为第一个标准基准测试 (Whetstone) 的设计权威,我可以建议将与计算机制造商内部编译器的结果进行比较更不安全。在小型机时代,制造商发现可以优化 Whetstone 基准测试的部分,使分数翻倍。我安排了更改和更详细的结果,以避免后来强调过度优化。
以下是我最初(1990 年代)Dhrystone 基准测试在 PC 上的示例结果。有关详细信息,更多结果和(免费)执行和源文件,请参见:
http://www.roylongbottom.org.uk/dhrystone%20results.htm
还包括并从相同的源代码编译而来的是后来的 MS 编译器的结果,一些通过 Linux 和 Android,通过 ARM CPU,加上一个用于 Intel Atom,通过 Houdini 兼容层。我更喜欢 VAX MIPS 这个术语而不是 DMIPS,因为 1757 除数是 DEC VAX 11/780 的结果。反正也显示了MIPS/MHz个计算。注意由于编译器和 Android ARM CPU 上特别低的比率造成的差异。
Dhry1 Dhry1 Dhry2 Dhry2 Dhry2
Opt NoOpt Opt NoOpt Opt
VAX VAX VAX VAX MIPS/
CPU MHz MIPS MIPS MIPS MIPS MHz
AMD 80386 40 17.5 4.32 13.7 4.53 0.3
80486 DX2 66 45.1 12 35.3 12.4 0.5
Pentium 100 169 31.8 122 32.2 1.2
Pentium Pro 200 373 92.4 312 91.9 1.6
Pentium II 300 544 132 477 136 1.6
Pentium III 450 846 197 722 203 1.6
Pentium 4 1900 2593 261 2003 269 1.1
Atom 1666 2600 772 1948 780 1.2
Athlon 64 2211 5798 1348 4462 1312 2.0
Core 2 Duo 1 CP 2400 7145 1198 6446 1251 2.7
Phenom II 1 CP 3000 9462 2250 7615 2253 2.5
Core i7 4820K 3900 14776 2006 11978 2014 3.1
Later Intel Compiler
Pentium 4 1900 2613 1795 0.9
Athlon 64 2211 6104 3720 1.7
Core 2 Duo 2400 8094 5476 2.3
Phenom II 3000 9768 6006 2.0
Core i7 4820K 3900 15587 10347 2.7
Linux Ubuntu GCC Compiler
Atom 1666 5485 1198 2055 1194 1.2
Athlon 64 2211 9034 2286 4580 2347 2.1
Core 2 Duo 2400 13599 3428 5852 3348 2.4
Phenom II 3000 13406 3368 6676 3470 2.2
Core i7 4820K 3900 29277 7108 16356 7478 4.2
ARM Android NDK
926EJ 800 356 196 0.4
v7-A9 1500 1650 786 1.1
v7-A15 1700 3189 1504 1.9
Atom Houdini 1866 1840 1310 1.0