这搭载了我之前关于将__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 寄存器执行此操作。实现这一目标的最佳方法是什么?