use*_*122 3 c sse simd vectorization avx
如果我有一个AVX寄存器,其中有4个双打,并且我想将其反向存储在另一个寄存器中,是否可以使用单个内部命令执行此操作?
例如:如果我在SSE寄存器中有4个浮点数,我可以使用:
_mm_shuffle_ps(A,A,_MM_SHUFFLE(0,1,2,3));
Run Code Online (Sandbox Code Playgroud)
我可以使用_mm256_permute2f128_pd()吗?我不认为你可以用上面的内在来解决每个人的双重问题.
你实际上需要2个permutes来做到这一点:
_mm256_permute2f128_pd() 仅在128位块中进行置换._mm256_permute_pd() 不会跨越128位边界进行置换.所以你需要同时使用:
inline __m256d reverse(__m256d x){
x = _mm256_permute2f128_pd(x,x,1);
x = _mm256_permute_pd(x,5);
return x;
}
Run Code Online (Sandbox Code Playgroud)
测试:
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;
}
Run Code Online (Sandbox Code Playgroud)
输出:
10 11 12 13
13 12 11 10
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2534 次 |
| 最近记录: |