已合并
update: 更新文件 08.05_chapter_practice.ipynb #363
update: 更新文件 08.05_chapter_practice.ipynb #363
已合并
ink_polymer创建于 7月20日
ink_polymer
ink_polymer成员
7月20日

描述

补充图片修改问题

关联的Issue

测试

文档更新

类型标签

其他信息

likedislike
Pull Request已成功合入, 合并人@CANN-robot
(感谢 ink_polymer 的贡献)
atomgit-bot
atomgit-bot
7月20日 评论:

变更摘要

本次 PR 主要对 AscendC 算子开发教程中所有使用 TQue 模板的代码进行了一次系统性的语义重构:引入独立的 QUEUE_DEPTH 常量,将 TQue 的第二个模板参数从 BUFFER_NUM 统一替换为 QUEUE_DEPTH,使 Queue 深度参数在命名上与 buffer 数量概念分离。变更覆盖了 02 至 08 章节的 Jupyter Notebook 教程文件及其对应的 C++ 算子源码/答案文件,同时附带少量格式修正(缩进、文件末尾换行符)。

主要改动

  • 引入 QUEUE_DEPTH 常量:在所有涉及 TQue 声明的 .cpp.h.asc.ipynb 文件中,新增 constexpr int32_t/uint32_t QUEUE_DEPTH = <value>;,其值与同文件中已有的 BUFFER_NUM 保持一致(1 或 2)。
  • TQue 模板参数替换:将 AscendC::TQue<AscendC::TPosition::VECIN, BUFFER_NUM>AscendC::TQue<AscendC::TPosition::VECOUT, BUFFER_NUM>(以及对应的 QuePosition 命名空间变体)中的第二个模板参数统一从 BUFFER_NUM 改为 QUEUE_DEPTH,涉及输入/输出 Queue 的声明。
  • 03.05 notebook 格式修正:修复了 03.05_tiling_template_attr_tbuf_workspace.ipynb!rm -rf!msopgen gen 两行 shell 命令的缩进错误。
  • 文件末尾换行符统一:多个 notebook 文件(如 02.0403.0203.0505.03 等)的 JSON 末尾换行符得到修正。
likedislike
atomgit-bot
atomgit-bot
7月20日 评论:

代码审查

Confirmed. Let me now provide the closing summary.


审查总结

本次 diff 共涉及 36 个文件,核心变更是将 Ascend C 算子 kernel 代码中 TQue 模板的第二个参数从 BUFFER_NUM 统一重命名为语义更明确的 QUEUE_DEPTH,同时保留 BUFFER_NUM 用于 tile 计算和 InitBuffer 等场景。所有实际源码文件(.cpp / .h / .asc / .txt)均正确同步添加了 QUEUE_DEPTH 常量定义,变更一致、无行为变化。

发现问题:2 个 P1

# 文件 问题
1 03.04_generalized_tiling_design.ipynb TQue 模板参数改为 QUEUE_DEPTH,但初始 %%writefile 单元未添加该常量的定义 → 用户按顺序执行 notebook 后编译失败
2 07.02_CPU_Debugging_Overview.ipynb 同上,第一版 add.cpp%%writefile 单元缺少 QUEUE_DEPTH 定义(后两个版本已正确添加)

