背景
- 多核设备,利用率低下
指令也是数据。指令会占用内存,使用带宽,并且可以被变换,加载,保存,构建。对于开发者,自然不会认为指令是数据。
需要考虑的问题
- 哪些数据需要捆绑在一起,是一个概念还是有隐藏的含义
- 你的数据布局是如何设计的?AOS/SOA?支持 SIMD?
- AoS 更符合人类直觉,但设计上没有 SOA 好
- 目标平台内存最小访问单位是多少,CPU 各级缓存多大
- 数据多久需要一次、一帧一次还是一帧多次,还是几乎不更新
- 如何访问数据?随机/连续还是 stride 或是其他 burst 方式
- 总是修改数据还是读取数据,修改所有内容还是只修改部分
- 那些数据设计对带宽与延迟影响大