【发布时间】:2023-04-08 22:28:01
【问题描述】:
我正在为英特尔的 AVX 指令使用 C 内部函数编写代码。如果我有一个打包的双向量(__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,我可以使用 _mm_storel_pi 和 _mm_storeh_pi 内在函数对 __m128 类型执行此操作。我无法找到任何与 AVX 类似的东西,可以让我将单个 64 位片段存储到内存中。有吗?
【问题讨论】:
-
我想你想使用
__m256d。__m256是 8 个浮点数。 -
谢谢,我修好了。我错过了,因为我不使用
__m256d;我实际上正在使用花车。我要提取和存储的双精度数实际上是复数(两个浮点数,或一个双精度数的大小)。