SoA
gpt-5.icon
概要
SoA は、各フィールドごとに独立した配列を持ちます。
code:cpp
struct Particles {
};
Particles particles = {
{1.0, 4.0, 7.0},
{2.0, 5.0, 8.0},
{3.0, 6.0, 9.0},
{0.5, 0.6, 0.7}
};
メモリ上ではこうなります:
code:_
特徴
各属性が連続しているため、キャッシュ効率が良く、SIMD 命令で並列化しやすい。
「全ての x を一気に処理」など、同種データをまとめて計算する場合に圧倒的に高速。
一方で、個々の「粒子」単位で扱う処理(例えば 1 個をコピーするなど)は扱いづらい。
⚙️ 比較まとめ
table:_
観点 Array of Structures (AoS) Structure of Arrays (SoA)
メモリ配置 各オブジェクトごとにすべての属性 属性ごとに独立した配列
キャッシュ効率 劣る(アクセス分散) 良い(連続アクセス)
SIMD最適化 難しい 容易
コードの分かりやすさ 高い 低い(抽象化が必要)
オブジェクト単位操作 得意 不得意
属性単位操作 不得意 得意
🧠 まとめ
AoS は「扱いやすさ・自然さ」
SoA は「性能・効率」
どちらを選ぶかは、「どんなアクセスパターンが多いか」で決まる。