我的输入数据是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函数是:
有人能建议更好的方法吗?
答案 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。