У меня есть функция, использующая SSE, чтобы сделать много вещей, и профайлер показывает мне, что часть кода, которую я использую для вычисления горизонтального минимума и максимума, потребляет большую часть времени.
Я использовал следующую реализацию для минимума, например:
static inline int16_t hMin(__m128i buffer) {
buffer = _mm_min_epi8(buffer, _mm_shuffle_epi8(buffer, m1));
buffer = _mm_min_epi8(buffer, _mm_shuffle_epi8(buffer, m2));
buffer = _mm_min_epi8(buffer, _mm_shuffle_epi8(buffer, m3));
buffer = _mm_min_epi8(buffer, _mm_shuffle_epi8(buffer, m4));
return ((int8_t*) ((void *) &buffer))[0];
}
Мне нужно вычислить минимум и максимум 16 1-байтовых целых чисел, как вы видите.
Любые хорошие предложения высоко ценятся:)
Спасибо