已开启
[Requirement|需求建议]: 支持 ascendc_assert 消息形式在 SIMT pure/mixed 及 aclnn 场景下输出用户自定义消息 #1655
wulinyu创建于  18 天前
wulinyu成员
18 天前 创建

Backgroud(背景信息)

当前 ascendc_assert 消息形式在 AICore 断言通道已可用,但 SIMT 编程模型下虽然函数签名已存在,格式串与变长实参会被丢弃并退化为无消息形式,断言失败时无法输出用户自定义上下文信息。

本需求面向 ascend950pr_9599(dav-3510),实现 SIMT 下 ascendc_assert(条件表达式, 格式串, 变长实参) 的消息形式,覆盖 pure 与 mixed 两种形态,以及通过 aclnn 两段式接口由 runtime 拉起 kernel 的场景。

CPU debug 行为保持不变:消息形式继续退化为无消息形式,仅输出断言条件文本;__simd_vf__ 通道不在本需求范围内。

Origin(信息来源)

AscendC SIMT API 能力补齐需求,来源于 SIMT 断言能力与 AICore 断言通道行为对齐需求。

Benefit / Necessity (价值/作用)

  • SIMT 断言失败时可输出用户自定义消息及格式化实参,提升问题定位效率。
  • 统一直接 launch 与 aclnn 调用场景下的断言行为。
  • 保持无消息形式及 CPU debug 既有行为不变。
  • 在打印缓冲未配齐时安全退化,避免 runtime 拉起场景崩溃。

Design(设计方案)

  1. 修改 impl/utils/debug/asc_printf_simt_impl.h:增加按指定字节数写入字符串、断言头前缀长度计算、断言头与用户格式串连续布局及数据写入,并增加断言消息形式入口;保持无消息路径不变。
  2. 修改 impl/utils/debug/asc_assert_simt_impl.h:pure 与 mixed 形态的两个 __assert_fail_msg 重载调用消息入口并在写入后 trap,不再丢弃格式串及变长实参。
  3. 保持 include/utils/debug/asc_assert.h 不变,CPU debug 下继续退化为无消息形式。
  4. 设备侧支持头部实参与用户实参的正确排列、标量及字符串实参、8 字节对齐、warp 内不同长度消息、环形缓冲环回及空间不足等待;缓冲未配齐时跳过输出但继续终止流程。
  5. 失败路径写入完成后执行内存屏障、工作项同步并触发 trap。
  6. 在 tests/api/simt_api/ascend950pr_9599/ 增加覆盖 pure/mixed、aclnn、条件成立/失败、三类格式串、多线程与线程发散、缓冲未配齐及 CPU debug 退化行为的 UT。

验收标准

  • 断言失败记录同时包含断言头和正确格式化的用户消息。
  • 支持直调、aclnn 等场景。
  • 失败后不继续执行后续语句;条件成立时无输出且正常完成。
  • 无消息形式既有行为不变;CPU debug 编译运行行为不变。
likedislike
Wwulinyu成员
18 天前 添加了label:requirement
Wwulinyu成员
16 天前 修改了issue 的描述
Wwulinyu成员
16 天前 关联了pull request:补齐ascend_assert接口的SIMT实现
wulinyu成员
14 天前 评论:

需求已在开发中,预计930交付

likedislike