Pull Request已成功合入, 合并人@ascend-robot
(感谢 Dring 的贡献)变更摘要
此 PR 主要围绕两项特性合入:一是支持 64K 大页情况下的 IPC Event 功能,通过驱动版本判断跳过 4K 页面大小的硬性限制;二是扩展 DriverVersionToNum 解析能力,支持 HDK 的 b 构建版本号(如 26.1.0.b083),并确保版本排序正确(b-build < T < RC < 正式版)。同时新增了对应的单元测试以守护这两项变更。
主要改动
-
IsSupportIpcEvent支持 64K 页面大小: 当驱动版本 ≥26.0.RC1时,跳过原有的 4K 页面大小强制校验,使得 64K 页面环境下也可通过后续 ACL API 存在性检查来判定是否支持 IPC Event;同时在各分支的dbg_msg中追加页面大小上下文信息(page_ctx),便于问题定位。 -
DriverVersionToNum新增 b-build 版本号解析: 在GetCANNInfo.cpp中新增对b前缀构建号(非beta)的解析逻辑,将b083等后缀提取为 patch 数值,使得 b-build 版本在数值比较中位于 T 版本之下、RC 版本之下、正式版之下,符合预期的版本排序语义。 -
导出
DriverVersionToNum供测试使用: 在GetCANNInfo.h中为DriverVersionToNum添加TORCH_NPU_API导出声明,使其可被外部单元测试调用。 -
新增 b-build 版本排序单元测试: 在
test/cpp/api/modules.cpp中添加DriverVersionTest.BBuildOrdering测试用例,验证DriverVersionToNum对 b-build、T、RC、正式版之间的数值大小关系,以及对不同 b-build 构建号内部的比较。 -
新增 IPC 页面大小及跨进程传输集成测试: 在
test/npu/test_ipc_pagesize.py中添加两类测试——TestIpcEventPageSize验证不同页面大小下 IPC Event 的创建行为(不崩溃且正确回退),TestIpcTensorTransfer通过多进程队列完成跨进程 IPC 张量传输的端到端验证,并加入超时与异常捕获机制防止 CI 挂死。


代码审查
审查总结
我已完成对全部 5 个变更文件的审查。以逐文件结论汇总如下:
| 文件 | 发现问题 |
|---|---|
torch_npu/csrc/core/npu/GetCANNInfo.cpp |
P1: b-build 解析分支未提取 release 导致版本号信息丢失 |
test/cpp/api/modules.cpp |
P2: 测试用例使用了 DriverVersionToNum 无法解析的 4 段式版本格式字符串 |
torch_npu/csrc/core/npu/GetCANNInfo.h |
无问题(导出声明正确) |
torch_npu/csrc/core/npu/interface/AclInterface.cpp |
无问题(page_ctx 注入与条件跳过逻辑正确) |
test/npu/test_ipc_pagesize.py |
无问题(多进程 IPC 测试设计合理,错误传播路径完整) |
- P1: 1 项
- P2: 1 项
- P3: 0 项
整体风险评估: 中等。P1 问题(release 丢失)在 b-build 版本号第三段数字不为 0 时会触发版本号比较逻辑错误,属于正确性缺陷。P2 问题会导致新增的单元测试无法通过。两项问题均可在合入前修复,无构建崩溃或数据损坏风险。
| 类型 | 数量 |
|---|---|
| 🔴 阻塞 | 1 |
| 🟡 建议 | 1 |
⛔ 需要修改




【合入来源】
【修改方案】
64k pagesize,新版本HDK已支持,去除4k校验限制。同时增加HDK b版本判断分支。
版本排序语义:b-build < T版本 < RC版本 < 正式release
验证:2702000083 < 2702000200 < 2702010000 → b083 < T1 < 正式版
【资料变更】
不涉及
【接口变更】
不涉及
【功能验证】
64k页机器 ut验证:


4k页机器 ut验证:
【CheckList】