pypto_pro.language.printf#

产品支持情况#

  • Ascend 950PR/Ascend 950DT:支持

  • Atlas A3 训练系列产品/Atlas A3 推理系列产品:不支持

  • Atlas A2 训练系列产品/Atlas A2 推理系列产品:不支持

功能说明#

在Kernel运行时按格式串打印标量值或指针,用于调试。格式串遵循C printf语法的受限子集。

该接口通过设备侧打印机制输出,具体查看位置由运行环境的CANN日志配置决定。printf运行在S(标量)流水上,有显著运行时开销,仅用于调试,生产环境应移除。

函数原型#

pypto_pro.language.printf(
    format_str: str,
    *args,
    loc: bool = False,
) -> None

参数说明#

参数

输入/输出

说明

format_str

输入

格式串,必须是编译时常量字符串,不能是运行时变量。
支持%d/%i(有符号整数)、%u(无符号整数)、%x(十六进制)、%f(浮点)和%p(指针)。不支持flags、宽度、精度和长度修饰符。
不支持的conversion:%%(百分号本身)、%s(字符串)、%c(字符)。

*args

输入

要打印的标量值或Ptr指针,数量和类型须与格式串中的格式说明符匹配。支持Python int、Python float、Python bool以及Kernel标量表达式;使用%p时还支持Ptr指针。
%d/%i:接受有符号整数和DT_BOOL,拒绝无符号整数
%u:接受无符号整数和DT_BOOL,拒绝有符号整数
%x:接受无符号整数,拒绝有符号整数和DT_BOOL
%f:仅接受DT_FP32,拒绝其他数据类型
%p:仅接受Ptr指针。

loc

输入

可选,是否在输出前打印源文件/行号,取值为True或False(默认)。为True时,在输出前打印调用位置的源文件和行号。

约束说明#

无。

返回值说明#

无。

调用示例#

import pypto_pro.language as pl
# 打印整数
pl.printf("flag=%d, offset=%d\n", flag, offset)

# 打印浮点(仅 FP32)
pl.printf("value=%f\n", value_f32)

# 打印十六进制
pl.printf("addr=0x%x\n", addr_u32)

# 纯文本(无参数)
pl.printf("reached checkpoint A\n")

# 带源码位置
pl.printf("debug: i=%d\n", i, loc=True)

示例输出:

调用

输出(假设flag = 1, offset = 32, value_f32 = 3.14, addr_u32 = 0x1234, i = 5)

pypto_pro.language.printf(“flag=%d, offset=%d\n”, flag, offset)

flag=1, offset=32

pypto_pro.language.printf(“value=%f\n”, value_f32)

value=3.140000

pypto_pro.language.printf(“addr=0x%x\n”, addr_u32)

addr=0x1234

pypto_pro.language.printf(“reached checkpoint A\n”)

reached checkpoint A

pypto_pro.language.printf(“debug: i=%d\n”, i, loc=True)

debug: i=5(loc = True时额外附带源码位置)