int[N] / float[N] / bool[N]#
产品支持情况#
Ascend 950PR/Ascend 950DT:支持
Atlas A3 训练系列产品/Atlas A3 推理系列产品:不支持
Atlas A2 训练系列产品/Atlas A2 推理系列产品:不支持
功能说明#
在TilingData类中声明定长同构数组字段。元素类型限定为int、float或bool,分别映射为IR类型INDEX、DT_FP32、BOOL。
数组字段在IR中表示为包含N个标量元素的嵌套Tuple。例如offsets: int[4]对应一个包含4个INDEX元素的Tuple字段。
函数原型#
int[N] # N 个 INDEX 元素
float[N] # N 个 FP32 元素
bool[N] # N 个 BOOL 元素
参数说明#
参数 |
输入/输出 |
说明 |
|---|---|---|
元素类型 |
输入 |
支持int、float和bool,分别映射为INDEX、DT_FP32和BOOL,不支持其他元素类型。 |
N |
输入 |
数组长度,取值范围为[1, 2048],必须直接写为整数常量。布尔值或变量不属于合法配置。 |
约束说明#
使用int[N]、float[N]或bool[N]标注时,文件开头须包含from future import annotations,使字段标注以字符串形式保留并由PyPTO解析。
运行时使用普通Python序列为数组字段赋值,序列长度必须与声明的N一致, 如下样例中的offsets:
@dataclass class MyTiling: m: int n: int offsets: int[4] tiling = MyTiling(m=64, n=128, offsets=[0, 64, 128, 192])
在Kernel中可通过下标访问数组元素,也可以先读取整个数组字段再访问。常量下标越界时编译报错;数组元素类型相同时,也支持使用运行时下标。
first_offset = tiling.offsets[0] offsets = tiling.offsets ### 支持先读取整个数组字段再访问 current_offset = offsets[index] ### 支持使用运行时下标 index
返回值说明#
返回指定元素类型和长度的定长数组。
调用示例#
在TilingData中声明并访问定长数组#
from __future__ import annotations
from dataclasses import dataclass
import pypto_pro.language as pl
@dataclass
class MyTiling:
m: int
n: int
offsets: int[4]
@pl.jit()
def kernel(
x: pl.Tensor[[64, 128], pl.DT_FP16],
out: pl.Tensor[[64, 128], pl.DT_FP16],
tiling: MyTiling,
):
m = tiling.m
n = tiling.n
first_offset = tiling.offsets[0]
...
传入TilingData实例#
tiling = MyTiling(m=64, n=128, offsets=[0, 64, 128, 192])
kernel(x, out, tiling)