5

SSE命令を使用して、画像フィルタリングを実行しようとしています。私が使用している画像にはピクセルあたりのバイト (255 グレースケール) があり、より大きい比較を使用して符号なしのパックされたバイトを比較する必要があります。Intelのマニュアルを調べたところ、比較は存在しますが、署名付きバイト(PCMPGTB)のみです。符号なしバイトについてこの比較を行うにはどうすればよいですか? 前もって感謝します

4

4 に答える 4

5

符号なし比較 (a >= b) は maxu( a, b ) == a と同じなので、

_mm_cmpeq_epi8( a, _mm_max_epu8(a,b))   -->   a >= b  "cmpge_epu8(a,b)"

<or比較が必要な場合は >、結果を反転する必要があります。その時点で、Alcaro のアプローチが適している可能性があります (ただし、その方法では、反転用の定数を保持するためのレジスタが必要です)。しかし、>=または<=比較の場合、これは間違いなく優れています (符号なしを符号付き範囲に変換した後でも、使用する _mm_cmple_epi8 または _mm_cmpge_epi8 がないため)。

于 2015-02-07T14:08:54.353 に答える
2

@greggo のソリューションに対する小さいながらも重要な機能強化の提案:

maxu( a, b ) == a

最大比較の前に「a」をバックアップする必要があるため、次のような補足操作が必要になるという欠点があります。

movq mmc, mma
pmaxu mma, mmb
pcmpeq mma, mmc

minu( a, b ) == b

まったく同じ効果が得られますが、等値チェックの演算子は保持されます。

pminu mma, mmb
pcmpeq mma, mmb

ゲインは大きく、3 回ではなく 2 回の操作で済みます。

于 2017-09-25T10:51:00.030 に答える
1

圧縮された符号なしバイトで比較する以上のことはできません。バイトを単語にアンパックしました(符号なしから符号付きへの変換とバイトから単語への拡張のようなものであると思われるため)、PCMPGTBを使用してそれらを比較しました。

于 2013-04-27T19:17:56.347 に答える