已合并
回退polar算子到simt实现 #3944
xiu_ling_wang创建于 7月9日
回退polar算子到simt实现 #3944
已合并
xiu_ling_wang创建于 7月9日
xiu_ling_wang成员
7月9日

描述

回退polar算子到simt实现。

关联的Issue

https://gitcode.com/cann/ops-math/issues/2177

测试

文档更新

类型标签

likedislike
Pull Request已成功合入, 合并人@CANN-robot
(感谢 xiu_ling_wang 的贡献)
Xxiu_ling_wang成员
7月9日 创建了 pull request,commit 14758631
atomgit-bot
atomgit-bot
7月9日 评论:

变更摘要

该 PR 将 polar 算子从基于 broadcast 框架的 SIMD 实现回退到自定义 SIMT(单指令多线程)实现。原实现依赖 BroadcastBaseTiling / BroadcastSch 等 broadcast 基础设施,通过 PolarBrcDag 定义 DAG 流水线并使用 CopyInBrc 广播拷贝。回退后,tiling 逻辑改为手动实现:自行完成 dtype 校验、多维 shape 广播与归并、stride 计算、多核切分,并将 tilingData 通过 memcpy_s 写入 raw tiling data。kernel 侧则移除了 polar_dag.h / polar.h,新增 polar_simt.h,使用 asc_vf_call + Simt::Cos/Simt::Sin 直接在 GM 上完成 polar 计算,不再依赖 broadcast 调度和 UB 上的 SIMD 向量指令。

主要改动

  • Tiling 逻辑重写polar_tiling.cpp 移除对 BroadcastBaseTiling<PolarBrcDag> 的调用,改为手动实现 CheckDtype(校验输入为 DT_FLOAT、输出为 DT_COMPLEX64)、CheckBroadcastAndMergeShape(多维广播形状归并)、CalcStride(计算各输入的 broadcast stride),并在 PostTiling 中通过 memcpy_sPolarTilingData 写入 raw tiling data,同时设置 workspace 为 0 和 blockDim

  • Tiling 数据结构变更polar_struct.h 删除对 broadcast_base_struct.h 的依赖及 BRC_TEMP_SCH_MODE_KEY 模板参数,新增 PolarTilingData 结构体,包含 totalElementselementsPerCorecoreNumformerCoredimNum 以及 mergedStride/absStride/angleStride/yStride 四个 stride 数组(最大维度 POLAR_MAX_DIM=8)。

  • Kernel 实现从 SIMD 迁移到 SIMT:删除 polar_dag.h(含 PolarMergePolarBrcDag 的 DAG 定义)和 polar.hBroadcastSch 入口),新增 polar_simt.h,其中 PolarSimt<float> 类通过 asc_vf_call 调用 SimtPolarCompute,在 GM 上使用 Simt::Cos/Simt::Sin 逐元素计算,并基于 stride 数组手动计算多维 broadcast 偏移。

  • Kernel 入口调整polar_apt.cpp 不再 include polar.h,改为 include polar_simt.hpolar_struct.h,kernel 函数直接实例化 PolarSimt<float> 并调用 Init + Process

  • 测试预期值更新:测试用例中所有 expectTilingKey 从 8 改为 0,expectWorkspaces{16777216} 改为 {0},并新增 dtype 不匹配的失败测试(输入 DT_BF16 和输出 DT_FLOAT 场景)。

likedislike
atomgit-bot
atomgit-bot
7月9日 评论:

代码审查

审查完成

我已完成对所有 6 个变更文件的逐行审查。以下是我的结论:


发现的问题

仅发现 1 个 P3 级别的问题:

  • polar_tiling.cpp:185Tiling4Polar 函数中 tiling 失败时使用 OP_LOGD(debug 级别)而非 OP_LOGE(error 级别)记录日志,生产环境中可能难以排查 tiling 失败问题。

各文件审查结论

文件 结论
math/polar/op_host/arch35/polar_tiling.cpp 1 个 P3 问题(日志级别),其余逻辑正确
math/polar/op_host/arch35/polar_tiling.h 无问题
math/polar/op_kernel/arch35/polar_simt.h 无问题(SIMT kernel 实现正确:broadcast 坐标分解、stride 计算、输出交错写入均验证通过)
math/polar/op_kernel/arch35/polar_struct.h 无问题
math/polar/op_kernel/polar_apt.cpp 无问题
math/polar/tests/ut/op_host/arch35/test_polar_tiling_arch35.cpp 无问题(测试覆盖了正向/广播/类型不匹配/不可广播等场景,expectTilingKey/expectWorkspaces 均已正确更新)

总体风险评估

