我正在使用 Intel AVX 指令的 C 内在函数编写代码。如果我有一个压缩双向量(a__m256d
),将它们存储到内存中的不同位置(即我需要将它们扇出到不同的位置,以便它们不再打包)的最有效方法(即最少的操作数)是什么?伪代码:
__m256d *src;
double *dst;
int dst_dist;
dst[0] = src[0];
dst[dst_dist] = src[1];
dst[2 * dst_dist] = src[2];
dst[3 * dst_dist] = src[3];
使用 SSE,我可以这样做__m128
类型使用_mm_storel_pi
and _mm_storeh_pi
内在函数。我还没有找到任何类似的 AVX 可以让我将各个 64 位片段存储到内存中。有吗?
您可以使用几个提取本征来完成此操作:(警告:未经测试)
__m256d src = ... // data
__m128d a = _mm256_extractf128_pd(src, 0);
__m128d b = _mm256_extractf128_pd(src, 1);
_mm_storel_pd(dst + 0*dst_dist, a);
_mm_storeh_pd(dst + 1*dst_dist, a);
_mm_storel_pd(dst + 2*dst_dist, b);
_mm_storeh_pd(dst + 3*dst_dist, b);
您想要的是 AVX2 中的聚集/分散指令...但这还需要几年的时间。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)