各文件审查结果

  • 02_AscendC_basic/02.04_...ipynb — 无问题
  • 02_AscendC_basic/02.05_chapter_test.ipynb — 无问题
  • 02_AscendC_basic/answer/02.04_answer.txt — 无问题
  • 02_AscendC_basic/answer/02.05_answer.txt — 无问题
  • 02_AscendC_basic/src/add_custom.asc — 无问题
  • 03_.../03.02_operator_engineering_intro.ipynb — 无问题
  • 03_.../03.04_generalized_tiling_design.ipynbP1:QUEUE_DEPTH 定义缺失
  • 03_.../03.05_tiling_template_attr_tbuf_workspace.ipynb — 无问题
  • 03_.../answer/03.02_answer/.../sub_custom_template.cpp — 无问题
  • 03_.../answer/03.04_answer/.../sub_custom_template.cpp — 无问题
  • 03_.../answer/03.05_answer/.../add_custom_template.cpp — 无问题
  • 03_.../answer/03.06_answer/.../sigmoid_custom.cpp — 无问题
  • 03_.../src/custom_op/.../add_custom_template.cpp — 无问题
  • 03_.../src/custom_op_04/.../add_custom_template.cpp — 无问题
  • 05_.../05.03_vv_fused_operator_development.ipynb — 无问题
  • 05_.../answer/05.03_answer/.../square_diff.cpp — 无问题
  • 06_.../06.03_operator_development_based_on_opensource_repo.ipynb — 无问题
  • 06_.../06.05_chapter_practice.ipynb — 无问题
  • 06_.../answer/06.03_answer/.../sub_custom.h (NsSub) — 无问题
  • 06_.../answer/06.05_answer/.../sigmoid.h (NsSigmoid) — 无问题
  • 06_.../src/add_custom/.../add_custom.h — 无问题
  • 07_Troubleshooting/07.02_CPU_Debugging_Overview.ipynbP1:第一版 QUEUE_DEPTH 定义缺失
  • 07_Troubleshooting/07.03_NPU_On-Board_Debugging.ipynb — 无问题
  • 07_Troubleshooting/07.04_Typical_Issues_...ipynb — 无问题
  • 07_Troubleshooting/07.05_chapter_test.ipynb — 无问题
  • 07_Troubleshooting/answer/07.04_answer.txt — 无问题
  • 07_Troubleshooting/answer/07.05_answer.txt — 无问题
  • 08_.../08.02_profiling_tool_usage.ipynb — 无问题
  • 08_.../08.03_simulation_analysis.ipynb — 无问题
  • 08_.../08.04_ascendc_op_perf_optimization_demo.ipynb — 无问题
  • 08_.../08.05_chapter_practice.ipynb — 无问题
  • 08_.../src/custom_op/.../add_custom_template.cpp — 无问题
  • 08_.../src/custom_op_04_01/.../add_custom_template.cpp — 无问题
  • 08_.../src/custom_op_04_02/.../add_custom_template.cpp — 无问题
  • 08_.../src/custom_op_04_03/.../add_custom_template.cpp — 无问题
  • 08_.../src/custom_op_05/.../add_custom_template.cpp — 无问题

整体风险判断:中等。两个 P1 问题都会导致用户在跟随教程执行时遇到编译失败,但不影响已存在的独立源码文件。修复方式简单明确:在对应 notebook 的 %%writefile 单元中补上 QUEUE_DEPTH 常量定义即可。

类型 数量
🔴 阻塞 2
🟡 建议 2

⛔ 需要修改

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

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/cann-learning-hub waimaidaole, fuyangchenghu (2/2) waimaidaole (1/1)

💡 Tip:

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

CLA Signature Pass

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

likedislike
ink_polymerink_polymer成员
7月20日 推送  1 个提交:b3e19963-fix: update image reference in 03_what_is_cann.ipynb
atomgit-bot
atomgit-bot7月20日进行代码检视2
tutorials/ascendc_operator_development/07_Troubleshooting/07.02_CPU_Debugging_Overview.ipynb
已过期
@@ -152,7 +152,7 @@
152152 "constexpr int32_t BLOCK_LENGTH = TOTAL_LENGTH / USE_CORE_NUM; // length computed of each core\n",
153153 "constexpr int32_t TILE_NUM = 8; // split data into 1 tiles for each core\n",
154154 "constexpr int32_t BUFFER_NUM = 2; // tensor num for each queue\n",
155155 "constexpr int32_t TILE_LENGTH = BLOCK_LENGTH / TILE_NUM / BUFFER_NUM; // separate to 2 parts, due to double buffer"
atomgit-bot
atomgit-bot7月20日评论:

🟠 High Priority

07.02_CPU_Debugging_Overview.ipynb 中,第一个创建 Sources/07.02/cpu_debug/add.cpp%%writefile 单元(第 144-155 行)定义了 BUFFER_NUM = 2(第 154 行),但未添加 QUEUE_DEPTH。然而后续的 %%writefile -a 单元(第 175 行起)中 TQue 声明已被修改为引用 QUEUE_DEPTH(第 228-229 行)。

虽然 notebook 后部还有两个独立的 %%writefile 单元(第 740 行和第 899 行)分别创建了完整版 add.cpp 并正确添加了 QUEUE_DEPTH,但第一个版本缺失该常量,用户在 2.2.1–2.2.3 节顺序执行时会遇到编译错误。

影响行为:第一版 add.cpp 中的 TQue 模板参数引用未定义的编译期常量。
触发条件:从 2.2.1 节开始顺序执行 notebook 单元后编译。
失败模式:C++ 编译错误 —— QUEUE_DEPTH 未声明。

