Pull Request已成功合入, 合并人@ascend-robot
(感谢 wangzixuan 的贡献)变更摘要
本 PR 在 aicpu 数据落盘前增加 flip(翻转)计算逻辑,为 mainStreamTask 和 KFC 数据预计算 batchId 并随数据一起落盘,避免后续处理时再从数据库读取和计算。C++ 侧在 AicpuPersistence 中新增 ComputeAicpuBatchId(),在 ProcessEntry 解析后、GenerateAndSaveData 前按 streamId 分组、按时间戳排序后调用 ModelingComputeBatchIdBinary 计算并回写 taskId.batchId;Python 侧在 AicpuAddInfoParser 中新增 _compute_batch_id(),复用 FlipCalculator.compute_batch_id 对 KFC 信息和主 stream 任务进行预计算。同时 AicpuMasterStreamHcclTask 与 KfcInfo 两张表(C++ 的 database.cpp 及 Python 的 tables_config.py)均新增 batch_id 字段,数据模型 bean 也相应增加 batch_id 属性。
主要改动
- 新增 batchId 预计算逻辑:
AicpuPersistence::ComputeAicpuBatchId()将 flip 数据与 task 数据按streamId分组、按时间戳排序后调用ModelingComputeBatchIdBinary计算,并将结果回写至各taskId.batchId;ProcessEntry在解析后、落盘前调用该方法。 - 落盘数据扩展
batch_id字段:MainStreamTaskFormat与KfcInfosFormat元组类型各增加一个uint32_t字段,GenerateAndSaveMainStreamTask和GenerateAndSaveKfcInfos写入数据行时新增batch_id。 - 数据库表结构新增
batch_id列:AicpuMasterStreamHcclTask与KfcInfo表在database.cpp中新增batch_id(SQL_INTEGER_TYPE),并在tables_config.py中同步新增('batch_id', 'INTEGER,null')配置。 - Python 解析侧新增预计算与 bean 属性:
AicpuAddInfoParser新增_compute_batch_id(),将 flip 数据转为TaskFlip后调用FlipCalculator.compute_batch_id为 KFC 信息和主 stream 任务预填batch_id,并在save()写入时带上该字段;KfcHcclInfoBean、AicpuMasterStreamHcclTaskBean新增batch_id属性(getter/setter,默认 0),后者另补充timestamp属性。 - 补充单元测试:C++ 侧新增
AicpuPersistenceComputeBatchIdUtest用例(覆盖空 flip、空 task、无对应 flip 的 stream、按 stream 独立计算、KFC 计算、groupName=0跳过等场景);Python 侧新增_compute_batch_id与set_aicpu_data零时间戳过滤相关测试。


