c - 解读现代 PC 上的 Dhrystone 基准测试结果

标签 c benchmarking

首先我会总结一下我做了什么。

我从这里下载了 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 是优化级别二级,O0 是无)。

这将提供以下 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

关于c - 解读现代 PC 上的 Dhrystone 基准测试结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28072939/

相关文章:

c - 程序何时会受益于预取和非临时加载/存储?

c++ - 如何将字符串数组转换为 Char * 数组 C++

检查 C 中外部定义的标识符是否存在

c - C有引用吗?

C Valgrind - 条件跳转取决于未初始化的值

Golang 数据竞争甚至使用自定义并发映射的互斥体

python - 为什么在 Python 中返回元组比返回多个值更快?

Hadoop:是否可以以非 hdfs 用户身份运行 TestDFSIO 基准测试

javascript - 对于新的 DOM 元素,jquery .on 比 .click 更快吗?

javascript - 是否可以实时准确地确定用户的下载速度?