gpt4 book ai didi

c - 如何旋转 SSE/AVX vector

转载 作者:太空狗 更新时间:2023-10-29 16:31:05 26 4
gpt4 key购买 nike

我需要以尽可能少的时钟周期执行循环操作。在第一种情况下,我们假设 __m128i 作为源和目标类型:

source: || A0 || A1 || A2 || A3 ||
  dest: || A1 || A2 || A3 || A0 ||
dest = (__m128i)_mm_shuffle_epi32((__m128i)source, _MM_SHUFFLE(0,3,2,1));

现在我想对 AVX 内在函数做同样的事情。所以让我们假设这次 __m256i 作为源和目标类型:

source: || A0 || A1 || A2 || A3 || A4 || A5 || A6 || A7 ||
  dest: || A1 || A2 || A3 || A4 || A5 || A6 || A7 || A0 ||

The AVX intrinsics is missing most of the corresponding SSE integer operations.Maybe there is some way go get the desired output working with the floating point version.

I've tried with:

dest = (__m256i)_mm256_shuffle_ps((__m256)source, (__m256)source, _MM_SHUFFLE(0,3,2,1));

但我得到的是:

|| A0 || A2 || A3 || A4 || A5 || A6 || A7 || A1 ||

关于如何以有效方式解决此问题的任何想法? (没有混合 SSE 和 AVX 操作,也没有“手动”反转 A0A1

提前致谢!

最佳答案

我的解决方案:

__m256 tmp =  ( __m256 ) _mm256_permute_ps((__m256)_source, _MM_SHUFFLE ( 0,3,2,1 ));
* ( _dest ) = ( __m256i) _mm256_blend_ps(tmp, _mm256_permute2f128_ps ( tmp,tmp,1 ), 136);

关于c - 如何旋转 SSE/AVX vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11906814/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com