我正在尝试比较 i5-3210M @ 2.5GHz 和 6GB 内存以及 i7 970 @3.2GHz 和 24GB 内存的数值运算性能。结果太出乎意料了,我猜要么是我操作错了,要么是 i7 出了问题。
作为背景,以下站点上的信息显示 i7 在各个方面都更胜一筹(除了是大约 2 年前的旧 CPU 型号)。
http://www.cpubenchmark.net/compare.php?cmp[]=840&cmp[]=815
两台电脑的操作系统相同(Arch Linux x86_64)。两台电脑同样稳定,从未崩溃过。
我正在使用 xlinpack_xeon64,它是我在这里获得的 https://aur.archlinux.org/packages/linpack/
此测试“...利用 SMP 并行性,默认情况下生成与 SMP 系统处理器数量相同的执行线程。”我可以通过查看 top/htop 来验证它是否正在这样做。此外,当我明确将环境变量 OMP_NUM_THREADS 设置为可变数量的线程时,我可以通过 top/htop 观察到正在使用指定的数量。
使用这个,我发现 i5 比 i7 快,有时快 1.2 倍。我已将两者的完整结果粘贴在下面。
我最初预计在这些高度可并行的测试中,i7 的性能将比 i5 好三倍左右(i7 有 6 个物理核心,而 i5 有 2 个)。
我使用了 systester 基准测试程序来查看 linpack 是否存在特殊之处,它提供了几乎相同的结果(i5 速度快了大约 1.2 倍)。
最后,我检查了此站点上报告的两个 CPU 的记录的 gflops http://www.intel.com/support/processors/sb/CS-017346.htm
这里,i5 的指定 gflops 为 40。因此与 linpack 结果显示的大致相同。另一方面,i7 的指定 gflops 约为 79。我得到的是其大约一半。
我感到很困惑,但我推测 i7(无论是 CPU 本身、RAM 还是 mb)出现故障。事实上,i7 的结果变化多端,而 i5 的结果完全没有变化,这也表明 i7 出了问题。
任何见解都会非常有帮助。
-m
======= 结果 ===================
============================================================================
========== i7 linpack test =================================================
============================================================================
Input data or print help ? Type [data]/help :
Number of equations to solve (problem size): 20000
Leading dimension of array: 20000
Number of trials to run: 4
Data alignment value (in Kbytes): 4
Current date/time: Wed May 21 23:51:14 2014
CPU frequency: 3.206 GHz
Number of CPUs: 1
Number of cores: 6
Number of threads: 12
Parameters are set to:
Number of tests: 1
Number of equations to solve (problem size) : 20000
Leading dimension of array : 20000
Number of trials to run : 4
Data alignment value (in Kbytes) : 4
Maximum memory requested that can be used=3200404096, at the size=20000
=================== Timing linear equation system solver ===================
Size LDA Align. Time(s) GFlops Residual Residual(norm) Check
20000 20000 4 149.874 35.5909 3.288586e-10 2.911119e-02 pass
20000 20000 4 135.832 39.2701 3.288586e-10 2.911119e-02 pass
20000 20000 4 142.117 37.5334 3.288586e-10 2.911119e-02 pass
20000 20000 4 121.434 43.9262 3.288586e-10 2.911119e-02 pass
Performance Summary (GFlops)
Size LDA Align. Average Maximal
20000 20000 4 39.0801 43.9262
Residual checks PASSED
End of tests
============================================================================
========== i5 linpack test =================================================
============================================================================
Input data or print help ? Type [data]/help :
Number of equations to solve (problem size): 20000
Leading dimension of array: 20000
Number of trials to run: 4
Data alignment value (in Kbytes): 4
Current date/time: Wed May 21 23:54:15 2014
CPU frequency: 3.092 GHz
Number of CPUs: 1
Number of cores: 2
Number of threads: 4
Parameters are set to:
Number of tests: 1
Number of equations to solve (problem size) : 20000
Leading dimension of array : 20000
Number of trials to run : 4
Data alignment value (in Kbytes) : 4
Maximum memory requested that can be used=3200404096, at the size=20000
=================== Timing linear equation system solver ===================
Size LDA Align. Time(s) GFlops Residual Residual(norm) Check
20000 20000 4 125.668 42.4461 4.097986e-10 3.627616e-02 pass
20000 20000 4 125.602 42.4686 4.097986e-10 3.627616e-02 pass
20000 20000 4 125.551 42.4856 4.097986e-10 3.627616e-02 pass
20000 20000 4 125.550 42.4861 4.097986e-10 3.627616e-02 pass
Performance Summary (GFlops)
Size LDA Align. Average Maximal
20000 20000 4 42.4716 42.4861
Residual checks PASSED
End of tests
答案1
我的回答来得有点晚,但是因为我刚刚做了 HPL(高性能 linpack)基准测试,所以我还是把我的答案写下来吧。
要了解实验结果,您需要知道 Linpack 正在计算什么以及旨在进行基准测试的内容。Linpack 使用密集矩阵线性代数计算来测量高密度浮点计算的性能。由于矩阵乘法运算占主导地位,结果在一定程度上反映了 CPU 理论 FLOPS 容量的峰值。(当然,还存在一些其他因素 - 内存、额外内存操作等 - 这些因素不允许实现完整的 CPU 理论 FLOPS;但如果您查看 TOP500 列表,传统上 70-80% 的完整 FLOPS 是相当容易实现的。)
我敢打赌,您的 Linpack 可执行文件正在利用 Intel MKL(数学核心库)。在较旧的架构上(您的 i7 属于 Sandy Bridge 之前),唯一可用的“快速”浮点处理单元是 SSE 单元,它一次处理 2 个浮点数。您的较新的 i5 处理器采用 Ivy Bridge 架构,具有 AVX 单元,可以一次处理 4 个浮点数。(实际上,如果您更仔细地查看硬件功能,浮点运算的数量会加倍,因为它们可以同时执行加法和乘法,因此每个 SSE 和 AVX 单元分别为 4 FLOP/周期和 8 FLOP/周期)。
因此,i7(3.2 GHz)与 i5(2.5 GHz)CPU 的单核 CPU 性能理论比率为:
(2.5) * 2 / (3.2) = 1.56
(因素 2 考虑了 SSE-AVX 的差异。)但如果你利用所有核心没有超线程,你应该得到:
(2.5) * 2 * 2 / (3.2 * 6) = 0.52
那么,现在我无法完全解释你的观察!除非 6 核计算真的会导致 CPU 缺乏数据进行计算?i5 速度更快这一事实可能表明其他改进不仅仅来自 CPU 速度和计算能力。
威拉万
附言:英特尔对“i7”和“i5”术语的使用总是让我感到困惑;虽然“i7”当然比“i5”好,但前者能带来什么性能优势、优势有多大却并不那么清楚。