建议:在第一个 %%writefile 单元的 BUFFER_NUM 定义之后添加 QUEUE_DEPTH = 2 的定义,与同一 notebook 后两个版本(第 751 行和第 910 行)的处理方式保持一致。

改动建议
155
- "constexpr int32_t TILE_LENGTH = BLOCK_LENGTH / TILE_NUM / BUFFER_NUM; // separate to 2 parts, due to double buffer"
155
+ "constexpr int32_t BUFFER_NUM = 2; // tensor num for each queue\n",
156
+ "constexpr int32_t QUEUE_DEPTH = 2;\n",
已应用
likedislike
System
系统消息系统
7月20日 评论:

changed this line on 530033b7 view diff detail

atomgit-bot
atomgit-bot7月20日进行代码检视2
tutorials/ascendc_operator_development/03_intermediate_vector_operator_development/03.04_generalized_tiling_design.ipynb
已过期
@@ -643,7 +643,7 @@
643643 "#include \"kernel_operator.h\"\n",
644644 "#include \"add_custom_template_tiling.h\"\n",
645645 "#include \"kernel_operator_dump_tensor_intf_impl.h\"\n",
646646 "constexpr int32_t BUFFER_NUM = 1;"
atomgit-bot
atomgit-bot7月20日评论:

🟠 High Priority

03.04_generalized_tiling_design.ipynb 中,%%writefile -a 代码单元(第 837-850 行)将 TQue 的模板参数从 BUFFER_NUM 改为 QUEUE_DEPTH(第 840-841 行),但创建该文件的 %%writefile 单元(第 642-647 行)仅定义了 BUFFER_NUM = 1,并未同步添加 QUEUE_DEPTH 的定义。

用户在顺序执行 notebook 单元后,生成的 Sources/03.04/custom_op/op_kernel/add_custom_template.cpp 文件中引用了未定义的 QUEUE_DEPTH,导致编译失败。

影响行为:TQue 模板参数引用未定义的编译期常量。
触发条件:按 notebook 单元顺序执行后编译生成的算子 kernel 文件。
失败模式:C++ 编译错误 —— QUEUE_DEPTH 未声明。

建议:在第一个 %%writefile 单元中,BUFFER_NUM 定义之后添加 QUEUE_DEPTH 的定义,与 notebook 中其他文件的处理方式保持一致。即将第 646 行的 "constexpr int32_t BUFFER_NUM = 1;" 改为两行:先定义 BUFFER_NUM,再定义 QUEUE_DEPTH = 1

改动建议
646
- "constexpr int32_t BUFFER_NUM = 1;"
646
+ "constexpr int32_t BUFFER_NUM = 1;\n",
647
+ "constexpr int32_t QUEUE_DEPTH = 1;"
已应用
likedislike
System
系统消息系统
7月20日 评论:

changed this line on 6b1381ab view diff detail

atomgit-bot
atomgit-bot7月20日进行代码检视1
tutorials/ascendc_operator_development/07_Troubleshooting/07.04_Typical_Issues_in_AscendC_Operator_Development.ipynb
@@ -293,6 +293,7 @@
293293 "#include \"kernel_operator.h\"\n",
294294 "\n",
295295 "constexpr uint32_t BUFFER_NUM = 2; // tensor num for each queue\n",
296+ "constexpr uint32_t QUEUE_DEPTH = 2;\n",
atomgit-bot
atomgit-bot7月20日评论:

🟡 Medium Priority

该文件中有 6 个独立的算子代码示例(AddCustom × 5 + SinhCustom × 1),每个都新增了 QUEUE_DEPTH = 2 常量并将 TQue 模板参数从 BUFFER_NUM 改为 QUEUE_DEPTH。但每个代码块中以下位置仍然使用 BUFFER_NUM

具体受影响的代码块(按 cell 出现的行范围):

  1. 第 285-366 行(AddCustom,含 printf 调试)
  2. 第 525-604 行(AddCustom,含 printf 调试)
  3. 第 745-824 行(AddCustom,含 printf 调试)
  4. 第 990-1069 行(AddCustom,CopyOut 中 zLocal 越界场景)
  5. 第 1255-1334 行(AddCustom,正确示例)
  6. 第 1485-1564 行(SinhCustom)

