Count the Bytes, Not the FLOPs
2 days ago
- #Statistical Computing
- #Performance Optimization
- #Memory Efficiency
- 文章描述了tsbootstrap的批量设计如何因低算术强度而产生内存限制的性能问题。该设计实现了一个较大的中间张量(针对10,000个观测值和2,000次重复,体积达160 MB),导致其性能低于现有库,执行速度较慢。
- 通过采用内核融合技术,实现了一种融合流式路径,避免完整复制张量的实体化。该方法将工作集保持在缓存中,仅存储最终统计量(例如16 kB而非160 MB),从而显著减少了内存流量。
- 通过引入基于计数器的随机数生成器(Philox-4x32-10)消除了O(B)种子对象分配,解决了第二个性能瓶颈。对于小型工作负载,该方法将初始化时间从13.1毫秒缩短至0.55毫秒,同时保证了逐比特可复现性。
- 重新设计后的方案在持续工作负载上实现了3.1倍至20倍的加速效果。融合路径在所有16个基准测试单元中均优于现有方案,但实体化路径的性能仍相对滞后。
- 关键设计原则包括:绝不实体化仅用于归约运算的数组,通过融合操作以最小化内存流量,以及通过推导而非携带状态来管理计算过程。这些原则通过简化而非增加复杂度,带来了显著的性能提升。