代码审查
我已用尽大部分审查预算,现给出结论。已逐一核查全部 9 个变更文件,并报告了 3 条发现。
审查结论
已报告的发现
| 优先级 | 文件 | 位置 | 问题 |
|---|---|---|---|
| P1 | analysis/msparser/add_info/aicpu_add_info_parser.py | 355-363 | _compute_batch_id 中 flip 时间戳经 time_from_syscnt 换算为纳秒,而 kfc/mainStream 任务时间戳为原始 syscnt,FlipCalculator 直接跨量纲比较,真实数据下 batchId 计算错误 |
| P2 | analysis/csrc/domain/services/persistence/device/aicpu_persistence.cpp | 586 | ComputeAicpuBatchId 中 kfc 按原始 info.streamId 分组,flip 按派生 taskId.streamId 分组,stream 扩展/位标记场景下键域不一致,kfc batchId 恒为 0 |
| P3 | analysis/csrc/domain/services/persistence/device/aicpu_persistence.cpp | 617-618 | C++(ModelingComputeBatchIdBinary 分组序号)与 Python(is_flip_num=True 取 flip_num)对同一持久化列的 batchId 语义不一致 |
各文件核查情况
- aicpu_persistence.cpp:发现 P2、P3 两处问题(见上);列计数与表结构匹配、
flipStoragereserve 防重分配、指针回写逻辑经核查无泄漏/越界。 - aicpu_persistence.h:
ComputeAicpuBatchId声明与其实现一致,#define private public测试路径可访问私有成员,no issues。 - database.cpp:
AicpuMasterStreamHcclTask(7 列)、KfcInfo(25 列)新增batch_id列的位置与 C++ tuple 及 Python 写入顺序逐一核对一致,no issues。 - tables_config.py:
AicpuMasterStreamHcclTaskMap、KfcInfoMap列顺序与数量与两套写入方一致,no issues。 - aicpu_add_info_bean.py:新增
batch_id属性/setter 及timestamp属性实现正确;import 重排不改变语义,no issues。 - aicpu_add_info_parser.py:发现 P1 时间戳单位不一致问题(见上)。
- CMakeLists.txt:为 persistence UT 新增
modeling/batch_id源码目录,各 UT 为独立二进制,无重复符号链接冲突,no issues。 - aicpu_persistence_utest.cpp:新增测试逻辑与
ComputeAicpuBatchId实现一致(含 kfc 同记录多 info 后写覆盖语义、groupName==0 跳过),可编译可运行,no issues。 - test_aicpu_add_info_parser.py:
_pack_aicpu_bean各格式字段计数(node=42、flip/mainStream=233、kfc=72)经复核与 struct 格式精确匹配,无 struct.error;测试断言与 Python 实现一致,no issues。
总体风险评估
该 PR 的核心新增逻辑(C++ ComputeAicpuBatchId 与 Python _compute_batch_id)存在 1 个高置信度的数据正确性缺陷(P1,时间戳单位不一致)和 2 个中低置信度的一致性/分组键缺陷(P2/P3),会导致落盘的 batch_id 在真实数据下错误或两套分析栈结果不一致,进而影响下游依赖该列的处理逻辑。表结构变更(database.cpp / tables_config.py / 列顺序)经验证正确。建议合入前优先修复 P1,并评估 P2/P3 的两侧语义对齐。
| 类型 | 数量 |
|---|---|
| 🔴 阻塞 | 1 |
| 🟡 建议 | 0 |
⛔ 需要修改


Thanks for your pull-request.
The full list of commands accepted by me can be found at here。
You can get sig-info at here
PR Approval Progress
✅ Congratulations! All modules have met the lgtm and approve requirements.
Module Approval Details
| module | lgtm status | approve status |
|---|---|---|
| repo-Ascend/msprof | ✅ 梁朝明, mei-feiyao (2/2) | ✅ 梁朝明 (1/1) |
💡 Tip:
- Committer can comment
/approveor/lgtm- Commenting
/approveimplies both code review (lgtm) and intent to merge (approve)
CLA Signature Pass
Seanesmhxocism, thanks for your pull request. All authors of the commits have signed the CLA. 👍


The following users do not have permission to comment /lgtm or /approve on any module in this PR:
wiyr0


Pull Request 已合并或已关闭。
If you want to solve this problem, you can click here to do it in the FAQs.


Pull Request 已合并或已关闭。
If you want to solve this problem, you can click here to do it in the FAQs.


PR 合入模板
注:经过自检不涉及的可标注“不涉及”或直接打勾,特殊情况请文字备注。不符合规范的 PR 不允许合入,请(后备)commit 注意。
1. 修改描述
aicpu相关数据依赖aicpuFlipTask做batchId计算,该逻辑再后续的kfc_calculator相关逻辑中反复遇到。为简化后续处理流程,在落盘前就完成相关id计算。
目前修改后,相关数据仅存于db数据中,暂时未使用相关数据内容。后续流程中会校验相关数据正确性
1、python侧aicpuParser逻辑中,增加batchId计算方式
2、c++侧aicpuPersistence逻辑中,增加batchId计算方式
2. 功能验证
3. 分支合并要求
3. 代码检视
要求:
是否经过代码检视
是否具备 UT 测试用例看护 (如不符合,请说明原因:____________________)
检视意见数:____ 条 (请填写本次检视的意见总数,用于commit合入前审视)
4. 安全自检
Python、C++
C++
不涉及
5. 变更知会