Performance g++-mp-4.8和g++-4.8?

Performance g++-mp-4.8和g++-4.8?,performance,compiler-construction,g++4.8,Performance,Compiler Construction,G++4.8,我在两台不同的机器上编译相同的程序,然后运行测试来比较性能 这两台机器的性能有所不同:一台是MacBook Pro,有四个2.3GHz处理器,另一台是戴尔服务器,有十二个2.9GHz处理器 但是,mac在更短的时间内运行测试程序 编译中唯一的区别是,我在mac机上运行g++-mp-4.8,在另一台机器上运行g++-4.8 编辑:没有并行计算,我的进程是服务器上唯一运行的进程。此外,我还更新了Dell上的内核数量 编辑2:我进行了三次复杂度越来越高的测试,获得的时间是,以秒为单位的格式(戴尔,Ma

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

这两台机器的性能有所不同:一台是MacBook Pro,有四个2.3GHz处理器,另一台是戴尔服务器,有十二个2.9GHz处理器

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

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

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

编辑2:我进行了三次复杂度越来越高的测试,获得的时间是,以秒为单位的格式(戴尔,Mac):(1.67,0.56),(45,35),(120103)。这些差异是相当大的

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

这里是服务器:


我想强调一个特性,它特别扭曲了移动处理器上单线程代码的结果:

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

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

当然,一代人的进步也会产生影响。常春藤桥与沙质桥的重要性因应用而大不相同


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

编译器实际上是完全相同的(-mp仅表示此gcc版本是通过macports安装的)

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

Sandy Bridge和Ivy Bridge之间只是Intel术语中的一个“勾号”,这意味着过程发生了变化(从32nm到22nm),但微体系结构几乎没有变化。尽管如此,Ivy Bridge中仍有一些变化,可以改进某些工作负载的IPC(每个时钟周期的指令)。特别是整数和浮点除法运算的吞吐量翻了一番。(有关更多更改,请参阅AnandTech上的评论:)

由于您的工作负载包含很多划分,这非常适合您的结果:“小”测试用例显示了最大的改进,而在较大的测试用例中,改进的核心性能可能会被内存访问所掩盖,这在两个系统中似乎大致相同的速度


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

请参见@Samoth Ok,因此编译器不应造成任何差异,对吗?是的,这是另一个问题。您能提供时间吗?对于单线程代码,MacBook中的CPU(我想不是PowerBook)比Dell服务器中的CPU要快。要获得详细答案,请张贴系统的精确模型。CPU性能不仅取决于频率——例如,2GHz的英特尔内核将比2GHz的ARM CPU快得多。哈哈!是的,它是一台MacBook。我还在精神上。我已经添加了您要求的详细信息。我们想了想,但这似乎不是正确的解释……常春藤桥确实比桑迪有一些改进。特别是分区和mov指令。这可能很好地解释了这种差异@克里斯实际上是使用了大量的划分和移动(在C++意义上,我假设)指令。@ Plamen在机器指令意义上,但是除非GCC管理优化分区(或者用互惠来乘法),这与C++非常接近。每个程序中都有mov指令。