SSE对冲浮标练习

Car*_*s00 2 c gcc sse simd avx

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

Mys*_*ial 6

将我的评论扩展为答案.

基本上你权衡以下权衡:

坚持使用整数:

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

转换为浮点数:

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

我现在说坚持使用整数.如果您不想与float版本重复代码,那就是您的通话.

我已经看到模拟具有浮点的整数变得更快的唯一时间是你必须做分裂.


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