| 【feat】: 移除VF融合中compare与select/where必须成对且类型相同的限制
Co-authored-by: chenyukai<chenyukai4@huawei.com>
# message auto-generated for no-merge-commit merge:
!2667 merge br_c00826661_MaskReg0508 into develop
【feat】: 移除VF融合中compare与select/where必须成对且类型相同的限制
Created-by: chenyukai
Commit-by: chenyukai
Merged-by: cann-robot
Description:
# Pull Request
## 描述
移除compare算子(GE/EQ/NE/GT/LE/LT)与Where/Select算子在向VF融合时,必须成对出现且输入类型必须匹配的强制限制,允许这些算子独立参与VF融合。
主要改动:
1. VF融合限制移除:
- compare算子IsVectorFunctionSupported移除对下游的名称和类型检查
- Where/Select算子IsVectorFunctionSupported移除对上游的名称和类型检查
- 移除TryMergeCompareOutputs函数,不再强制合并Compare节点的所有输出
2. MaskReg初始化策略调整:
- ShouldInitAsMaskReg:仅当Compare输出全部流向Where/Select的mask输入时才初始化为MaskReg,否则Compare输出为普通RegTensor,通过临时MaskReg转换
3. 代码生成时的MaskReg转换机制:
- Compare生成:非MaskReg输出时先写入临时MaskReg,再Duplicate到实际RegTensor
- Where/Select生成:非MaskReg输入时先用CompareScalar转换RegTensor到临时MaskReg
- VFLoop新增CollectMaskRegTempTensors收集需要临时MaskReg的tensor
4. Load/Store算子dtype转换增强:
- 新增micro_dtype_utils.h统一dtype大小计算工具
- Load支持LoadDist UnPack模式实现小dtype到大dtype的加载转换
- Store支持StoreDist Pack模式实现大dtype到小dtype的存储转换
- CallParam新增max_dtype_size参数传递VF的最大dtype
5. 代码重构:
- 提取CompareAscIrCodegenImplV2基类统一六个compare算子公共实现
6. 测试用例:
- 新增mask_reg_chain相关端到端测试用例
- 扩展micro_load/store_api_call UT测试
## 变更类型
请选择本次引入的变更类型:
<!-- [x] 表示选中 -->
- [ ] 🐛 Bug 修复
- [x] ✨ 新功能
- [ ] 💄 代码风格更新(格式化,局部变量)
- [ ] ♻️ 重构(既不修复错误也不增加功能的代码变动)
- [ ] 📦 构建过程或辅助工具的变动
- [ ] 📝 文档内容更新
## 关联的Issue
<!-- 如果这个PR是为了解决特定的Issue,请在当前页面的右侧'关联Issue'部分添加相应Issue链接,并勾选'合并后关闭已关联的 Issue'选项。 -->
## 如何测试
在昇腾环境下,图中存在单独的where/select节点或者compare节点,或者成对存在,但是dtype相同。
这三种类型的节点可以进入VF融合中
## 核对清单
<!-- [x] 表示选中 -->
- [x] 我的代码遵循了项目的代码风格
- [x] 我已对代码进行了自测
- [x] 我已更新了相关的文档
- [x] 我在标题中使用了合适的类型标签(如:feat:, fix:)
- [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等
## 其他信息
在此添加任何其他关于本次 PR 的说明。
See merge request: cann/ge!2667 | 27 天前 |