Как найти горизонтальный максимум в 256-битном векторе AVX

У меня есть вектор __m256d, упакованный четырьмя 64-битными значениями с плавающей запятой.
Мне нужно найти горизонтальный максимум элементов вектора и сохранить результат в скалярном значении двойной точности;

Все мои попытки заканчивались перетасовкой векторных элементов, что делало код не очень элегантным и эффективным. Кроме того, я обнаружил, что невозможно оставаться только в домене AVX. В какой-то момент мне пришлось использовать 128-битные инструкции SSE, чтобы извлечь окончательное 64-битное значение. Тем не менее, я хотел бы оказаться неправым в этом последнем утверждении.

Таким образом, идеальным решением будет:
1) используйте только инструкции AVX.
2) минимизировать количество инструкций. (Я надеюсь на не более 3-4 инструкций)

Сказав это, любое элегантное/эффективное решение будет принято, даже если оно не соответствует приведенным выше рекомендациям.

Спасибо за любую помощь.

-Луиджи

14
задан Luigi Castelli 20 March 2012 в 21:48
поделиться