assert
产 品 支 持 情 况
功 能 说 明
该 接 口 实 现AI CPU算 子Kernel调 试 场 景 下 的assert断 言 功 能。
算 子 执 行 中,如 果assert内 部 条 件 判 断 不 为 真,则 输 出assert条 件、触 发 文 件 名、行 号 等 信 息。
需 要 包 含 的 头 文 件
#include "aicpu_api.h"
函 数 原 型
assert(expr)
参 数 说 明
assert断 言 是 否 终 止 程 序 的 条 件。为true则 程 序 继 续 执 行,为false则 终 止 程 序。 |
返 回 值 说 明
无
约 束 说 明
该 接 口 仅 支 持 通 过<<<...>>>调 用,并 在 异 构 编 译 场 景 使 用。
kernel开 发 不 要 包 含 系 统 的assert.h,会 导 致 宏 定 义 冲 突。
assert接 口 调 用 形 式 与C语 言 一 致,不 需 要 使 用AscendC命 名 空 间。
该 接 口 使 用Dump功 能,所 有 使 用Dump功 能 的 接 口 在 每 个 核 上Dump的 数 据 总 量 不 可 超 过1M。请 开 发 者 自 行 控 制 待 打 印 的 内 容 数 据 量,超 出 则 不 会 打 印。
使 用 该 接 口 时,若 采 用bisheng命 令 行 编 译,开 发 者 需 要 手 动 链 接 相 关 的 静 态 库;而 使 用CMake编 译 时,框 架 会 自 动 处 理 链 接 问 题,无 需 开 发 者 额 外 关 注。具 体 编 译 命 令 如 下:通 过--cce-aicpu-laicpu_api为Device链 接libaicpu_api.a,通 过--cce-aicpu-L指 定libaicpu_api.a的 库 路 径。
Text$bisheng -O2 foo.aicpu --cce-aicpu-L${INSTALL_DIR}/lib64/device/lib64 --cce-aicpu-laicpu_api -I${INSTALL_DIR}/include/ascendc/aicpu_api -c -o foo.aicpu.o${INSTALL_DIR}请 替 换 为CANN软 件 安 装 后 文 件 存 储 路 径。以root用 户 安 装 为 例,安 装 后 文 件 默 认 存 储 路 径 为:/usr/local/Ascend/cann。
调 用 示 例
在 算 子kernel侧 实 现 代 码 中 需 要 增 加 断 言 的 地 方 使 用assert检 查 代 码 示 例 如 下:
int assertFlag = 10;
// 断 言 条 件
assert(assertFlag == 12);
程 序 运 行 时 会 触 发assert,打 印 效 果 如 下:
[ASSERT]` assertFlag == 12 ' at /home/.../test.cpp:36