SSE 程序在 AMD 上比在 Intel 上花费的时间要长得多

Posted

技术标签:

【中文标题】SSE 程序在 AMD 上比在 Intel 上花费的时间要长得多【英文标题】:SSE program takes a lot longer on AMD than on Intel 【发布时间】:2011-06-19 16:21:41 【问题描述】:

我正在使用 SSE2 指令优化算法。但是我在测试性能的时候遇到了这个问题:

I) 英特尔 e6750

    执行 4 次非 SSE2 算法需要 14.85 秒 执行 1 次 SSE2 算法(处理相同的数据)需要 6.89 秒

II) 飞鸿 II x4 2.8Ghz

    执行 4 次非 SSE2 算法需要 11.43 秒 执行 1 次 SSE2 算法(处理相同的数据)需要 12.15 秒

任何人都可以帮助我为什么会发生这种情况?我真的对结果感到困惑。

在这两种情况下,我都使用 -O3 作为标志使用 g++ 进行编译。

PS:该算法不使用浮点数学,它使用 SSE 的整数指令。

【问题讨论】:

使用相同二进制文件的时间几乎是两倍,并且在时钟频率更高且(假设“Deneb”)具有相同缓存大小的 CPU 上?真可惜。我唯一能想到的就是如果你做很多洗牌,因为与这一代英特尔 CPU 相比,这一代 AMD 处理器的延迟要高出 3 倍(在最新一代上看起来不同)。其他指令肯定会在这里或那里或多或少地有一个循环,但总而言之,它的运行速度不应该慢 2 倍。 (AMD 处理器也以“重新格式化延迟”而闻名,但由于您不混合浮点/整数,所以这无关紧要。) 超过 20% 的差异听起来很奇怪。 AMD Phenom 的版本是多少? L1/L2/L3 缓存大小?算法实现是什么? 【参考方案1】:

在过去 5 年左右的时间里,英特尔对其 SSE 实施进行了重大改进,而 AMD 并没有真正跟上。最初两者实际上都只是 64 位执行单元,而 128 位操作被分解为 2 个微操作。自从 Core 和 Core 2 推出以来,英特尔 CPU 已经实现了完整的 128 位 SSE,这意味着 128 位操作有效地获得了 2 倍的吞吐量提升(1 个微操作对 2 个)。较新的 Intel CPU 还具有多个 SSE 执行单元,这意味着对于 128 位 SIMD 指令,每个时钟吞吐量可以获得 > 1 条指令。

【讨论】:

哇。去年买 CPU 的时候没想到会有这么大的不同=(现在我正在进入 HPC,现在我可以理解钱的不同了。 如果您使用的是 SSE,那么英特尔确实是城里唯一的游戏,至少目前如此。对于非 SIMD 代码,可能没有那么大的差异,而且英特尔 CPU 非常昂贵,因此性价比相当。

以上是关于SSE 程序在 AMD 上比在 Intel 上花费的时间要长得多的主要内容,如果未能解决你的问题,请参考以下文章

Unity 应用在 IOS 上比在 Android 上使用更多的内存

为啥这个 C++ 程序在 Windows 上比在 Linux 上慢?

HTML5 Canvas 在 Firefox 上比在 Chrome 上更快!为啥?

为啥 sift.compute() 在 MSER 关键点上比在 SIFT 关键点上慢

我的 OpenCL 代码在 GPU 上比在 CPU 上慢

SSE、SSE2、SSE3指令集的区别?