Skip to content
版 本

CheckLocalMemoryIA(ISASI)

产 品 支 持 情 况

产 品

是 否 支 持

Ascend 950PR/Ascend 950DT

x

Atlas A3 训 练 系 列 产 品/Atlas A3 推 理 系 列 产 品

Atlas A2 训 练 系 列 产 品/Atlas A2 推 理 系 列 产 品

Atlas 200I/500 A2 推 理 产 品

Atlas 推 理 系 列 产 品AI Core

Atlas 推 理 系 列 产 品Vector Core

x

Atlas 训 练 系 列 产 品

x

功 能 说 明

头 文 件 路 径 为:"basic_api/kernel_operator_common_intf.h"。 check设 定 范 围 内 的UB读 写 行 为,如 果 有 设 定 范 围 的 读 写 行 为 则 会 出 现EXCEPTION报 错,无 设 定 范 围 的 读 写 行 为 则 不 会 报 错。

函 数 原 型

C++
__aicore__ inline void CheckLocalMemoryIA(const CheckLocalMemoryIAParam& checkParams)

参 数 说 明

表 1 参 数 说 明

参 数 名 称输 入/输 出描 述
checkParams输 入用 于 配 置 对UB访 问 的 检 查 行 为,类 型 为CheckLocalMemoryIAParam。
具 体 定 义 请 参 考${INSTALL_DIR}/include/ascendc/basic_api/interface/kernel_struct_mm.h,${INSTALL_DIR}请 替 换 为CANN软 件 安 装 后 文 件 存 储 路 径。
参 数 说 明 请 参 考表2

表 2 CheckLocalMemoryIAParam结 构 体 内 参 数 说 明

参 数 名 称含 义
enableBit配 置 的 异 常 寄 存 器,取 值 范 围:enableBit∈[0,3],默 认 为0。
• 0:异 常 寄 存 器0。
• 1:异 常 寄 存 器1。
• 2:异 常 寄 存 器2。
• 3:异 常 寄 存 器3。
startAddrCheck的 起 始 地 址,32B对 齐,取 值 范 围:startAddr∈[0, 65535],默 认 值 为0。比 如,可 通 过LocalTensor.GetPhyAddr()/32来 获 取startAddr。
endAddrCheck的 结 束 地 址,32B对 齐,取 值 范 围:endAddr∈[0, 65535]。默 认 值 为0。
isScalarReadCheck标 量 读 访 问。
•false:不 开 启,默 认 为false。
•true:开 启。
isScalarWriteCheck标 量 写 访 问。
•false:不 开 启,默 认 为false。
•true:开 启。
isVectorReadCheck矢 量 读 访 问。
•false:不 开 启,默 认 为false。
•true:开 启。
isVectorWriteCheck矢 量 写 访 问。
•false:不 开 启,默 认 为false。
•true:开 启。
isMteReadCheck MTE读 访 问。
•false:不 开 启,默 认 为false。
•true:开 启。
isMteWriteCheck MTE写 访 问。
•false:不 开 启,默 认 为false。
•true:开 启。
isEnable是 否 使 能enableBit参 数 配 置 的 异 常 寄 存 器。
•false:不 使 能,默 认 为false。
•true:使 能。
reserved预 留 参 数。为 后 续 的 功 能 做 保 留,开 发 者 暂 时 无 需 关 注,使 用 默 认 值 即 可。

约 束 说 明

  • startAddr/endAddr的 单 位 是32B,check的 范 围 不 包 含startAddr,包 含endAddr,即(startAddr,endAddr]。
  • 每 次 调 用 完 该 接 口 需 要 进 行 复 位(配 置isEnable为false进 行 复 位)。
  • 操 作 数 地 址 对 齐 要 求 请 参 见通 用 地 址 对 齐 约 束

调 用 示 例

该 示 例check矢 量 写 访 问 是 否 在 设 定 的(startAddr, endAddr]范 围 内。当 前 示 例check到 矢 量 写 在 设 定 的 范 围 内,结 果 会 报 错(ACL_ERROR_RT_VECTOR_CORE_EXCEPTION)。

C++
AscendC::TPipe pipe;
AscendC::TQue<AscendC::TPosition::VECIN, 1> inQueueSrc0, inQueueSrc1;
AscendC::TQue<AscendC::TPosition::VECOUT, 1> outQueueDst;
pipe.InitBuffer(inQueueSrc0, 1, 512 * sizeof(half));
pipe.InitBuffer(inQueueSrc1, 1, 512 * sizeof(half));
pipe.InitBuffer(outQueueDst, 1, 512 * sizeof(half));
AscendC::LocalTensor<half> src0Local = inQueueSrc0.DeQue<half>();
AscendC::LocalTensor<half> src1Local = inQueueSrc1.DeQue<half>();
AscendC::LocalTensor<half> dstLocal = outQueueDst.AllocTensor<half>();
AscendC::CheckLocalMemoryIA({ 0, (uint32_t)(dstLocal.GetPhyAddr() / 32),(uint32_t)((dstLocal.GetPhyAddr() + 512 * sizeof(half)) / 32), false, false, false, true, false, false,
true });

免 责 声 明:本 站 内 容 由 asc-devkit 仓 master 分 支 自 动 编 译 生 成,属 于 持 续 开 发 版 本,可 能 存 在 缺 陷,仅 供 预 览 与 参 考。如 需 稳 定 及 商 用 资 料,请 查 阅 官 方 昇 腾 社 区