当前 BUFFER_NUMQUEUE_DEPTH 值相同(均为 2),不会触发运行时错误。但这是教程代码,不一致的命名会误导学习者;且未来若只修改其中一个常量会导致队列深度与 buffer 分配数量不匹配,引发内存错误或流水线死锁。

建议:统一使用 QUEUE_DEPTH(或统一使用 BUFFER_NUM)作为唯一常量名,并将上述 6 个代码块中所有 InitBuffertileLength 计算、loopCount 计算中的 BUFFER_NUM 替换为与 TQue 模板参数一致的常量。两个常量只应保留一个,另一个应删除。

likedislike
atomgit-bot
atomgit-bot7月20日进行代码检视1
tutorials/ascendc_operator_development/02_AscendC_basic/02.04_introduction_to_kernel_functions_based_on_add_operator.ipynb
@@ -162,2 +162,3 @@
162162 "\n",
163- "constexpr uint32_t BUFFER_NUM = 2; // tensor num for each queue"
163+ "constexpr uint32_t BUFFER_NUM = 2; // tensor num for each queue",
164+ "constexpr uint32_t QUEUE_DEPTH = 2;"
atomgit-bot
atomgit-bot7月20日评论:

🟡 Medium Priority

该 diff 在 add_custom.ascsub_custom.asc 两个代码块中新增了 constexpr uint32_t QUEUE_DEPTH = 2;,并将 TQue 的第二个模板参数从 BUFFER_NUM 改为 QUEUE_DEPTH(第 300-301 行)。但是以下位置仍使用 BUFFER_NUM

  1. 第 406 行:this->tileLength = this->blockLength / tileNum / BUFFER_NUM;
  2. 第 412-414 行:pipe.InitBuffer(inQueueX, BUFFER_NUM, ...) 等三处
  3. 第 443-444 行:int32_t loopCount = this->tileNum * BUFFER_NUM;

在 AscendC 中,TQue 的 depth 参数与 InitBuffer 的 buffer 数量参数必须一致,tileLengthloopCount 的计算也依赖同一数值。当前两者值相同(均为 2),不会触发运行时错误;但如果未来只修改其中一个常量而忘记另一个,会导致队列深度与分配的 buffer 数量不匹配,引发内存越界或流水线死锁。

作为教程代码,这种不一致会误导学习者认为 QUEUE_DEPTHBUFFER_NUM 是两个独立的概念,实际上它们必须一致。建议将 InitBuffertileLengthloopCount 中的 BUFFER_NUM 也统一改为 QUEUE_DEPTH,或反之在 TQue 中保持使用 BUFFER_NUM 以确保语义统一。

建议:统一使用 QUEUE_DEPTH 替换所有 BUFFER_NUM(或反之保持原样),确保 TQue 模板参数、InitBuffer 调用、tileLength 计算、loopCount 计算使用同一常量。具体需修改的 02.04 文件内行:406(tileLength)、412-414(InitBuffer 三处)、443(loopCount)。如果保留 BUFFER_NUM 作为唯一常量,则应将 TQue 模板参数改回 BUFFER_NUM。

likedislike
ink_polymerink_polymer成员
7月20日 推送  1 个提交:530033b7-update: tutorials/ascendc_operator_development/07_Troubleshooting/07.02_CPU_Debugging_Overview.ipynb
ink_polymerink_polymer成员
7月20日 推送  1 个提交:6b1381ab-update: tutorials/ascendc_operator_development/03_intermediate_vector_operator_development/03.04_generalized_tiling_design.ipynb
ink_polymerink_polymer成员
7月20日 推送  1 个提交:07da25a9-update: 更新文件 03.04_generalized_tiling_design.ipynb
ink_polymerink_polymer成员
7月20日 推送  1 个提交:ad30fd96-update: 更新文件 07.02_CPU_Debugging_Overview.ipynb
ink_polymerink_polymer成员
7月20日 推送  1 个提交:b1673444-update: 更新文件 07.02_CPU_Debugging_Overview.ipynb
meme成员
7月20日 评论:

/lgtm
/approve

likedislike
CANN-robotCANN-robot成员
7月20日 添加了label:approved
fuyangchenghu成员
7月20日 评论:

/lgtm

likedislike
CANN-robotCANN-robot成员
7月20日 添加了label:lgtm
CANN-robotCANN-robot成员
7月20日 解决了最后一个问题
CANN-robotCANN-robot成员
7月20日 合入了pull request