これは私が通常書くコードです:
alignas(16) __m128 myBuffer[8];
しかし、おそらく (オブジェクト配列は 128*8 ビット = 128 バイトなので) 次のように書く必要があります。
alignas(128) __m128 myBuffer[8];
それとも、最初の例で「最初の 16 バイトがアラインされているので」、残りはメモリ内で自動的にアラインされますか?
これは私が通常書くコードです:
alignas(16) __m128 myBuffer[8];
しかし、おそらく (オブジェクト配列は 128*8 ビット = 128 バイトなので) 次のように書く必要があります。
alignas(128) __m128 myBuffer[8];
それとも、最初の例で「最初の 16 バイトがアラインされているので」、残りはメモリ内で自動的にアラインされますか?
128 ビットの SIMD データ型は、16 バイトに揃える必要があります。コンパイラはすでにそれを認識しているため、__m128
手動で調整する必要はありません。たとえば、次のMSVC ドキュメントを__m128
参照してください。
タイプの変数は
__m128
、16 バイト境界で自動的に整列されます。
また、配列は連続しています。各配列要素は、最初の要素と同じように自然に配置されます。配列のアラインメントを掛ける必要はありません。
したがって、まったく気にする必要はありませんalignas
。
__m128 myBuffer[8];
これだけでうまくいきます。