这是对我之前有关将
__m256d
向量的各个元素传送到不同内存位置(散布操作)的上一个问题的补充。我的代码将许多不再访问的数据存储到内存中,希望通过使用非暂态提示指令来减少由所有这些存储生成的缓存污染。但是,我无法想出一个好的方法来实现这一点。以下是我的代码概述:__m256d src = ... // data
double *dst;
int dst_dist;
__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);
我希望使用非临时提示执行64位存储,但似乎没有直接从XMM寄存器实现此操作的方法。最佳实现方式是什么?