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

What is this structure called? Simply SoA?

我看到了 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] ???;

一个"cache-efficient SoA"?一个奥索阿? SoAoS?一个"PITA to code"?一般来说,这似乎是最有效的解决方案,提供具有大量缓存命中率的 SoA 类型 SIMD。

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

AoS 不适用于 SIMD。 SoA 是一种改进,但在某些情况下仍然不够。解决方案是阵列的混合结构。正如您所说,它可能是一个 PITA,但如果您希望 SIMD 的效率最高(除非收集和分散指令变得高效),有时您必须使用它。