c++ - 反转 __m512i 寄存器中的值

标签 c++ x86 simd avx512

我想反转 __m512i 中所有值的顺序登记。 我的主要问题是我没有找到如何使用所有不同的洗牌操作的解释。我已经尝试过_mm512_shuffle_epi32但我没有找到任何解释 _MM_PERM_AAAA , _MM_PERM_AAAB ,...实际上可以工作,只是尝试它们,我不知道如何使用它们。

最佳答案

找到解决方案:

const __m512i reverseMask = _mm512_set_epi32 (0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15);
__m512i reversed = _mm512_permutevar_epi32(reverseMask,ObjectToReverse); 

请注意,“reverseMask”不是真正的掩码,而是一个寄存器,用于保存寄存器中要反转的每个对象的位置。

关于c++ - 反转 __m512i 寄存器中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48986768/

相关文章:

c++ - 如何使用 SSE/AVX 高效地执行 double/int64 转换?

c - SIMD 搜索最后一个峰值后的低谷

C++:无法使用 Mini-XML 从 XML 文件加载长字符串

c++ - 将非模板类转换为模板

C++:在这种情况下如何最优雅地最小化实例复制?

linux - 在汇编中拆分字符串

gcc - mfence 和 asm volatile 的区别 ("": : : "memory")

c++ - 没有返回对函数参数的引用的 clang 警告

检查变量何时被修改

c - 用于整个 256 位寄存器的 AVX unpackhipd/unpacklopd 模拟