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

时间:2010-10-20 09:28:13

标签: 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
我准备使用的C函数是:

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

有人能建议更好的方法吗?

1 个答案:

答案 0 :(得分:5)

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

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

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

请注意,对于N = 3,这实际上只是一个被修剪的sorting network