风险:低。 此次变更将 polar 算子从 DAG(double-buffer pipeline)回退到 SIMT 实现,代码质量良好。关键路径(tiling shape 分析、broadcast 对齐、stride 计算、kernel 坐标分解、多核数据分配)均经过验证,逻辑正确。已删除的 polar.h / polar_dag.h 无残留引用,类型(int64_t)使用恰当,无 32 位溢出风险。唯一发现的问题是日志级别使用不当(P3),不影响功能正确性。

⚠️ 已识别出整体风险,但无法提取行内评论,请参考整体评估。

likedislike
CANN-robotCANN-robot成员
7月9日 添加了label:cann-cla/yes
CANN-robot
CANN-robot成员
7月9日 评论:

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-cann/ops-math 宋恺, 冯彤 (2/2) 宋恺 (1/1)

💡 Tip:

  • Committer can comment /approve or /lgtm
  • Commenting /approve implies both code review (lgtm) and intent to merge (approve)

CLA Signature Pass

xiu_ling_wang, thanks for your pull request. All authors of the commits have signed the CLA. 👍

likedislike
CANN-robotCANN-robot成员
7月9日 将zhou-qilong,wangrui_,rxtfeng,loov1,zhangzijie,jia0liang,songkai111,llimwang,gubaocheng,andong_hw,zhanw_coding设为评审人
CANN-robotCANN-robot成员
7月9日 将zhou-qilong,wangrui_,rxtfeng,loov1,zhangzijie,jia0liang,songkai111,llimwang,gubaocheng,andong_hw,zhanw_coding设为审查人
xiu_ling_wang成员
7月9日 评论:

compile

likedislike
Xxiu_ling_wang成员
7月9日 update merge request[project id: 7649531, iid: 3944, commit_id: 97b5773797708e7c1f59505fda8c6a8b26ea7155] virtual merging success
CANN-robotCANN-robot成员
7月9日 添加了label:ci-pipeline-running
CANN-robot
CANN-robot成员
7月9日 评论:

流水线任务触发成功
任务链接 [72fe29869bd74cfaa4e2b33c66f0b739][流水线指导]

任务名称状态日志下载链接
pre_comment ✅ SUCCESS >>>>>
Compile_Ascend_X86_ubuntu24 ✅ SUCCESS >>>>> >>>>>
Compile_Ascend_X86_mobile_station_ubuntu24 ✅ SUCCESS >>>>> >>>>>
Compile_Ascend_X86_experimental_ubuntu24 ✅ SUCCESS >>>>> >>>>>
Compile_Ascend_X86_A5_ubuntu24 ✅ SUCCESS >>>>> >>>>>
Compile_harmony-infer ✅ SUCCESS >>>>>
Compile_Ascend_ARM_ubuntu24 ✅ SUCCESS >>>>> >>>>>
Compile_Ascend_ARM_experimental_ubuntu24 ✅ SUCCESS >>>>> >>>>>
Compile_Ascend_single_ubuntu24 ✅ SUCCESS >>>>> >>>>>
Compile_Ascend_ARM_A5_ubuntu24 ✅ SUCCESS >>>>> >>>>>
Compile_X86_monitor_910b ✅ SUCCESS >>>>> >>>>>
Compile_X86_monitor_910c ✅ SUCCESS >>>>> >>>>>
Compile_X86_monitor_950 ✅ SUCCESS >>>>> >>>>>
Compile_harmony-infer-chs-math ✅ SUCCESS >>>>>
Compile_kirin-harmony-infer-chs-math-1 ✅ SUCCESS >>>>>
UT_Test ✅ SUCCESS
UT_Test_experimental ✅ SUCCESS
UT_Test_kernel ✅ SUCCESS
PreSmoke_A900 ✅ SUCCESS >>>>>
API_Check ✅ SUCCESS >>>>>
PreSmoke_ATK_Test_A2 ✅ SUCCESS >>>>>

[2026-07-09 14:57:26]    CI执行结束

likedislike
CANN-robot
CANN-robot成员
7月9日 评论:

流水线任务触发成功
任务链接 [59a2bc10462d4054a4092d7d18a83b67][流水线指导]

任务名称状态日志下载链接
codecheck ✅ SUCCESS >>>>>
SCA ✅ SUCCESS >>>>>
antipoison ✅ SUCCESS >>>>>
codecheck_Pr ✅ SUCCESS
StaticCheck_codespell_check ✅ SUCCESS
StaticCheck_link_validity_check ✅ SUCCESS
StaticCheck_resource_existence_check ✅ SUCCESS
StaticCheck_tag_closed_check ✅ SUCCESS
StaticCheck_markdownlint ✅ SUCCESS
codecheck_codestyle ⚠️ WARNING >>>>>
codecheck_precommit ❌ FAILED >>>>> >>>>>
likedislike
CANN-robotCANN-robot成员
7月9日 添加了label:api-check-pass
CANN-robotCANN-robot成员
7月9日 删除了label:ci-pipeline-running
CANN-robotCANN-robot成员
7月9日 添加了label:ci-pipeline-failed
Xxiu_ling_wang成员
7月9日 update merge request[project id: 7649531, iid: 3944, commit_id: 64a83ef0434c69c5aa9505e7a76222fd5c2c99c6] virtual merging success
Xxiu_ling_wang成员
7月9日 强制推送  1 个提交:c7d34cee-回退polar算子到simt实现
Xxiu_ling_wang成员
7月9日 update merge request[project id: 7649531, iid: 3944, commit_id: 5ddf50612625f1b5500bd1615a36a5363aab7d29] virtual merging success
xiu_ling_wang成员
7月9日 评论:

