并行执行的 CPU 性能分析

Performance analysis of CPUs for parallel executions

最近"parallel speedup"比较了两台不同规格的电脑

1- 单个 AMD Ryzen 7 1800x 运行,频率为 3.6GHz。这个cpu有8个物理核心和16个逻辑核心(here)。

2- 双 Xeon 2695 v3 (Haswell) 运行 在一块主板上 2.3GHz。每个 cpu 有 14 个物理内核。因此,物理内核总数为 28,逻辑内核总数为 56 (here)。

我 运行 一个程序在两个系统上具有不同的线程数。我知道这可能不是一个公平的比较,因为该程序还使用了大约 4GB 的内存,而且我没有说明内存规格,但加速图表如下所示。请注意,对于每个处理器,

speedup = (time of one thread on that CPU) / (time of N threads on that CPU)

因此,对于 1 个线程,Ryzen 和 Xeon 都缩放为 1。

如果有人看图表,他可能会说Xeon 的加速比Ryzen 好。例如,8 核时,Ryzen 有 3.4 加速,而 Xeon 有 4.69 加速。

但是,如果我们检查时间数据,我们会发现 8 个线程的执行时间相同。此外,Ryzen 的性能优于 Xeon。很明显

S_ryzen = 900/263        <        S_xeon = 1188/253

所以,只看加速数据,听起来很误导。另一方面,我确实希望 8 线程 ryzen 的执行时间应该比 Xeon 少,例如200 秒,因为它具有更好的单核性能。

这两款处理器的性能对比可以得出什么结论?我知道至强提供更多的内核,但是采用 8 个内核(两者都有),哪个处理器性能更高?

令 S(U, N) 表示在系统 U 上获得的加速比,其中基准程序(加速比公式中的分子)使用 1 个线程,改进后的程序使用 N 个线程。即:

S(U, N) = 时间U(1) / 时间U(N)

因此:

S(至强,8)> S(锐龙,8)

这意味着:

TimeXeon(1) / TimeXeon(8) > TimeRyzen( 1) / 时代锐龙(8)

但是我们无法得出关于任何两个执行时间如何相关的任何结论。我们只能说 Xeon scaled 更好(即,该程序能够比 Ryzen 更有效地利用 Xeon 上的额外资源),但这并不意味着它在执行时间方面 更好。这只是一个数学上无效的结论。例如,我们不能得出 TimeXeon(8) > TimeRyzen(8).

但是,我们可以观察到:

S(至强, 8) > S(至强, 4)

即:

时间至强(1) / 时间至强(8) > 时间至强( 1) / 时代至强(4)

两个 TimeXeon(1) 项相互抵消,我们得到:

时间至强(4) > 时间至强(8)

现在是批判性的观察。为什么我们能够从两个给定的加速推导出两个执行时间如何在相同的 CPU 上但在两个不同的 CPU 上相关?因为在同一个 CPU 上,两个加速的基线是相同的,这使我们能够相互抵消它们。

那么我们如何才能对两个不同的 CPU 进行相同的推导呢?通过使用共享基线或参考系统。通常,选择一些旧系统作为基线。例如,您可以在这里选择 Willamette,它是 2000 年发布的 Pentium 4 处理器。当然,您需要选择一个可以 运行 进行实验的系统,以测量基线执行时间。所以加速比可以计算如下:

Sref(U, N) = TimeWillamette(1) / TimeU(N)

基本上,TimeWillamette(1) 成为共享术语。这个公式比上一个公式有用得多。例如,仅给定 Sref(U, N) 即可轻松计算 S(U, N),如下所示:

S(U, N) = Sref(U, N) / Sref(U, 1)

所以如果 Sref(Xeon, 8) > Sref(Xeon, 4),那么从数学上可以推断出TimeXeon(8) < TimeXeon(4)。此外,如果 Sref(Xeon, 8) > Sref(Ryzen, 8),则从数学上可以推断出 TimeXeon(8) < TimeRyzen(8)。与使用 S(U, N).[=14 相比,相同或不同 CPUs 上的两个 Sref(U, N) 加速之间的给定关系包含更多信息=]

SPEC CPU benchmark suite uses this method to normalize performance metrics. The SPEC CPU 2006 suite uses a machine from 1997:

SPEC uses a historical Sun system, the "Ultra Enterprise 2" which was introduced in 1997, as the reference machine. The reference machine uses a 296 MHz UltraSPARC II processor, as did the reference machine for CPU2000. But the reference machines for the two suites are not identical: the CPU2006 reference machine has substantially better caches, and the CPU2000 reference machine could not have held enough memory to run CPU2006.

SPEC CPU 2017 使用 a more modern machine from 2006:

The reference machine is a historical Sun Microsystems server, the Sun Fire V490 with 2100 MHz UltraSPARC-IV+ chips. The UltraSPARC-IV+ was introduced in 2006, and is newer than the chip used in the CPU2000 and CPU2006 reference machines (the 300 MHz 1997 UltraSPARC II).

归一化后的数字无论来自同一个系统还是不同系统都可以相互比较

因此参考系统应该是比所有感兴趣的系统(即可以相互比较的系统)更老(尤其是更慢)的最现代的系统。