【问题标题】:Do I get a performance penalty when mixing SSE integer/float SIMD instructions混合 SSE 整数/浮点 SIMD 指令时是否会降低性能?
【发布时间】:2011-06-27 03:39:26
【问题描述】:

我最近经常以内部函数的形式使用 x86 SIMD 指令 (SSE1234)。我发现令人沮丧的是,SSE ISA 有几个简单的指令,这些指令仅适用于浮点数或整数,但理论上两者的性能应该相同。例如,浮点向量和双精度向量都有从地址(movhpsmovhpd)加载 128 位向量的高 64 位的指令,但对于整数没有这样的指令向量。

我的问题:

在整数向量上使用浮点指令时,是否有任何理由预期性能会受到影响,例如使用 movhps 将数据加载到整数向量?

我写了几个测试来检查,但我想他们的结果不可信。编写一个正确的测试来探索此类事情的所有极端情况真的很难,尤其是当指令调度最有可能涉及到这里时。

相关问题:

其他琐碎相似的事情也有几条基本相同的指令。例如,我可以对 pororpsorpd 进行按位或运算。谁能解释这些附加说明的目的是什么?我猜这可能与应用于每条指令的不同调度算法有关。

【问题讨论】:

  • 我不认为自 MMX/SSE 早期以来一直存在此问题。任何合理的现代 x86 CPU(例如从过去 5 年左右开始)都不应有任何此类限制。这只是 MMX/SSE 只是用螺栓固定在 FPU 上的那些日子的遗产。
  • @Paul R:我同意这一点。然而,SSE ISA 不仅有来自旧时代的有趣部分,例如SSE3 提供了仅适用于双打的“movddup”指令。这实际上是让我感到困惑的原因:限制不应该存在,但英特尔似乎暗示并非如此。
  • 嗯,整个优化过程,尤其是在 SIMD 方面,涉及大量实验 - 尝试想法,收集计时/分析数据,重复 ad 令人作呕...所以最好的办法可能是采取经验方法 - 尝试一切,看看有什么不同。
  • @Paul.R:除非我从了解 x86 SIMD 内部工作原理的专家那里得到答案,否则我很可能会采用这种方式。
  • 即使您对某一代 x86 有明确的答案,但在下一代中很可能会是另一回事 - 没有什么东西是一成不变的,所以您必须不断重新评估、试验,基准测试等,如果您需要绝对最大的 SIMD 性能。

标签: c assembly sse simd intrinsics


【解决方案1】:

来自专家(显然不是我:P):http://www.agner.org/optimize/optimizing_assembly.pdf [13.2 将向量指令与其他类型的数据一起使用(第 118-119 页)]:

在某些处理器上使用错误类型的指令会受到惩罚。这是 因为处理器可能有不同的数据总线或整数的不同执行单元 和浮点数据。在整数和浮点单元之间移动数据可以采用 一个或多个时钟周期,具体取决于处理器,如表 13.2 中所列。

Processor                       Bypass delay, clock cycles 
  Intel Core 2 and earlier        1 
  Intel Nehalem                   2 
  Intel Sandy Bridge and later    0-1 
  Intel Atom                      0 
  AMD                             2 
  VIA Nano                        2-3 
Table 13.2. Data bypass delays between integer and floating point execution units 

【讨论】:

  • 谢谢。正是我想要的:)
  • 感谢更新参考并引用它@nathan-reed
  • 我在stackoverflow.com/a/31233017/224132 写了一个关于pororps 选择的问题的详细答案。看看延迟是否不是唯一的考虑因素。 (例如,por 可以在比orps 更多的端口上运行。)
  • 另请注意,在 Core2 / Penryn (pre-Nehalem) 上,pororpsorpd 都是 vector-int 域操作。当前的 AMD CPU 也是如此。
猜你喜欢
  • 2011-12-24
  • 2019-11-13
  • 2011-12-25
  • 1970-01-01
  • 2016-10-19
  • 1970-01-01
  • 2013-05-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多