Я пишу код, используя встроенные функции C для инструкций Intel AVX. Если у меня есть упакованный двойной вектор (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
и _mm_storeh_pi
. Мне не удалось найти ничего похожего для AVX, которое позволяло бы мне хранить отдельные 64-битные фрагменты в памяти. Существует ли такое?