主要观点:
- 介绍了面向数据的设计模式“数组的结构体(Struct of Arrays,SoA)”及其优势,如减少内存使用和提高内存带宽利用率,还可用于更适合 SIMD 的数据布局。
- 提出相同的技巧可用于枚举(Enum),如枚举的数组(Enum of Arrays,EoA),其好处包括减少标签总字节数、避免存储不同大小变体间的内存浪费以及减少 CPU 分支从而利于 SIMD 优化。
- 以 TigerBeetle 为例,其基于“AoE => EoA”优化,一次进行 8000 次操作,整个批次只有一个标签,与数据平面和控制平面分离的概念相关。
关键信息:
Thing
结构体包含checksum
、number
、flag
等字段,有数组的结构体(AoS)和结构体的数组(SoA)两种形式。- 枚举类型
Thing
包含spam
和eggs
变体,有数组的枚举(AoE)和枚举的数组(EoA)两种形式。 - TigerBeetle 基于“AoE => EoA”优化,一次进行 8000 次操作,整个批次只有一个标签。
重要细节:
- 在 SoA 中,
flag
等字段的填充在所有Thing
中只需一个实例,减少内存使用。 - 用 SIMD 处理多个向量的点积比处理单个向量更高效。
- 在 EoA 中,整个批次只有一个
tag
,减少标签总字节数和 CPU 分支,利于 SIMD 优化。 - TigerBeetle 的优化与数据平面和控制平面分离概念相关,控制平面的
tag
信息小且不频繁,数据平面处理量大但无需太多个体决策。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。