已合并
fusion pass兼容性问题修复 #3908
pengyiming7创建于 7月8日
fusion pass兼容性问题修复 #3908
已合并
Pull Request已成功合入, 合并人@CANN-robot
(感谢 pengyiming7 的贡献)7月8日 创建了 pull request,commit 342956ac
atomgit-bot
7月8日 评论:
7月8日 评论:
变更摘要
此 PR 旨在修复 fusion pass 的兼容性问题。核心改动是在三个 fusion pass 文件中引入 GE_COMPILER_VERSION_910 版本宏定义及 IsTargetVersion() 版本检查函数,确保相关 pass 仅在 GE 编译器 9.1.0 及以上版本中生效;同时将 aclsysGetVersionNum 调用处的 const_cast<char*> 改为合法的 char[] 局部变量,消除未定义行为风险。
主要改动
- 新增
GE_COMPILER_VERSION_910宏定义:在permute_fusion_pass.cpp、globalavgpool_fusion_pass.cpp和reduce_mean_with_cast_fusion_pass.cpp三个文件中均添加了#define GE_COMPILER_VERSION_910 90100000,作为 9.1.0 版本的门槛常量。 - 新增
IsTargetVersion()函数:三个文件各自添加了该函数,通过aclsysGetVersionNum获取 GE 编译器版本号,仅在版本 ≥ 9.1.0 时返回true。 Patterns()增加版本前置检查:各 fusion pass 的Patterns()方法开头调用IsTargetVersion(),若版本不满足则直接返回空 pattern 列表,跳过 pass 逻辑。- 修复
aclsysGetVersionNum调用中的const_cast问题:将MeetRequirements()中的const_cast<char*>("ge_compiler")替换为char pkgName[] = "ge_compiler"局部变量后传入,消除对字符串字面量的非法写权限转换。


不准确?
atomgit-bot
7月8日 评论:
7月8日 评论:
代码审查
审查总结
本次 diff 修改了 3 个文件,每个文件都做了相同的三类改动:
| 文件 | 审查结果 |
|---|---|
conversion/transpose/op_graph/fusion_pass/permute_fusion_pass.cpp |
1 个 P2 问题 |
math/reduce_mean/op_graph/fusion_pass/globalavgpool_fusion_pass.cpp |
1 个 P2 问题 |
math/reduce_mean/op_graph/fusion_pass/reduce_mean_with_cast_fusion_pass.cpp |
1 个 P2 问题 |
报告统计:P0: 0, P1: 0, P2: 3, P3: 0
整体风险判断:低—中风险。
- 正确的改动:
MeetRequirements()中将const_cast<char*>("ge_compiler")替换为局部char pkgName[]数组,消除了对字符串字面量写入的未定义行为;Patterns()中的版本前移检查逻辑正确;GE_COMPILER_VERSION_910宏定义的值(90100000 = 9.1.0)与命名一致。 - 唯一问题:三个文件中新增的
IsTargetVersion()函数均缺少static关键字,导致同名函数在三个翻译单元中都具有外部链接,构成 ODR 违规。修复只需在每个定义前添加static即可,成本极低。当前三处定义完全相同,暂时不会触发运行时错误,但未来任一处独立修改都可能导致难以排查的版本检查不一致问题。
| 类型 | 数量 |
|---|---|
| 🔴 阻塞 | 0 |
| 🟡 建议 | 3 |
💬 仅评论


不准确?
7月8日 添加了label:cann-cla/yes
CANN-robot
7月8日 评论:
7月8日 评论:
此处折叠了52条消息 查看更多
7月10日 添加了label:lgtmapproved
7月10日 解决了最后一个问题
7月10日 关闭了关联的issue
7月10日 合入了pull request
描述
fusion pass兼容性问题修复
关联的Issue
https://gitcode.com/cann/ops-math/issues/2201
测试
文档更新
类型标签