2

入力データは16ビットデータであり、SSE2命令セットを使用して3つの値の中央値を見つける必要があります。

16ビットの入力値A、B、Cが3つある場合、次のようにすると思いました。

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

誰かがより良い方法を提案できますか?

4

1 に答える 1

7

あなたのアイデアは非常に賢いですが、maxとminを使用するだけで、より少ない操作でそれを行うことができます。

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

これは、元の実装の8と比較して、わずか4つのSSE命令になります。

これは、実際にはN=3の場合の剪定されたソーティングネットワークであることに注意してください。

于 2010-10-20T10:13:25.673 に答える