26

256 ビット AVX 拡張機能を使用するために SSE SIMD コードを移植していますが、上位 128 ビットと下位 128 ビットをブレンド/シャッフル/移動する命令が見つからないようです。

裏話:

私が本当に望んでいるのはVHADDPS/_mm256_hadd_psのように振る舞うことですHADDPS_mm_hadd_ps256 ビットワードだけで。残念ながら、それHADDPSは下位語と上位語で独立して行動するための 2 つの呼び出しのように機能します。

4

3 に答える 3

29

VPERM2F128 を使用すると、下位 128 ビットと上位 128 ビット (および他の順列) を交換できます。組み込み関数の使用法は次のようになります

x = _mm256_permute2f128_ps( x , x , 1)

3 番目の引数は、ユーザーに多くの柔軟性を与えるコントロール ワードです。詳細については、Intel Instrinsic ガイドを参照してください。

于 2011-08-28T03:06:32.940 に答える
2

私が知っている唯一の方法は、 と を使用すること_mm256_extractf128_si256です_mm256_set_m128i。たとえば、256 ビット ベクトルの 2 つの半分を交換するには:

__m128i v0h = _mm256_extractf128_si256(v0, 0);
__m128i v0l = _mm256_extractf128_si256(v0, 1);
__m256i v1 = _mm256_set_m128i(v0h, v0l);
于 2011-08-27T15:42:22.777 に答える