printf
产 品 支 持 情 况
功 能 说 明
头 文 件 路 径 为:"basic_api/kernel_operator_dump_tensor_intf.h"。
该 接 口 提 供CPU域/NPU域 调 试 场 景 下 的 格 式 化 输 出 功 能。
在 算 子kernel侧 实 现 代 码 中 需 要 输 出 日 志 信 息 的 地 方 调 用printf接 口 打 印 相 关 内 容。样 例 如 下:
C++
#include "kernel_operator.h"
AscendC::printf("fmt string %d\n", 0x123);
注 意
该 接 口 主 要 用 于 调 试 分 析,开 启 后 会 对 算 子 性 能 产 生 一 定 影 响,通 常 在 调 试 阶 段 使 用,生 产 环 境 建 议 关 闭。
默 认 情 况 下,调 用 该 接 口 就 会 打 印 相 关 内 容,开 发 者 可 以 参 考关 闭ASCENDC_DUMP说 明,按 需 关 闭 该 接 口 功 能。
函 数 原 型
C++
template <class... Args>
__aicore__ inline void printf(__gm__ const char* fmt, Args&&... args)
参 数 说 明
表 参 数 说 明
| 参 数 名 称 | 输 入/输 出 | 描 述 |
|---|---|---|
| fmt | 输 入 | 格 式 控 制 字 符 串,包 含 两 种 类 型 的 对 象:普 通 字 符 和 转 换 说 明。 •普 通 字 符 将 原 样 不 动 地 打 印 输 出。 •转 换 说 明 并 不 直 接 输 出 而 是 用 于 控 制printf中 参 数 的 转 换 和 打 印。每 个 转 换 说 明 都 由 一 个 百 分 号 字 符(%)开 始,以 转 换 说 明 结 束,从 而 说 明 输 出 数 据 的 类 型。 •支 持 的 转 换 类 型 包 括: ▪%d / %i:输 出 十 进 制 数,支 持 打 印 的 数 据 类 型:bool、int8_t、int16_t、int32_t、int64_t。 ▪%f:输 出 实 数,支 持 打 印 的 数 据 类 型:half、float、bfloat16。 ▪%x:输 出 十 六 进 制 整 数,支 持 打 印 的 数 据 类 型:int8_t、uint8_t、int16_t、uint16_t、int32_t、uint32_t、int64_t、uint64_t。 ▪%s:输 出 字 符 串。 ▪%u:输 出unsigned类 型 数 据,支 持 打 印 的 数 据 类 型:bool、uint8_t、uint16_t、uint32_t、uint64_t。 ▪%p:输 出 指 针 地 址。 注 意: •上 文 列 出 的 数 据 类 型 是NPU域 调 试 支 持 的 数 据 类 型,CPU域 调 试 时,支 持 的 数 据 类 型 和C/C++规 范 保 持 一 致。 •在 转 换 类 型 为%x,即 输 出 十 六 进 制 整 数 时,NPU域 上 的 输 出 为64位,CPU域 上 的 输 出 为32位。 |
| args | 输 入 | 附 加 参 数,个 数 和 类 型 可 变 的 参 数 列 表:根 据 不 同 的fmt字 符 串,函 数 可 能 需 要 一 系 列 的 附 加 参 数,每 个 参 数 包 含 了 一 个 要 被 插 入 的 值,替 换 了fmt参 数 中 指 定 的 每 个%标 签。参 数 的 个 数 应 与%标 签 的 个 数 相 同。 |
返 回 值 说 明
无
约 束 说 明
可 以 参 考utils目 录SIMD约 束 下 的printf说 明。
调 用 示 例
C++
#include "kernel_operator.h"
// 整 型 打 印:
AscendC::printf("fmt string %d\n", 0x123);
// 浮 点 型 打 印:
float a = 3.14;
AscendC::printf("fmt string %f\n", a);
// 指 针 打 印:
int b = 0x123;
int *c = &b;
AscendC::printf("TEST %p\n", c);
NPU模 式 下,程 序 运 行 时 打 印 效 果 如 下:
fmt string 291
fmt string 291
fmt string 3.140000
fmt string 3.140000
TEST 0x357f9c
TEST 0x357f9c