2010-10-20 3 views
1

Мои входные данные - 16-разрядные данные, и мне нужно найти медиану из 3 значений с помощью набора инструкций SSE2.Поиск медианы из 3 значений с использованием набора инструкций SSE2

Если у меня есть 3 16-бит входные значения A, B и C, я думал, что сделать это следующим образом:

D = max(max(A, B), C) 
E = min(min(A, B), C) 
median = A + B + C - D - E 

C функцией Я строгальная для использования является:

  • макс - _mm_max_epi16
  • мин - _mm_min_epi16
  • дополнение - _mm_add_epi16
  • вычитают - _mm_sub_epi16

Может ли кто-нибудь предложить лучший способ?

ответ

5

Ваша идея довольно умна, но вы можете сделать это с меньшим количеством операций, используя max и min.

t1 = min(A, B) 
t2 = max(A, B) 
t3 = min(t2, C) 
median = max(t1, t3) 

Это будет всего 4 инструкции SSE по сравнению с 8 в вашей первоначальной реализации.

Обратите внимание, что это на самом деле просто обрезают sorting network для N = 3.

+1

аккуратным. спасибо –

Смежные вопросы