MMX や SSE などの SIMD 機能に C/C++ 組み込み型を使用することについて私が読んだことはすべて、それらを不透明な型として使用し、内部を直接参照しないことを示しています。
ただし、多くの例を見ると、生データへの (明示的に整列された) ポインターを取得し、作業を行う前にそれらを組み込み型へのポインターとして再解釈することによって機能します。しかし、組み込み型へのポインターを使用することによって、特に他のデータをそれらの型としてエイリアスする場合、その規則に違反していませんか?
MMX や SSE などの SIMD 機能に C/C++ 組み込み型を使用することについて私が読んだことはすべて、それらを不透明な型として使用し、内部を直接参照しないことを示しています。
ただし、多くの例を見ると、生データへの (明示的に整列された) ポインターを取得し、作業を行う前にそれらを組み込み型へのポインターとして再解釈することによって機能します。しかし、組み込み型へのポインターを使用することによって、特に他のデータをそれらの型としてエイリアスする場合、その規則に違反していませんか?
あなたが発見したように見えるのは、ほとんどの例がうまくいかないということです。
実際には、SSE タイプの「内部」を参照することはかなり安全です (コンパイルされる限り)。実際には、メモリ内でそれらをメモリ内の「通常の」データ型にエイリアスできます。コードの作成と使用が少し便利になります。
しかし、それは SIMD を使用するポイントをほとんど台無しにします。これにより、多くの最適化が妨げられます。つまり、コンパイラーは、SIMD レジスターにデータ型を保持するだけでなく、SIMD データ型を常に格納/ロードする必要があります。
これはできますが、すべきではありません。そして、あなたが発見したように、多くの人は「すべき」を「自由にこれをしてください」と読んでいます。