2010-10-20 51 views
1

我的輸入數據是16位數據,我需要使用SSE2指令集找到3個值的中位數。使用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函數是:

  • 最大 - _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個。

請注意,這實際上只是N = 3的修剪sorting network

+1

整潔。謝謝 – 2010-10-20 10:29:12

相關問題