[Operator Mechanism] Replace VCOPY/SCAL with direct copy and ForRange scale in CPU/GPU kernels#79468
[Operator Mechanism] Replace VCOPY/SCAL with direct copy and ForRange scale in CPU/GPU kernels#79468feixi139 wants to merge 2 commits into
Conversation
risemeup1111
left a comment
There was a problem hiding this comment.
未发现需要阻塞合入的问题。重点检查了 VCOPY/SCAL 删除后的 CPU/GPU 拷贝替换、ForRange scale 路径、addmm/baddbmm 混合精度处理以及剩余符号引用,未发现需要作者修改的行级问题。CI 仍有部分构建/测试在运行,合入前请以最终 CI 结果为准。
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## develop #79468 +/- ##
==========================================
Coverage ? 90.00%
==========================================
Files ? 6
Lines ? 20
Branches ? 0
==========================================
Hits ? 18
Misses ? 2
Partials ? 0 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
risemeup1111
left a comment
There was a problem hiding this comment.
已复查新提交。VADD fallback 现在在 y == z 时跳过自拷贝,别名安全问题已在当前代码中处理;同时检查了 fusion_lstm 的字节数变量调整,未发现新的阻塞问题。CI 仍有任务在运行,合入前请以最终 CI 结果为准。
PaddlePaddle-bot
left a comment
There was a problem hiding this comment.
🤖 Paddle-CI-Agent | pr_review |
2026-07-14 14:34:54
📋 Review 摘要
PR 概述:移除 phi::funcs::Blas 的 VCOPY/SCAL 封装,并用 memcpy、memory_utils::Copy、ForRange 替换 CPU/GPU kernel 调用。
变更范围:paddle/phi/kernels/funcs/blas/、CPU/Fusion/Sparse/SelectedRows kernel、addmm/baddbmm grad。
影响面 Tag:Operator Mechanism Performance Optimization
问题
未发现阻塞性问题。PR 规范问题在下面章节报,不要在这里重复
📝 PR 规范检查
符合规范。
总体评价
本轮按风险优先审查了 BLAS API 删除、GPU/CPU copy/scale 替换、addmm/baddbmm 梯度 ForRange 替换和 PR 描述一致性,未发现需要阻塞合入的问题。建议在 CI 中重点覆盖 CPU/GPU addmm/baddbmm、sparse addmm grad 以及 sequence pooling 等被替换路径。
|
你的PR提交成功,感谢你对开源项目的贡献! |
PR Category
Operator Mechanism
PR Types
Bug fixes
Description
本 PR 移除了
phi::funcs::Blas中的 VCOPY(向量拷贝)和 SCAL(原地标量乘)两个 BLAS API 的定义、声明及全部调用点,替换为更直接、精度更可控的实现方式,同时消除了对 MKLML/HML/cuBLAS/rocBLAS 底层 copy/scal 例程的依赖。背景
VCOPY/SCAL 在
Blas<DeviceContext>中只是对底层 BLAS 库(MKLMLcblas_?copy/?scal、HML、cuBLAScublasS/Dcopy/Sscal/Dscal、rocBLAS 对应例程)的简单封装,语义上完全等价于普通的内存拷贝和逐元素乘法。保留这两个 API 增加了跨多个后端分支(MKLML/HML/plain-OpenBLAS/CUDA/HIP)的维护成本,且部分调用点(如
baddbmm_grad_kernel_impl.h)已经改用 ForRange + Functor 的方式以支持混合精度(MPType)计算,与 VCOPY/SCAL 的实现方式不一致。改动内容
1. API 删除
删除
Blas<DeviceContext>::VCOPY/SCAL声明与实现,以及:CBlas<T>(CPU,MKLML/HML/plain 三个分支)中对应的底层特化。CUBlas<T>(cuBLAS/rocBLAS)中对应的底层特化。2. 内部依赖修复
Blas<CPUContext>::VADD内部原先调用 VCOPY 做初始拷贝,改为直接使用std::memcpy。3. 调用点替换
memcpy;GPU 端 VCOPY →memory_utils::Copy(stream-aware)。sparse/gpu/addmm_grad_kernel.cu中 4 处)→ ForRange + 自定义 ScaleFunctor。hsigmoid_loss_grad.h、attention_lstm_kernel.cc)→ 逐元素 for 循环。gelu_grad_kernel.cc中绕过Blas<Context>直接调用的CBlas<T>::SCAL(仅在PADDLE_WITH_MKLML分支下生效)→ 逐元素 for 循环,等价改写并合并了原先 +1 与 SCAL(0.5) 两步为单次表达式。elementwise_grad.h、selected_rows_functor.cc、sequence_pooling.cc、fusion_lstm_kernel.cc、fusion_seqconv_eltadd_relu_kernel.cc、sparse_weight_embedding_kernel.cc、lookup_table_kernel.cc)同步完成等价替换。是否引起精度变化
否