已关闭
【AscendC CAPI社区任务】asc_copy_l12l0b_transpose接口b32场景缺少k_step约束示例导致L1越界风险 #1423
leecyang创建于  29 天前关闭于  1 天前
leecyang
leecyang
29 天前 创建

问题描述

在使用 Ascend C C API 开发 Cube-Core MatMul 算子过程中,发现 asc_copy_l12l0b_transpose 接口关于 b32 数据搬运场景的约束说明不足,容易导致 Local Memory 越界风险。

问题现象

相关文档:asc_copy_l12l0b_arch_3510.md 中说明:

数据位宽为32时,k_step必须是2的倍数。

但是当前说明未给出对应的 L1 Buffer 分配示例。

实际开发过程中:

矩阵参数:

N = 70
C0 = 8

按照:ceil_align(N, C0) 计算得到:72列 ,并按照72列大小申请 L1 Buffer。

但是由于 b32 场景:k_step = 9 需要向上调整为:k_step = 10 ,因此实际搬运访问:10 × 8 = 80列 而非72列。

导致:

  • 实际访问80列数据;
  • L1 Buffer仅按照72列申请;
  • 存在越界读取风险。

该问题不一定直接导致计算结果错误,因为多读取的数据可能会被 Fixpipe 裁剪,因此较难定位。

期望行为

建议接口文档增加明确说明:

对于 b32 数据类型:

  1. k_step需要满足偶数约束;
  2. Source Buffer申请空间需要按照:k_step × C0 进行计算;而不是按照原始矩阵宽度:ceil_align(N,C0) 分配。

建议增加完整示例:

N=70
C0=8
k_step=10
L1 Buffer宽度=80

避免开发者出现潜在越界。

影响范围

影响使用 Cube-Core 数据搬运 API 开发矩阵计算类算子的开发者。

开发环境

项目 信息
芯片 Ascend950PR
SoC dav-3510
CANN版本 9.1.0-beta.3
likedislike
lihuaichao成员
29 天前 评论:

您好,相关问题我们已经收到了,将在确认后向您反馈~

likedislike
Llihuaichao成员
29 天前 将 haipingmao 设为负责人
maohp_hwmaohp_hw成员
20 天前 将 pengcheng1024 设为负责人
maohp_hw
maohp_hw成员
15 天前 评论:

相关问题正在合入中

likedislike
maohp_hwmaohp_hw成员
9 天前 移除了负责人 haipingmao
pengcheng1024成员
4 天前 评论:

感谢您的关注,文档相关的约束说明已合入,对应的样例也在补充中

likedislike
pengcheng1024成员
1 天前 评论:

对应样例已合入,https://gitcode.com/cann/asc-devkit/pull/5460 此issuse将会关闭,后续有问题持续沟通,感谢关注

likedislike
Ppengcheng1024成员
1 天前 issue状态由 进行中 改变为 已完成
Ppengcheng1024成员
1 天前 关闭了 issue
CANN-robotCANN-robot成员
1 天前 添加了label:resolved