У меня есть упакованный вектор из четырех 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 инструкциях.
Однако любой эффективный / элегантный способ сделать это (даже без соблюдения приведенных выше рекомендаций) всегда приемлем.
Большое спасибо за любую помощь.
-Луиджи Кастелли
_mm256_extractf128_ps
,_mm_add_ps
двух половинок вместе, затем используйте существующие методы уменьшения вектора 128b. - person Peter Cordes   schedule 13.04.2016