数组的枚举

主要观点:

  • 介绍了面向数据的设计模式“数组的结构体(Struct of Arrays,SoA)”及其优势,如减少内存使用和提高内存带宽利用率,还可用于更适合 SIMD 的数据布局。
  • 提出相同的技巧可用于枚举(Enum),如枚举的数组(Enum of Arrays,EoA),其好处包括减少标签总字节数、避免存储不同大小变体间的内存浪费以及减少 CPU 分支从而利于 SIMD 优化。
  • 以 TigerBeetle 为例,其基于“AoE => EoA”优化,一次进行 8000 次操作,整个批次只有一个标签,与数据平面和控制平面分离的概念相关。

关键信息:

  • Thing结构体包含checksumnumberflag等字段,有数组的结构体(AoS)和结构体的数组(SoA)两种形式。
  • 枚举类型Thing包含spameggs变体,有数组的枚举(AoE)和枚举的数组(EoA)两种形式。
  • TigerBeetle 基于“AoE => EoA”优化,一次进行 8000 次操作,整个批次只有一个标签。

重要细节:

  • 在 SoA 中,flag等字段的填充在所有Thing中只需一个实例,减少内存使用。
  • 用 SIMD 处理多个向量的点积比处理单个向量更高效。
  • 在 EoA 中,整个批次只有一个tag,减少标签总字节数和 CPU 分支,利于 SIMD 优化。
  • TigerBeetle 的优化与数据平面和控制平面分离概念相关,控制平面的tag信息小且不频繁,数据平面处理量大但无需太多个体决策。
阅读 28
0 条评论