我的输入数据是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和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 的修剪排序网络.