自动优化分子模拟程序:内存需求被砍掉 85%
来源:shishir-iyer.medium.com — 8 分 · by shishir03
📋 概述
作者参与了加州大学圣地亚哥分校 Paesani 研究组的分子模拟软件 MBX,其中一个叫"三体水多项式"的代码段要为系统中所有水分子做大量浮点运算,原本是串行执行。平行化看似直接,但八路 SIMD 一次算八个多项式会同时需要八倍中间变量:单次求值原本用 32,609 个中间量、约 260KB,八路并行直接膨胀到近 2,087KB,远超 L1/L2 缓存,数据只能从更慢的 L3 乃至主存取。于是工作重心转向自动代码重构,围绕一个叫"livesize"(任一时刻活跃中间量的数量)的指标做冗余子表达式消除与语句重排,最终把中间量从 32,609 降到 1,457、减少近 85%,八路向量化后的内存也只有原来单次求值的三分之一左右,整套数据能舒服地待在 L1 里。
🔑 核心要点
- 优化对象是分子模拟软件 MBX 的三体水多项式,原本完全串行。
- 并行化的反直觉代价:八路 SIMD 让中间变量从约 260KB 膨胀到约 2087KB,超出 L1/L2。
- 核心指标是 livesize:某一时刻仍然"活着"的中间量数量,它的最大值就是内存需求下界。
- 冗余子表达式消除第一遍就降低最大 livesize 20% 以上,重复跑收益递减。
- 真正的功臣是语句重排:在冗余消除基础上把最大 livesize 再降 80% 以上,约六轮后收益趋平。
- 最终结果:中间量从 32,609 降到 1,457,八路向量化的内存只有原单次求值的三分之一。
💡 金句
到这一步,一组多项式求值所需的所有数据已经可以舒服地放进 L1 缓存里了。
👍 0
👎 0
← 返回 Hacker News 首页