[Operator Mechanism] fix BroadcastConfig do not support big_tensor#79439
[Operator Mechanism] fix BroadcastConfig do not support big_tensor#79439feixi139 wants to merge 17 commits into
Conversation
risemeup1111
left a comment
There was a problem hiding this comment.
已完成首轮代码审查,未发现需要阻塞合入的问题。改动范围集中在 BroadcastConfig 的大维度索引计算,当前 diff 看起来合理;CI 仍有部分任务在运行,合入前请以最终 CI 结果为准。
risemeup1111
left a comment
There was a problem hiding this comment.
已复查新提交,当前改动主要是将广播索引临时变量从有符号 64 位调整为无符号 64 位;结合 BroadcastKernelSplit 的大 tensor 分片路径检查后,未发现新的阻塞问题。CI 仍有任务在运行,合入前请以最终 CI 结果为准。
CI报告基于以下代码生成(30分钟更新一次): 1 Required任务 : 47/48 通过
2 失败详情🔴 Windows-GPU / Build and test — 不稳定问题(置信度: 高)失败用例:
关键日志:
失败发生在 Windows-GPU 的 修复建议:
关联变更: |
risemeup1111
left a comment
There was a problem hiding this comment.
已复查新提交,之前关于 total_num_output 仍为 int 的边界判断问题已经在三个 ReadDataBc overload 中改为 uint64_t,与当前 uint64_t index_output 保持一致;未发现新的阻塞问题。CI 仍有任务在运行,合入前请以最终 CI 结果为准。
risemeup1111
left a comment
There was a problem hiding this comment.
已复查新提交,XPU 尾块路径已改为先判断再相减,XPU 分支也补回了 INT_MAX 保护,避免继续把超出 xpu2 32 位索引能力的输入放行;GPU 侧大 tensor broadcast 的 offset/index 链路看起来已经贯通。未发现需要阻塞合入的问题。CI 仍有任务在运行,合入前请以最终 CI 结果为准。
risemeup1111
left a comment
There was a problem hiding this comment.
代码 head 未变化,仍沿用上次复查结论;这次只看了更新后的 PR 描述。
优先级:P3 非行级:PR 描述更新后写成“从
BroadcastConfig到最终读写数据的整条链路都同步扩宽到 64 位”,但当前代码在 XPU 分支仍保留PADDLE_ENFORCE_LE_INT_MAX(numel, "BroadcastKernel numel (XPU)"),并没有实现 XPU large tensor 支持。建议把描述补充为 GPU/non-XPU 路径支持大 tensor,XPU 路径仍保持INT_MAX保护,避免读者误以为所有设备后端都已支持。
处理要求:请针对该评论进行回复(同意并已修改请回复 Done,不同意请说明理由)。
risemeup1111
left a comment
There was a problem hiding this comment.
已复查新提交,代码侧主要是把 XPU 的 INT_MAX 检查前移到 BroadcastConfig 构造之前,并补了几处 64 位 offset 计算的显式转换;这部分未发现需要阻塞合入的问题。
优先级:P3 非行级:PR 描述仍写成“从
BroadcastConfig到最终读写数据的整条链路都同步扩宽到 64 位”,但当前实现对 XPU 仍是提前INT_MAX保护,而不是支持 XPU large tensor。建议把描述补充为 GPU/non-XPU 路径支持大 tensor,XPU 路径仍保持INT_MAX保护。
处理要求:请针对该评论进行回复(同意并已修改请回复 Done,不同意请说明理由)。
liuhao2638
left a comment
There was a problem hiding this comment.
已复查这次提交,上一轮的 non-XPU grid-stride 覆盖问题已经补上,代码侧未再看到新的阻塞点;这次没有新增行级评论。
优先级:P3 非行级:PR 描述仍写成“从
BroadcastConfig到最终读写数据的整条链路都同步扩宽到 64 位”,但当前 XPU 分支仍保留INT_MAX保护,和实现不一致。建议把描述改成“GPU/non-XPU 路径支持 64 位,XPU 仍保持 32 位上限”。
处理要求:请针对该评论进行回复(同意并已修改请回复 Done,不同意请说明理由)。
risemeup1111
left a comment
There was a problem hiding this comment.
已复查最新提交:grid_stride 的 uint32_t 溢出选择问题看起来已经补上,但尾块路径仍有需要修复后再合入的问题,详情见行级评论。
优先级:P3 非行级:PR 描述仍写成“从
BroadcastConfig到最终读写数据的整条链路都同步扩宽到 64 位”,但当前 XPU 分支仍保留INT_MAX保护,和实现不一致。建议把描述改为“GPU/non-XPU 路径支持 64 位,XPU 仍保持 32 位上限”。
处理要求:请针对该评论进行回复(同意并已修改请回复 Done,不同意请说明理由)。
liuhao2638
left a comment
There was a problem hiding this comment.
已复查最新提交,上一轮行级 P1 的 tail 下溢/越界写问题已经通过 uint64_t loop 变量和有符号剩余量判断修复;这轮没有新增行级评论。
优先级:P3 非行级:PR 描述仍写成“从
BroadcastConfig到最终读写数据的整条链路都同步扩宽到 64 位”,但当前 XPU 分支仍保留INT_MAX保护,和实现不一致。建议把描述改为“GPU/non-XPU 路径支持 64 位,XPU 仍保持 32 位上限”。
处理要求:请针对该评论进行回复(同意并已修改请回复 Done,不同意请说明理由)。
risemeup1111
left a comment
There was a problem hiding this comment.
已复查更新后的 PR 描述和当前 head。上一轮行级 P1 已由新提交修复;PR 描述也已补充 GPU/non-XPU 与 XPU 支持范围的差异,之前的非行级说明问题已解决。当前未发现需要阻塞合入的问题,CI 仍在运行,合入前请以最终 CI 结果为准。
risemeup1111
left a comment
There was a problem hiding this comment.
已复查最新提交,改动主要是补充 tail/索引选择相关注释,并将 XPU 路径固定到已受 INT_MAX 保护的 uint32 索引分支;GPU/non-XPU 路径仍按 numel 和 grid_stride 在 uint32/uint64 间选择。此前的行级 P1 和 PR 描述问题保持已解决状态,未发现新的阻塞问题。CI 仍在运行,合入前请以最终 CI 结果为准。
|
你的PR提交成功,感谢你对开源项目的贡献! |
risemeup1111
left a comment
There was a problem hiding this comment.
已复查最新提交。此次主要将 GPU/non-XPU 的 BroadcastConfig 按 IndexT 模板化,并在 launch 选择 uint32/uint64 后再构造对应配置,同时把 uint32 快路径上限收紧到 INT_MAX 以匹配 32 位 FastDivMod 的约束。此前的行级 P1 和 PR 描述问题仍保持已解决状态,未发现新的阻塞问题。CI 仍在运行或等待审批相关检查,合入前请以最终 CI 结果为准。
risemeup1111
left a comment
There was a problem hiding this comment.
已复查最新提交。本轮主要把 kernel 内部的 block_offset/stride 与实际 IndexT 保持一致,并保留 block_offset < numel 后再计算 tail num 的保护;结合 uint32 快路径的 INT_MAX/grid_stride 限制和 XPU 的 INT_MAX 上限检查,之前的行级 P1 仍保持已解决状态。未发现新的阻塞问题。CI 仍在运行或等待审批相关检查,合入前请以最终 CI 结果为准。
PaddlePaddle-bot
left a comment
There was a problem hiding this comment.
🤖 Paddle-CI-Agent | pr_review |
2026-07-15 19:16:30
📋 Review 摘要
PR 概述:将 GPU/non-XPU BroadcastConfig 和 broadcast kernel 的线性索引、stride、numel 计算改为按 uint32/uint64 分派,以支持大 tensor 广播;XPU 保持 32 位上限。
变更范围:paddle/phi/kernels/funcs/broadcast_function.h、paddle/phi/kernels/primitive/datamover_primitives.h
影响面 Tag:Operator Mechanism
问题
未发现阻塞性问题。PR 规范问题在下面章节报,不要在这里重复
📝 PR 规范检查
符合规范。
总体评价
本轮按风险优先审查了大 tensor 索引类型、FastDivMod 32/64 位分派、GPU grid-stride/tail 分支和 XPU 32 位保护。未发现需要阻塞合入的新问题。
PR Category
Operator Mechanism
PR Types
Bug fixes
Description
BroadcastConfig 使用
FastDivMod<int>对输出线性索引做维度坐标拆解,当 tensor 某一维度大小超过INT_MAX(2^31 - 1)时,int 发生溢出,导致索引计算错误,广播结果产生静默错误。此次改动把从
BroadcastConfig的GPU/non-XPU 路径支持 64 位,XPU 仍保持 32 位上限paddle/phi/kernels/primitive/datamover_primitives.hBroadcastConfig::divmoders:FastDivMod<int>→FastDivMod<int64_t>BroadcastConfig::strides:改为uint64_tReadDataBc三个重载的block_offset、total_num_output参数:uint32_t/int→uint64_tPADDLE_ENFORCE_LE_INT_MAX(out_dims[i], "out_dim")限制,因为 divmoder 本身已升级为 64 位,不再需要该保护paddle/phi/kernels/funcs/broadcast_function.hBroadcastDataLoader::Apply:block_offset、numel参数从int/uint32_t改为uint64_tBroadcastDataSetter::Apply的index_bc:uint32_t→uint64_tVectorizedBroadcastKernelImpl:numel、block_offset、内部的index_bc/thread_offset/idx全部改为uint64_tVectorizedBroadcastKernel:numel、main_offset、tail_tid、block_offset、stride改为uint64_tLaunchBroadcastKernel:去掉此前numel_64 → static_cast<uint32_t>(numel_64)的收窄转换,numel/main_offset/tail_tid直接以int64_t参与计算并传递是否引起精度变化
否