pypto_pro.language.partadd#
产品支持情况#
Ascend 950PR&950DT系列产品:支持
Atlas A3系列产品:不支持
Atlas A2系列产品:不支持
功能说明#
对两个源Tile的有效区域执行逐元素加法。某一位置在两个源Tile中均有效时,输出两者之和;仅在一个源Tile中有效时,复制该源Tile对应位置的数据。
函数原型#
pypto_pro.language.partadd(out: Tile, src0: Tile, src1: Tile) -> None
参数说明#
参数 |
输入/输出 |
说明 |
|---|---|---|
out |
输出 |
目标二维UB Tile,用于保存计算结果。支持的数据类型为DT_INT8、DT_UINT8、DT_INT16、DT_UINT16、DT_INT32、DT_UINT32、DT_INT64、DT_UINT64、DT_FP16、DT_BF16和DT_FP32。 |
src0 |
输入 |
第一个源二维UB Tile。支持的数据类型与out相同。 |
src1 |
输入 |
第二个源二维UB Tile。支持的数据类型与out相同。 |
返回值说明#
无。
约束说明#
out、src0和src1的物理Shape和数据类型须一致。
两个源Tile中至少一个的有效Shape须与out的有效Shape一致,另一个源Tile的有效行数和有效列数均不得超过out。
通过较小的有效Shape指定部分计算区域,不支持使用较小的物理Shape指定部分计算区域。
out的有效区域为空时,接口直接返回。
调用示例#
import pypto_pro.language as pl
M, N = 64, 128
@pl.jit(auto_mutex=True)
def partadd_kernel(
x: pl.Tensor[[M, N], pl.DT_FP16],
y: pl.Tensor[[M, N], pl.DT_FP16],
z: pl.Tensor[[M, N], pl.DT_FP16],
):
tile_type = pl.TileType(
shape=[64, 128], dtype=pl.DT_FP16, target_memory=pl.MemorySpace.Vec,
valid_shape=[-1, -1])
tile_a = pl.make_tile_group(type=tile_type, addrs=0x0000, mutex_ids=[0])
tile_b = pl.make_tile_group(type=tile_type, addrs=0x8000, mutex_ids=[1])
tile_c = pl.make_tile_group(type=tile_type, addrs=0x10000, mutex_ids=[2])
with pl.section_vector():
cur_a = tile_a.current()
cur_b = tile_b.current()
cur_c = tile_c.current()
pl.set_validshape(cur_a, [64, 128])
pl.load(cur_a, x, [0, 0])
pl.set_validshape(cur_b, [32, 128])
pl.load(cur_b, y, [0, 0])
pl.set_validshape(cur_c, [64, 128])
pl.partadd(cur_c, cur_a, cur_b)
pl.store(z, cur_c, [0, 0])
结果示例如下:
输入数据x(第0、1、30、31、32、33行):[[1 1.25 1.5 1.75 2 2.25 2.5 2.75 3 3.25 3.5 3.75 4 4.25 4.5 4.75 ...], [33 33.25 33.5 33.75 34 34.25 34.5 34.75 35 35.25 35.5 35.75 36 36.25 36.5 36.75 ...], [961 961 961.5 962 962 962 962.5 963 963 963 963.5 964 964 964 964.5 965 ...], [993 993 993.5 994 994 994 994.5 995 995 995 995.5 996 996 996 996.5 997 ...], [1.025000e+03 1.025000e+03 1.026000e+03 1.026000e+03 1.026000e+03 1.026000e+03 1.026000e+03 1.027000e+03 1.027000e+03 1.027000e+03 1.028000e+03 1.028000e+03 1.028000e+03 1.028000e+03 1.028000e+03 1.029000e+03 ...], [1.057000e+03 1.057000e+03 1.058000e+03 1.058000e+03 1.058000e+03 1.058000e+03 1.058000e+03 1.059000e+03 1.059000e+03 1.059000e+03 1.060000e+03 1.060000e+03 1.060000e+03 1.060000e+03 1.060000e+03 1.061000e+03 ...]]
输入数据y(第0、1、30、31、32、33行):[[10 10.5 11 11.5 12 12.5 13 13.5 14 14.5 15 15.5 16 16.5 17 17.5 ...], [74 74.5 75 75.5 76 76.5 77 77.5 78 78.5 79 79.5 80 80.5 81 81.5 ...], [1.930000e+03 1.930000e+03 1.931000e+03 1.932000e+03 1.932000e+03 1.932000e+03 1.933000e+03 1.934000e+03 1.934000e+03 1.934000e+03 1.935000e+03 1.936000e+03 1.936000e+03 1.936000e+03 1.937000e+03 1.938000e+03 ...], [1.994000e+03 1.994000e+03 1.995000e+03 1.996000e+03 1.996000e+03 1.996000e+03 1.997000e+03 1.998000e+03 1.998000e+03 1.998000e+03 1.999000e+03 2.000000e+03 2.000000e+03 2.000000e+03 2.001000e+03 2.002000e+03 ...], [2.058000e+03 2.058000e+03 2.060000e+03 2.060000e+03 2.060000e+03 2.060000e+03 2.060000e+03 2.062000e+03 2.062000e+03 2.062000e+03 2.064000e+03 2.064000e+03 2.064000e+03 2.064000e+03 2.064000e+03 2.066000e+03 ...], [2.122000e+03 2.122000e+03 2.124000e+03 2.124000e+03 2.124000e+03 2.124000e+03 2.124000e+03 2.126000e+03 2.126000e+03 2.126000e+03 2.128000e+03 2.128000e+03 2.128000e+03 2.128000e+03 2.128000e+03 2.130000e+03 ...]]
输出数据z(第0、1、30、31、32、33行):[[11 11.75 12.5 13.25 14 14.75 15.5 16.25 17 17.75 18.5 19.25 20 20.75 21.5 22.25 ...], [107 107.75 108.5 109.25 110 110.75 111.5 112.25 113 113.75 114.5 115.25 116 116.75 117.5 118.25 ...], [2.892000e+03 2.892000e+03 2.892000e+03 2.894000e+03 2.894000e+03 2.894000e+03 2.896000e+03 2.896000e+03 2.896000e+03 2.896000e+03 2.898000e+03 2.900000e+03 2.900000e+03 2.900000e+03 2.902000e+03 2.904000e+03 ...], [2.988000e+03 2.988000e+03 2.988000e+03 2.990000e+03 2.990000e+03 2.990000e+03 2.992000e+03 2.992000e+03 2.992000e+03 2.992000e+03 2.994000e+03 2.996000e+03 2.996000e+03 2.996000e+03 2.998000e+03 3.000000e+03 ...], [1.025000e+03 1.025000e+03 1.026000e+03 1.026000e+03 1.026000e+03 1.026000e+03 1.026000e+03 1.027000e+03 1.027000e+03 1.027000e+03 1.028000e+03 1.028000e+03 1.028000e+03 1.028000e+03 1.028000e+03 1.029000e+03 ...], [1.057000e+03 1.057000e+03 1.058000e+03 1.058000e+03 1.058000e+03 1.058000e+03 1.058000e+03 1.059000e+03 1.059000e+03 1.059000e+03 1.060000e+03 1.060000e+03 1.060000e+03 1.060000e+03 1.060000e+03 1.061000e+03 ...]]
第0、1、30、31行位于src1的有效区域,输出为x+y;第32、33行位于有效区域之外,输出保持为x。