已合并
SIMT:添加栈溢出样例 #4407
ruoshuisixue创建于 7月16日
SIMT:添加栈溢出样例 #4407
已合并
ruoshuisixue创建于 7月16日
ruoshuisixue成员
7月16日

描述

SIMT:添加栈溢出场景及优化思路样例

关联的Issue

https://gitcode.com/cann/asc-devkit/issues/1307

测试

case1 栈上定义大数组及增加栈空间优化:
默认配置:根据readme执行样例,会有栈溢出提示The VEC SIMT stack overflows
增加栈空间配置:样例正常执行,test pass!
case2 递归调用及其迭代方法实现优化:
递归调用:根据readme执行样例,会有栈溢出提示VEC SIMT DVG stack overflows
增加栈空间配置:样例正常执行,test pass!

文档更新

类型标签

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

变更摘要

此 PR 为 SIMT API 的故障排除示例新增了栈溢出场景演示,通过编译期宏 SCENARIO_NUM(1-4)控制四种运行模式,展示大局部数组和递归调用两类栈溢出问题及其优化方案。基线版本使用 aclInit(nullptr) 以默认栈大小运行,会导致栈溢出;优化版本通过 acl.json 配置更大的栈空间或将递归改写为迭代来规避问题。

主要改动

  • 新增 acl.json 配置文件:定义了 simt_stack_size(2048)和 simt_divergence_stack_size(512)两个栈大小配置项,供 aclInit("acl.json") 加载以扩展 SIMT 线程栈空间。
  • 新增大局部数组栈溢出示例:simt_stack_overflow 内核在每个线程栈上分配 320 个 float(约 1280B)的局部数组,配合多线程场景演示栈溢出及通过配置文件增大栈空间后的优化效果。
  • 新增递归调用栈溢出示例:simt_recursive_stack_overflow 内核通过 recursive_stack_stage 递归函数叠加栈帧引发栈溢出,对应优化版本 simt_recursive_stack_overflow_optimized 将递归转换为 for 循环迭代实现,避免栈帧累积。
  • 新增编译时场景切换宏:通过 SCENARIO_NUM 宏(取值 1-4)在编译时选择四种内核变体——大数组基线(USE_LARGE_ARRAY_BASELINE)、大数组优化(USE_LARGE_ARRAY_OPTIMIZED)、递归基线(USE_RECURSION_BASELINE)、递归优化(USE_RECURSION_OPTIMIZED)。
  • 新增辅助函数:包括 launch_kernel(根据内核类型选择 aclInit 方式并执行内核)、factorial(计算阶乘参考值)、generate_input_and_golden_data(生成输入和期望输出)、verify_result(精度校验)以及 get_kernel_name(场景名称映射)。
likedislike
不准确?
atomgit-bot
atomgit-bot
7月16日 评论:

代码审查

All issues identified. Let me now write the closing summary.


审查总结

本次审查覆盖了全部 9 个变更文件:

文件 审查结果
examples/03_simt_api/05_troubleshooting/README.md 无问题
examples/03_simt_api/05_troubleshooting/README_en.md 无问题
examples/03_simt_api/05_troubleshooting/stack_overflow/CMakeLists.txt 无问题
examples/03_simt_api/05_troubleshooting/stack_overflow/README.md 无问题
examples/03_simt_api/05_troubleshooting/stack_overflow/README_en.md 无问题
examples/03_simt_api/05_troubleshooting/stack_overflow/acl.json 无问题
examples/03_simt_api/05_troubleshooting/stack_overflow/stack_overflow.asc 4 个问题(2×P2, 2×P3)
examples/03_simt_api/README.md 无问题
examples/03_simt_api/README_en.md 无问题

问题统计

  • P2: 2 个 — 线程索引越界检查缺失、越界判断使用 > 而非 >=
  • P3: 2 个 — output_bytes 使用了错误的 sizeof 类型、重复引入 #include <iostream>
  • P1/P0: 0 个

整体风险评估

中等偏低。所有发现的问题在当前的硬编码常量配置下均不会触发运行时错误(total_length=2048 恰好是 THREAD_COUNT=1024 的整数倍,sizeof(int32_t)==sizeof(float)==4),因此作为独立运行的样例是安全的。但这些问题存在于样例代码中,作为用户参考和复制的模板代码,simt_stack_overflow 缺少越界检查和不一致的 > 模式可能被传播到用户代码中,导致潜在的内存越界风险。建议在合入前修复 2 个 P2 问题以提升样例代码质量和安全性。

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

💬 仅评论

likedislike
不准确?
CANN-robotCANN-robot成员
7月16日 添加了label:cann-cla/yes
CANN-robot
CANN-robot成员
7月16日 评论:

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
examples ✅ munanhw, wulinyu (2/2) ✅ munanhw (1/1)

💡 Tip:

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

CLA Signature Pass

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

likedislike
此处折叠了175条消息 查看更多
CANN-robotCANN-robot成员
7月24日 删除了label:ci-pipeline-running
CANN-robotCANN-robot成员
7月24日 添加了label:ci-pipeline-passed
munanhw成员
7月24日 评论:

/approve

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