2

MMX-Register内で4つの値を並列に使用して次の計算を実行できるかどうか疑問に思っています。

(a*b)/256

ここで、aは符号付きの単語で、bは0〜256の範囲の符号なしの値(ブレンド係数)です。

私の問題は、pmullwpmulhwがこのタスクでどのように役立つか(または役立つかどうか)がわからないことだと思います。

4

1 に答える 1

2

a * bが符号付き16ビットフィールドをオーバーフローしないことがわかっている場合は、pmullw(組み込み_mm_mullo_pi16またはSSE組み込み_mm_mullo_epi16)を使用してから、右に8シフトして256で除算できます。

どこ

MMX:

__m64 a, b;
...
a = _mm_mullo_pi16 (a, b);
a = _mm_srli_pi16 (a, 8);

SSE2:

__m128i a, b;
...
a = _mm_mullo_epi16 (a, b);
a = _mm_srli_epi16 (a, 8);
于 2012-06-22T19:19:26.187 に答える