pypto_pro.language.system.bar_m#
产品支持情况#
Ascend 950PR/Ascend 950DT:支持
Atlas A3 训练系列产品/Atlas A3 推理系列产品:不支持
Atlas A2 训练系列产品/Atlas A2 推理系列产品:不支持
功能说明#
在M流水中执行屏障同步,等待M流水中此前下发的矩阵操作完成。
函数原型#
pypto_pro.language.system.bar_m() -> None
参数说明#
无。
约束说明#
仅支持在Cube区段中调用。
仅等待当前AI Core内M流水中此前下发的操作,不执行跨核同步。
返回值说明#
无。
调用示例#
import pypto_pro.language as pl
TILE = 64
@pl.jit(auto_mutex=True)
def bar_m_kernel(
a: pl.Tensor[[TILE, TILE], pl.DT_FP16],
b: pl.Tensor[[TILE, TILE], pl.DT_FP16],
out: pl.Tensor[[TILE, TILE], pl.DT_FP32],
):
a_l1 = pl.make_tile_group(
type=pl.TileType(shape=[TILE, TILE], dtype=pl.DT_FP16, target_memory=pl.MemorySpace.Mat),
addrs=0x0000, mutex_ids=[0])
b_l1 = pl.make_tile_group(
type=pl.TileType(shape=[TILE, TILE], dtype=pl.DT_FP16, target_memory=pl.MemorySpace.Mat),
addrs=0x2000, mutex_ids=[1])
a_l0a = pl.make_tile_group(
type=pl.TileType(shape=[TILE, TILE], dtype=pl.DT_FP16, target_memory=pl.MemorySpace.Left),
addrs=0x0000, mutex_ids=[2])
b_l0b = pl.make_tile_group(
type=pl.TileType(shape=[TILE, TILE], dtype=pl.DT_FP16, target_memory=pl.MemorySpace.Right),
addrs=0x0000, mutex_ids=[3])
c_l0c = pl.make_tile_group(
type=pl.TileType(shape=[TILE, TILE], dtype=pl.DT_FP32, target_memory=pl.MemorySpace.Acc),
addrs=0x0000, mutex_ids=[4])
with pl.section_cube():
cur_a = a_l1.current()
cur_b = b_l1.current()
al = a_l0a.current()
br = b_l0b.current()
ac = c_l0c.current()
pl.load(cur_a, a, [0, 0])
pl.load(cur_b, b, [0, 0])
pl.move(al, cur_a)
pl.move(br, cur_b)
pl.matmul(ac, al, br)
pl.system.bar_m()
pl.matmul(ac, al, br)
pl.store(out, ac, [0, 0])