suma pozioma 8 upakowanych 32-bitowych pływaków

Jeśli mam 8 upakowanych 32-bitowych liczb zmiennoprzecinkowych (__m256), jaki jest najszybszy sposób wyodrębnienia sumy poziomej wszystkich 8 elementów? Podobnie, jak uzyskać poziomy i minimalny poziom? Innymi słowy, jaka jest najlepsza implementacja dla następujących funkcji C ++?

float sum(__m256 x);  ///< returns sum of all 8 elements
float max(__m256 x);  ///< returns the maximum of all 8 elements
float min(__m256 x);  ///< returns the minimum of all 8 elements

questionAnswers(4)

yourAnswerToTheQuestion