struct AoSData
{
public int a; //a[1] AoSData[100]
public int b;
public int c;
public int d;
}
struct SoAData
{
public NativeArray aArray; // aArray[100] SoAData[1]
public NativeArray bArray;
public NativeArray cArray;
public NativeArray dArray;
}
如果你的访问是顺序访问,那么 SOA 通常比 AOS 效率高一些。特别是当你的程序在 GPU 上运行的时候,因为 Coalescing
如果你的访问是随机访问,那么 AOS 常常比 SOA 更好。因为随机访问的一个粒子的数据在 AOS 下是在同一个 cacheline 中,而在 SOA 布局下会分散在 N 个 cachelines 里面,对于 AOS 的 cacheline utilization(缓存行利用率)会高很多。