3

私はVS2005(作業中)を使用しており、次のことを行うSSE組み込み関数が必要です。

16ビット整数で満たされた既存の__m128i na_1,a_2,....,a_8があります。

私が今やりたいいくつかの計算は16ビットではなく32を必要とするので、nから16ビット整数の2つの4セットを抽出し、それぞれ__m128iを含む2つの別々のsに入れたいと思います。a_1,...,a_4a_5,...,a_8

_mm_setさまざまな組み込み関数を使用してこれを手動で行うこともできますがmov、アセンブリで8秒になるため、これを行うためのより高速な方法があることを期待していました。

4

1 に答える 1

5

あなたが達成したいことを正しく理解していると仮定すると(1つのベクトルの8x16ビットを4x32ビットintの2つのベクトルにアンパックします)、通常、SSE2以降では次のようにします。

__mm128i v = _mm_set_epi16(7, 6, 5, 4, 3, 2, 1, 0);  // v = { 7, 6, 5, 4, 3, 2, 1, 0 }
__mm128i v_lo = _mm_srai_epi32(_mm_unpacklo_epi16(v, v), 16); // v_lo = { 3, 2, 1, 0 }
__mm128i v_hi = _mm_srai_epi32(_mm_unpackhi_epi16(v, v), 16); // v_hi = { 7, 6, 5, 4 }
于 2013-02-06T08:28:47.447 に答える