Pull Request已成功合入, 合并人@CANN-robot
(感谢 ruoshuisixue 的贡献)变更摘要
此 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(场景名称映射)。


代码审查
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 |
💬 仅评论


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
/approveor/lgtm- Commenting
/approveimplies 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. 👍


描述
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!文档更新
类型标签