2

2 つの浮動小数点数を格納できる配列があり、__m128 変数があります。__m128 変数の最初の 2 つの float のみを格納したいと考えています。

私が今していることは

_mm_storeu_ps((float*)a, m0); //a is the array, m0 is the __m128 variable

これは、m0 の最初の 2 つの float を a に入れますが、最後の 2 つの float を a のメモリを超えて格納し続けます。

4

2 に答える 2

0

いくつかのオプションがあります。

オプション1

へのポインターをにキャストし、それに応じてインデックス__m128を付けることができます。float*

float *p = (float *)&m0;
a[0] = p[0];
a[1] = p[1];

4 つの float の配列と の和集合を作成することを好む人もいますが、__m128パフォーマンスに関しては非常に似ています。

オプション 2

SSE 組み込み関数のみを使用する場合は、_mm_store_ssandを使用でき_mm_shuffle_psます。

_mm_store_ss(&a[0], m0);
_mm_store_ss(&a[1], _mm_shuffle_ps(m0, m0, _MM_SHUFFLE(1,1,1,1)));

SSE のシャッフル命令は非常に便利です。詳細については、こちらを参照してください

于 2013-10-13T20:20:38.440 に答える