Сохранение отдельных двойников из упакованного двойного вектора с использованием Intel AVX

Я пишу код, используя встроенные функции 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-битные фрагменты в памяти. Существует ли такое?

5
задан Jason R 9 December 2011 в 04:07
поделиться