SSE对冲浮标练习
在处理SSE(AVX)中的整数和浮点数时,将所有整数转换为浮点数并仅使用浮点数是一个好习惯吗? 因为之后我们只需要一些SIMD指令,而我们需要使用的是添加和比较指令( <, <=, ==
),我希望这种转换应该完全保留。
将我的评论扩展为答案。
基本上你权衡以下权衡:
坚持使用整数:
- 整数SSE是低延迟,高吞吐量。 (Sandy Bridge上的双重问题)
- 限制为128位SIMD宽度。
转换为浮点数:
- 受益于256位AVX。
- 更高的延迟,只有单一问题的加法/减法(在Sandy Bridge上)
- 发生初始转换开销。
- 将输入限制为适合
float
而没有精度损失的float
。
我现在说坚持使用整数。 如果你不想用float
版本重复代码,那就是你的电话。
我曾经看过,只有当你必须进行分割时,模拟具有浮点的整数变得更快。
请注意,我没有提到可读性,因为潜入手动矢量化可能意味着性能更重要。