代码之家  ›  专栏  ›  技术社区  ›  BЈовић

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

  •  1
  • BЈовић  · 技术社区  · 14 年前

    如果我有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_add_epi16
    • 减去-u mm_sub_epi16

    有人能提出更好的办法吗?

    1 回复  |  直到 10 年前
        1
  •  5
  •   Paul R    14 年前

    你的想法很聪明,但只要使用max和min就可以用更少的操作完成。

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

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

    注意,这实际上只是一个修剪 sorting network N=3时。