SSE对冲浮标练习

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

将我的评论扩展为答案。

基本上你权衡以下权衡:

坚持使用整数:

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

转换为浮点数:

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

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

我曾经看过,只有当你必须进行分割时,模拟具有浮点的整数变得更快。


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