SIMD命令を使用する場合にスループットを向上させるために、データを一般的な「構造体の配列」(AoS)ではなく「構造体の配列」(SoA)に編成することの利点についてたくさん読みました。「なぜ」は私には完全に理にかなっていますが、ベクトルのようなものを扱うときにこれをどの程度行うべきかわかりません。
ベクトル自体は、データの(固定サイズ)配列の構造体として扱うことができるため、これらの配列をX、Y、Z配列の構造体に変換できます。これにより、一度に1つではなく、4つのベクトルを同時に処理できます。
今、私はこれをGameDevに投稿している特定の理由のために:
これはSPUでベクターを操作するのに意味がありますか?より具体的には、単一のベクトルだけで複数のアレイをDMAすることは理にかなっていますか?それとも、ベクターの配列をDMA処理し、それらをさまざまなコンポーネントに展開して操作する方が良いでしょうか?
(「AoS」を実行した場合)アンロールを削除することの利点はわかりましたが、このルートを使用して複数のベクトルのセットを一度に処理していた場合、DMAチャネルがすぐに不足する可能性があります。
(注:Cellの専門的な経験はまだありませんが、しばらくの間、OtherOSをいじっています)