pypto_pro.language.axpy#
产品支持情况#
Ascend 950PR/Ascend 950DT:支持
Atlas A3 训练系列产品/Atlas A3 推理系列产品:不支持
Atlas A2 训练系列产品/Atlas A2 推理系列产品:不支持
功能说明#
向量标量乘加:out[i] = alpha * src[i] + out[i]。将源Tile每个元素乘以标量alpha后累加到目标Tile。
函数原型#
pypto_pro.language.axpy(out: Tile, src: Tile, alpha: Scalar) -> None
参数说明#
参数 |
输入/输出 |
说明 |
|---|---|---|
out |
输入/输出 |
目的操作数,Tile类型,存储空间为UB,数据类型为DT_FP16或DT_FP32,数据类型、形状和有效形状须与src一致。运算前保存累加初值,运算后保存计算结果。 |
src |
输入 |
源操作数,Tile类型,存储空间为UB,数据类型为DT_FP16或DT_FP32,形状和有效形状须与out一致。 |
alpha |
输入 |
缩放系数,float或Scalar类型,可为编译期常量或运行时浮点Scalar,数据类型必须与src的数据类型一致。 |
约束说明#
out和src必须采用行主序排布。
返回值说明#
无。
调用示例#
计算y = 2.0 × x + y#
import pypto_pro.language as pl
ALPHA = 2.0
@pl.jit(auto_mutex=True)
def axpy_kernel(
x: pl.Tensor[[64, 64], pl.DT_FP32],
y: pl.Tensor[[64, 64], pl.DT_FP32],
):
tt = pl.TileType(shape=[64, 64], dtype=pl.DT_FP32, target_memory=pl.MemorySpace.Vec)
tile_x_group = pl.make_tile_group(type=tt, addrs=0x0000, mutex_ids=[0])
tile_y_group = pl.make_tile_group(type=tt, addrs=0x4000, mutex_ids=[1])
with pl.section_vector():
tile_x = tile_x_group.current()
tile_y = tile_y_group.current()
pl.load(tile_x, x, [0, 0])
pl.load(tile_y, y, [0, 0])
pl.axpy(tile_y, tile_x, ALPHA)
pl.store(y, tile_y, [0, 0])
运行结果#
输入数据x:[[1 1.25 1.5 1.75 2 2.25 2.5 2.75 ...], [17 17.25 17.5 17.75 18 18.25 18.5 18.75 ...], [33 33.25 33.5 33.75 34 34.25 34.5 34.75 ...], [49 49.25 49.5 49.75 50 50.25 50.5 50.75 ...], ...]
输入数据y原始值:[[4 3.875 3.75 3.625 3.5 3.375 3.25 3.125 ...], [-4 -4.125 -4.25 -4.375 -4.5 -4.625 -4.75 -4.875 ...], [-12 -12.125 -12.25 -12.375 -12.5 -12.625 -12.75 -12.875 ...], [-20 -20.125 -20.25 -20.375 -20.5 -20.625 -20.75 -20.875 ...], ...]
输出数据y:[[6 6.375 6.75 7.125 7.5 7.875 8.25 8.625 ...], [30 30.375 30.75 31.125 31.5 31.875 32.25 32.625 ...], [54 54.375 54.75 55.125 55.5 55.875 56.25 56.625 ...], [78 78.375 78.75 79.125 79.5 79.875 80.25 80.625 ...], ...]