Нахождение медианы 3 значений с использованием набора инструкций SSE2 - PullRequest
1 голос
/ 20 октября 2010

Мои входные данные - 16-битные данные, и мне нужно найти медиану из 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 функции, которые я планирую использовать:

  • max - _mm_max_epi16
  • min - _mm_min_epi16
  • сложение - _mm_add_epi16
  • вычитание - _mm_sub_epi16

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

1 Ответ

5 голосов
/ 20 октября 2010

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

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

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

Обратите внимание, что на самом деле это просто сокращенная сортировочная сеть для N = 3.

...