SSE对冲浮标练习

时间:2012-02-24 20:52:42

标签: c gcc sse simd avx

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

1 个答案:

答案 0 :(得分:6)

将我的评论扩展为答案。

基本上你在权衡下面的权衡:

坚持使用整数:

  • 整数SSE是低延迟,高吞吐量。 (Sandy Bridge上的双重问题)
  • 限制为128位SIMD宽度。

转换为浮点数:

  • 受益于256位AVX。
  • 更长的延迟,只有单一问题的加法/减法(在Sandy Bridge上)
  • 发生初始转换开销。
  • 将输入限制为适合float而没有精确损失的输入。

我现在说坚持使用整数。如果您不想复制float版本的代码,那就是您的电话。

我唯一能看到模拟具有浮点的整数变得更快的时候就是你需要进行分割的时候。


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