【问题标题】:Store the sum of a __m256 vector without the AVX-to-SSE transition penalty?存储没有 AVX 到 SSE 转换惩罚的 __m256 向量的总和?
【发布时间】:2013-09-14 02:17:40
【问题描述】:

以下代码是否会导致 AVX 到 SSE 的转换损失?如果是这样,我怎样才能存储 __m256 向量的总和而不会产生这种惩罚?

__mm256 x_swap = _mm_permute2f128_ps(x,x,1)
x = _mm256_add_ps(x, x_swap);
x = _mm256_hadd_ps(x,x);
x = _mm256_hadd_ps(x,x);  // now all fields of x contain the sum

float sum;
_mm_store_ss(&sum, _mm256_castps256_ps128(x));

谢谢。

【问题讨论】:

    标签: simd avx


    【解决方案1】:

    只要您使用-mavx 编译代码,您就不会看到任何 AVX-SSE 转换惩罚。使用-mavx 编译时,您会自动使用较新的非破坏性 SSE 操作码,并且在将这些操作码与 AVX 指令混合时不会受到任何处罚。仅当您将旧版 SSE 指令与 AVX 混合时才会产生惩罚,并且通常只会在汇编代码或混合使用不同标志编译的模块时发生。

    【讨论】:

      猜你喜欢
      • 2017-10-08
      • 2013-07-16
      • 1970-01-01
      • 2018-10-01
      • 1970-01-01
      • 2014-12-01
      • 1970-01-01
      • 2017-06-10
      • 2015-08-31
      相关资源
      最近更新 更多