compile

likedislike
Xxiu_ling_wang成员
7月9日 update merge request[project id: 7649531, iid: 3944, commit_id: a3ad17f173bf67e54eb51bdad1480507512a7057] virtual merging success
CANN-robotCANN-robot成员
7月9日 删除了label:ci-pipeline-failedapi-check-pass
CANN-robotCANN-robot成员
7月9日 添加了label:ci-pipeline-running
CANN-robot
CANN-robot成员
7月9日 评论:

流水线任务触发成功
任务链接 [8c16749e4377498ea8a144c2ab1ab1b4][流水线指导]

任务名称状态日志下载链接
pre_comment ✅ SUCCESS >>>>>
Compile_Ascend_X86_ubuntu24 ✅ SUCCESS >>>>> >>>>>
Compile_Ascend_X86_mobile_station_ubuntu24 ✅ SUCCESS >>>>> >>>>>
Compile_Ascend_X86_experimental_ubuntu24 ✅ SUCCESS >>>>> >>>>>
Compile_Ascend_X86_A5_ubuntu24 ✅ SUCCESS >>>>> >>>>>
Compile_harmony-infer ✅ SUCCESS >>>>>
Compile_Ascend_ARM_ubuntu24 ✅ SUCCESS >>>>> >>>>>
Compile_Ascend_ARM_experimental_ubuntu24 ✅ SUCCESS >>>>> >>>>>
Compile_Ascend_single_ubuntu24 ✅ SUCCESS >>>>> >>>>>
Compile_Ascend_ARM_A5_ubuntu24 ✅ SUCCESS >>>>> >>>>>
Compile_X86_monitor_910b ✅ SUCCESS >>>>> >>>>>
Compile_X86_monitor_910c ✅ SUCCESS >>>>> >>>>>
Compile_X86_monitor_950 ✅ SUCCESS >>>>> >>>>>
Compile_harmony-infer-chs-math ✅ SUCCESS >>>>>
Compile_kirin-harmony-infer-chs-math-1 ✅ SUCCESS >>>>>
UT_Test ✅ SUCCESS
UT_Test_experimental ✅ SUCCESS
UT_Test_kernel ✅ SUCCESS
PreSmoke_A900 ✅ SUCCESS >>>>>
API_Check ✅ SUCCESS >>>>>
PreSmoke_ATK_Test_A2 ✅ SUCCESS >>>>>

[2026-07-09 15:08:24]    CI执行结束

likedislike
CANN-robot
CANN-robot成员
7月9日 评论:

流水线任务触发成功
任务链接 [a6d5079b9bee4858adfb838f67cb25c8][流水线指导]

任务名称状态日志下载链接
codecheck ✅ SUCCESS >>>>>
SCA ✅ SUCCESS >>>>>
antipoison ✅ SUCCESS >>>>>
codecheck_Pr ✅ SUCCESS
StaticCheck_codespell_check ✅ SUCCESS
StaticCheck_link_validity_check ✅ SUCCESS
StaticCheck_resource_existence_check ✅ SUCCESS
StaticCheck_tag_closed_check ✅ SUCCESS
StaticCheck_markdownlint ✅ SUCCESS
codecheck_codestyle ✅ SUCCESS >>>>>
codecheck_precommit ✅ SUCCESS >>>>>

[2026-07-09 15:04:57]    CI执行结束

likedislike
CANN-robotCANN-robot成员
7月9日 添加了label:api-check-pass
CANN-robotCANN-robot成员
7月9日 删除了label:ci-pipeline-running
CANN-robotCANN-robot成员
7月9日 添加了label:ci-pipeline-passed
songkai111成员
7月9日 评论:

/lgtm
/approve

likedislike
CANN-robotCANN-robot成员
7月9日 添加了label:approved
Xxiu_ling_wang成员
7月9日 修改了pull request 的描述
rxtfeng成员
7月9日 评论:

/lgtm

likedislike
CANN-robotCANN-robot成员
7月9日 添加了label:lgtm
CANN-robotCANN-robot成员
7月9日 合入了pull request