1

SSE を使用して 4 ピクセル操作を実行しようとしました。__m128 への画像データの読み込みに問題があります。私の画像データは文字バッファです。私の画像が1024 x1024だとしましょう。私のフィルターは 16x16 です。

__m128 IMG_VALUES, FIL_VALUES, NEW_VALUES;
//ok:
IMG_VALUES=_mm_load_ps(&pInput[0]);
//hang below:
IMG_VALUES=_mm_load_ps(&pInput[1]);

インデックス 1,2,3 の処理方法がわかりません... ありがとうございます。

4

1 に答える 1

2

整数/固定小数点ではなく浮動小数点でこれを行う必要がある場合は、8 ビット データをロードし、32 ビットに展開する必要があります (8 ビットから 16 ビット、次に 16 ビットから 32 ビットの 2 つの操作が必要です)。次に float に変換します。ただし、これは非常に非効率的です。たとえば、16 ビットの固定小数点演算でこれを行うことを検討する必要があります。

16 ピクセルのロードごとに、4 x float の 4 つのブロックが処理されることに注意してください。つまり、16 x 8 ビット ピクセルのベクトルは、4 x float の 4 x ベクトルになります。

必要な組み込み関数の概要:

_mm_load_si128(...)       // load 16 x 8 bit values

_mm_unpacklo_epi8(...)    // unpack 8 bit -> 16 bit
_mm_unpackhi_epi8(...)

_mm_unpacklo_epi16(...)   // unpack 16 bit -> 32 bit
_mm_unpackhi_epi16(...)

_mm_cvtepi32_ps(...)      // convert 32 bit int -> float
于 2013-10-21T10:29:27.550 に答える