1

我在两台不同的机器上编译相同的程序,然后运行测试来比较性能。

两台机器的功率是有区别的:一台是配备四个 2.3GHz 处理器的 MacBook Pro,另一台是配备十二个 2.9GHz 处理器的戴尔服务器。

但是,mac 运行测试程序的时间更短!!

编译的唯一区别是我在机器 mac 上运行 g++-mp-4.8,而在另一台机器上运行 g++-4.8。

编辑:没有进行并行计算,我的进程是服务器上唯一运行的进程。此外,我还更新了戴尔的核心数量。

编辑 2:我运行了三个复杂性增加的测试,获得的时间是(戴尔,Mac)格式,以秒为单位:(1.67,0.56),(45,35),(120,103)。这些差异是相当大的!

编辑3:关于实际的处理器速度,我们与系统管理员一起考虑过,但仍然没有充分的理由。以下是 MacBook 处理器的规格:

http://ark.intel.com/fr/products/71459/intel-core-i7-3630qm-processor-6m-cache-up-to-3_40-ghz

这里是服务器:

http://ark.intel.com/fr/products/64589/Intel-Xeon-Processor-E5-2667-15M-Cache-2_90-GHz-8_00-GTs-Intel-QPI

4

2 回答 2

1

编译器实际上是相同的(-mp 只是表示这个 gcc 版本是通过 macports 安装的)。

您观察到的性能差异来自不同的 CPU:服务器是“Sandy Bridge”微架构,运行频率为 3.5 GHz,而 MacBook 具有更新的“Ivy Bridge”CPU,运行频率为 3.4 GHz(单线程涡轮增压速度)。

Sandy Bridge 和 Ivy Bridge 之间只是英特尔用语中的“Tick”,意思是工艺发生了变化(从 32nm 到 22nm),但微架构几乎没有变化。Ivy Bridge 中仍有一些变化可以改进某些工作负载的 IPC(每个时钟周期的指令)。特别是整数和浮点除法运算的吞吐量翻了一番。(有关更多更改,请参阅 AnandTech 的评论:http ://www.anandtech.com/show/5626/ivy-bridge-preview-core-i7-3770k/2 )

由于您的工作负载包含许多部门,这非常适合您的结果:“小”测试用例显示出最大的改进,而在较大的测试用例中,改进的核心性能可能会受到内存访问的影响,这两者的速度似乎大致相同系统。

请注意,鉴于当前信息,这纯粹是有根据的猜测——需要查看您的基准代码、编译器标志,并可能使用 CPU 性能计数器对其进行分析以验证这一点。

于 2014-02-27T10:47:37.337 回答
1

我想强调一个功能,该功能特别会扭曲移动处理器上单线程代码的结果:

在此处输入图像描述

在此处输入图像描述

请注意,虽然基本速度有 500 MHz 的差异(提到的问题是 2.3 GHz,我们在看同一个 CPU 吗?),但在 Turbo Boost 最大运行时,单线程速度只有 100 MHz 的差异。

Core-i7 还使用比服务器更快的 DDR,后者通常以较低的时钟速度运行,具有更多的缓冲区以支持更大容量的 RAM。通常 Xeon 上的通道数量和 L3 缓存大小的差异可以弥补这一点,但不同的工作负载会以不同的方式使用缓存和主内存。

当然,代际改进也可以产生影响。Ivy Bridge vs Sandy Bridge 的重要性因应用而异。

最后一种可能性是程序运行时不受 CPU 限制。I/O 子系统、GPGPU 的速度等可能会影响应用程序的多个数量级的性能。

于 2014-02-26T17:42:44.287 回答