gpt4 book ai didi

c - 使用单个 AVX 内部函数反转包含 double 值的 AVX 寄存器

转载 作者:太空狗 更新时间:2023-10-29 15:59:02 29 4
gpt4 key购买 nike

如果我有一个 AVX 寄存器,里面有 4 个 double 值,我想将它的反向存储在另一个寄存器中,是否可以用一个内部命令来实现?

例如:如果我在 SSE 寄存器中有 4 个 float ,我可以使用:

_mm_shuffle_ps(A,A,_MM_SHUFFLE(0,1,2,3));

我可以使用 _mm256_permute2f128_pd() 来做到这一点吗?我不认为您可以使用上述内在函数来解决每个单独的双重问题。

最佳答案

你实际上需要 2 个排列来做到这一点:

  • _mm256_permute2f128_pd() 仅在 128 位 block 中置换。
  • _mm256_permute_pd() 不跨 128 位边界排列。

所以你需要同时使用两者:

inline __m256d reverse(__m256d x){
x = _mm256_permute2f128_pd(x,x,1);
x = _mm256_permute_pd(x,5);
return x;
}

测试:

int main(){
__m256d x = _mm256_set_pd(13,12,11,10);

cout << x.m256d_f64[0] << " " << x.m256d_f64[1] << " " << x.m256d_f64[2] << " " << x.m256d_f64[3] << endl;
x = reverse(x);
cout << x.m256d_f64[0] << " " << x.m256d_f64[1] << " " << x.m256d_f64[2] << " " << x.m256d_f64[3] << endl;
}

输出:

10  11  12  13
13 12 11 10

关于c - 使用单个 AVX 内部函数反转包含 double 值的 AVX 寄存器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13422747/

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