PyTorch · 2026年9月27日
trunk/ebc5cc437ec936657e95f35de3084d65a764ac6e: [MPS] Migrate `addc[mul|div]` to Metal (#196924)
PyTorch 将 addcmul/addcdiv 迁移至 Metal 后端
來源標題與編輯摘要保留原文。
閱讀原文 ↗原始摘要(簡體中文)
PyTorch 提交 #196924 将 addcmul 与 addcdiv 迁移到 Metal 后端,沿用 lerp 和 clamp 的做法:两个算子注册 addc{mul,div}_stub 并走共享的 exec_ternary_kernel,该内核新增 alpha 标量分支,统一覆盖 clamp、lerp、addcmul、addcdiv。同时修复 lerp 曾有的类型转换错误:_cast_ 三元内核原先按输出 dtype 实例化,导致 out= 比公共 dtype 更宽时计算也被加宽,现在改为按迭代器公共 dtype 计算、存储时再转换,与 CPU 一致。在 M4 Pro 上对比 MPSGraph,每次调用微秒数:64K 元素以下稠密场景快 2.4 倍(4K 从 14.1 降至 6.0,64K 从 14.3 降至 8.5),1M 以上持平(35.2→34.8,16M 984→1003)。广播形状持平,但 4D 广播(18.4→30.2)和操作数转置(33.9→99.5)仍落后于 MPSGraph,后者会物化平铺副本而非 gather,作者称恢复这些性能是后续工作,也会让 clamp 和 lerp 受益。该提交由 Claude Code 协助完成。
推薦理由
PyTorch Metal 后端性能优化的真实数据,做端侧推理和 Mac 本地部署的创作者可以直接参考其内核复用与 dtype 处理思路。