2

在 SSE (AVX) 中同时处理整数和浮点数时,将所有整数转换为浮点数并仅使用浮点数是一种好习惯吗?因为在那之后我们只需要一些 SIMD 指令,而我们需要使用的只是加法和比较指令(<, <=, ==),我希望这种转换应该完全保留。

4

1 回答 1

6

将我的评论扩展为答案。

基本上你权衡以下权衡:

坚持整数:

  • 整数 SSE 是低延迟、高吞吐量的。(桑迪桥双期)
  • 限于 128 位 SIMD 宽度。

转换为浮点数:

  • 受益于 256 位 AVX。
  • 更高的延迟,并且只有单个问题的加法/减法(在 Sandy Bridge 上)
  • 产生初始转换开销。
  • 将输入限制为适合float无精度损失的输入。

我会说现在坚持使用整数。如果您不想在float版本中复制代码,那么这就是您的决定。

我见过的唯一一次用浮点模拟整数变得更快的是当你必须进行除法时。


请注意,我没有提到可读性,因为深入手动矢量化可能意味着性能更重要。

于 2012-02-24T21:15:31.273 回答