У меня есть вектор __m256d, содержащий четыре 64-битных значения с плавающей запятой.
Мне нужно найти горизонтальный максимум элементов вектора и сохранить результат в скалярном значении с двойной точностью;
Все мои попытки закончились использованием большого количества перетасовок векторных элементов, что сделало код не очень элегантным и эффективным. Также я обнаружил, что невозможно оставаться только в домене AVX. В какой-то момент мне пришлось использовать 128-битные инструкции SSE для извлечения окончательного 64-битного значения. Тем не менее, я хотел бы, чтобы последнее утверждение было ошибочным.
Итак, идеальное решение будет:
1) использовать только инструкции AVX.
2) минимизировать количество инструкций. (Надеюсь не более 3-4 инструкций)
При этом будет принято любое элегантное / эффективное решение, даже если оно не соответствует приведенным выше рекомендациям.
Спасибо за любую помощь.
-Луиджи
vzeroupper
) - person Gunther Piez   schedule 21.03.2012