У меня есть функция, использующая 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-байтовых целых чисел.
Любые хорошие предложения высоко ценятся :)
Спасибо
m1, m2, m3, and m4
? - person Z boson   schedule 07.03.2014_mm_cvtsi128_si32
. - person rwong   schedule 08.03.2014