这个结构叫什么?简单的SoA?

时间:2015-05-04 04:50:26

标签: c simd

我见过AoS(结构阵列)之间的常见比较:

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] ???;

“缓存效率高的SoA”? AoSoA?一个SoAoS?一个“PITA代码”?一般来说,这似乎是最有效的解决方案,为SoA类型的SIMD提供了大量的缓存命中率。

1 个答案:

答案 0 :(得分:3)

该数据结构有多个名称,例如阵列的混合结构(参见Extending a C-like Language for Portable SIMD Programming)或数组结构数组(AoSoA)。

AoS不适合SIMD。 SoA是一种改进,但在某些情况下仍然不够。解决方案是阵列的混合结构。它可能就像你说的那样,但如果你想从SIMD中获得最高效率,那么你必须使用它(除非收集和分散指令变得有效)。