soma horizontal de 8 flutuadores embalados de 32 bits

Se eu tiver 8 números de ponto flutuante de 32 bits compactados (__m256), qual é a maneira mais rápida de extrair a soma horizontal de todos os 8 elementos? Da mesma forma, como obter o máximo e mínimo horizontal? Em outras palavras, qual é a melhor implementação para as seguintes funções do 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