Skip to content
版 本

printf

产 品 支 持 情 况

产 品

是 否 支 持

Ascend 950PR/Ascend 950DT

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

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

Atlas 200I/500 A2 推 理 产 品

x

Atlas 推 理 系 列 产 品AI Core

x

Atlas 推 理 系 列 产 品Vector Core

x

Atlas 训 练 系 列 产 品

x

功 能 说 明

该 接 口 提 供AI CPU算 子Kernel调 试 场 景 下 的 格 式 化 输 出 功 能,默 认 将 输 出 内 容 解 析 并 打 印 在 屏 幕 上。

需 要 包 含 的 头 文 件

Text
#include "aicpu_api.h"

函 数 原 型

Text
void printf(const char* fmt, ...)

参 数 说 明

参 数 名

输 入/输 出

描 述

fmt

输 入

格 式 控 制 字 符 串,包 含 两 种 类 型 的 对 象:普 通 字 符 和 转 换 说 明。

  • 普 通 字 符 将 原 样 不 动 地 打 印 输 出。
  • 转 换 说 明 并 不 直 接 输 出 而 是 用 于 控 制printf中 参 数 的 转 换 和 打 印。每 个 转 换 说 明 都 由 一 个 百 分 号 字 符(%)开 始,以 转 换 说 明 结 束,从 而 说 明 输 出 数 据 的 类 型 。
    支 持 的 转 换 类 型 包 括:
    • %d / %i:输 出 十 进 制 数,支 持 打 印 的 数 据 类 型:bool/int8_t/int16_t/int32_t/int64_t
    • %f:输 出 实 数,支 持 打 印 的 数 据 类 型:float/half
    • %x:输 出 十 六 进 制 整 数,支 持 打 印 的 数 据 类 型:int8_t/int16_t/int32_t/int64_t/uint8_t/uint16_t/uint32_t/uint64_t
    • %s:输 出 字 符 串
    • %u:输 出unsigned类 型 数 据,支 持 打 印 的 数 据 类 型:bool/uint8_t/uint16_t/uint32_t/uint64_t
    • %p:输 出 指 针 地 址

...

输 入

附 加 参 数,个 数 和 类 型 可 变 的 参 数 列 表:根 据 不 同 的fmt字 符 串,函 数 可 能 需 要 一 系 列 的 附 加 参 数,每 个 参 数 包 含 了 一 个 要 被 插 入 的 值,替 换 了fmt参 数 中 指 定 的 每 个%标 签。参 数 的 个 数 应 与%标 签 的 个 数 相 同。

返 回 值 说 明

约 束 说 明

  • 该 接 口 仅 支 持 通 过<<<...>>>调 用,并 在 异 构 编 译 场 景 使 用。

  • 该 接 口 不 支 持 打 印 除 换 行 符 之 外 的 其 他 转 义 字 符。

  • 该 接 口 使 用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侧 实 现 代 码 中 需 要 输 出 日 志 信 息 的 地 方 调 用printf接 口 打 印 相 关 内 容。样 例 如 下:

Text
#include "aicpu_api.h"

// 整 型 打 印:
AscendC::printf("fmt string %d\n", 0x123);

// 浮 点 型 打 印:
float a = 3.14;
AscendC::printf("fmt string %f\n", a);

// 指 针 打 印:
int b = 10;
int *c = &b;
AscendC::printf("TEST %p\n", c);

程 序 运 行 时 打 印 效 果 如 下:

Text
fmt string 291
fmt string 3.140000
TEST 0xdfffd6fddd1c

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