存储__m256向量的总和,而不会产生 AVX 到 SSE 的转换损失



以下代码是否会导致 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));

谢谢。

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

最新更新