2

これは私が通常書くコードです:

alignas(16) __m128 myBuffer[8];

しかし、おそらく (オブジェクト配列は 128*8 ビット = 128 バイトなので) 次のように書く必要があります。

alignas(128) __m128 myBuffer[8];

それとも、最初の例で「最初の 16 バイトがアラインされているので」、残りはメモリ内で自動的にアラインされますか?

4

2 に答える 2

2

128 ビットの SIMD データ型は、16 バイトに揃える必要があります。コンパイラはすでにそれを認識しているため、__m128手動で調整する必要はありません。たとえば、次のMSVC ドキュメントを__m128参照してください。

タイプの変数は__m128、16 バイト境界で自動的に整列されます。

また、配列は連続しています。各配列要素は、最初の要素と同じように自然に配置されます。配列のアラインメントを掛ける必要はありません。

したがって、まったく気にする必要はありませんalignas

__m128 myBuffer[8];

これだけでうまくいきます。

于 2021-09-02T14:51:33.207 に答える