使用 linpack 比较 i7 (3.2Ghz) 和 i5 (2.5Ghz) 发现 i7 更差

使用 linpack 比较 i7 (3.2Ghz) 和 i5 (2.5Ghz) 发现 i7 更差

我正在尝试比较 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”好,但前者能带来什么性能优势、优势有多大却并不那么清楚。

相关内容