ISO C では、__m256 の定義が提供されていないため、次のようにする必要があります。 __m256 をサポートする実装を参照して、その動作を決定してください。 Intel の組み込みでは、__m256 などのベクトル ポインタを、ISO C で char がエイリアスとして使用できるようにするのと同様に、他のオブジェクトのエイリアスを許可されるものとして定義します。この定義では、__m256
を使用する代わりに逆参照することが許可されています。 _mm256_load_ps() のような aligned-load 組み込み。特に、float/double 型の場合、組み込み関数を使用すると、float厳密なエイリアシング ルールインテルの組み込み API では、__m256 型が次のように定義されています。スカラー型のエイリアスは許可されますが、その逆は許可されません。この属性により、int[]、char[]、またはその他の型の配列からの安全な読み込みが保証されます。
GCC は、may_alias 属性を使用して __m256 を実装し、コンパイラーが特定のエイリアス動作を防止できるようにします。 。ただし、この属性の効果は一方向であることに注意することが重要です。つまり、int32_t* を使用して __m256 型を読み取る場合にもエイリアスの懸念が引き続き適用されます。
逆参照とは異なりますメモリ アドレスとして __m256
を使用し、他の型 (例: int32_t以上がハードウェア SIMD ベクトル ポインター (例: `__m256`) とそれに対応するスカラー型の間のキャストの再解釈は C で未定義の動作ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。