这个结构叫什么?简单的 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 的效率最高(除非收集和分散指令变得高效),有时您必须使用它。
我看到了 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 的效率最高(除非收集和分散指令变得高效),有时您必须使用它。