我见过(结构数组)的AOS之间做出比较常见:这个结构叫什么?简单SoA?
struct xyz
{
ALIGNED float x, y, z, ignored;
};
ALIGNED struct xyz AoS[n];
和SOA(数组结构):
struct SoA
{
ALIGNED_AND_PADDED float x[n];
ALIGNED_AND_PADDED float y[n];
ALIGNED_AND_PADDED float z[n];
};
那么将这种数据表示的是叫什么名字?
struct xyz4
{
ALIGNED float x[4];
ALIGNED float y[4];
ALIGNED float z[4];
};
ALIGNED struct xyz4[n/4] ???;
“cache-efficient SoA”? AoSoA? SoAoS? “PITA编码”?一般来说,它似乎是最有效的解决方案,它为SoA型SIMD提供了大量的缓存命中。
我认为增加的缓存效率将被索引数学抵消, 'float x = xyz4 [index/4] .x [index%4]'。 – user3386109
通常我习惯于批量处理需要按顺序执行的情况(在每个线程的给定范围内),所以我认为可以避免在每个条目中进行计算。无论如何,这在理论上看起来非常有效,但我总是发现编码和测试真的很痛苦。 –