使用SSE2指令集查找3个值的中值

BЈо*_*вић 1 c algorithm sse2

我的输入数据是16位数据,我需要使用SSE2指令集找到3个值的中值.

如果我有3个16位输入值A,B和C,我想这样做:

D = max( max( A, B ), C )
E = min( min( A, B ), C )
median = A + B + C - D - E
Run Code Online (Sandbox Code Playgroud)

我计划使用的C函数是:

  • max - _mm_max_epi16
  • min - _mm_min_epi16
  • 另外 - _mm_add_epi16
  • 减去 - _mm_sub_epi16

有谁能建议更好的方法?

Pau*_*l R 5

你的想法非常聪明,但只需使用max和min就可以用更少的操作来完成.

t1 = min(A, B)
t2 = max(A, B)
t3 = min(t2, C)
median = max(t1, t3)
Run Code Online (Sandbox Code Playgroud)

这只是4个SSE指令,而原始实现中只有8个.

请注意,这实际上只是N = 3 的修剪排序网络.