У меня есть упакованный вектор из четырех 64-битных значений с плавающей запятой.
Я хотел бы получить сумму векторных элементов.
С SSE (и используя 32-битные поплавки) я мог бы просто сделать следующее:
v_sum = _mm_hadd_ps(v_sum, v_sum);
v_sum = _mm_hadd_ps(v_sum, v_sum);
К сожалению, несмотря на то, что AVX имеет команду _mm256_hadd_pd, он отличается результатом SSE-версии. Я считаю, что это связано с тем, что большинство инструкций AVX работают как инструкции SSE для каждого низкого и высокого 128-бит отдельно, без пересечения 128-битной границы.
В идеале решение, которое я ищу, должно следовать этим рекомендациям:
1) используйте только инструкции AVX/AVX2. (без SSE)
2) выполнить не более 2-3 инструкций.
Однако любой эффективный/элегантный способ сделать это (даже не следуя приведенным выше рекомендациям) всегда хорошо принят.
Большое спасибо за любую помощь.
-Луиги Кастелли