Every operator family, one line each. Every name links into the
API Reference for its signature — see Operations for why
this page does not repeat them.
Reading the tables: the Reach column gives the shortest spelling that works.
pl. means the name is available unqualified; pl.tile. / pl.tensor. mean the
operator is level-specific. Names marked (t) are tile-only operators re-exported at
top level for convenience — pl.loadispl.tile.load, not a dispatcher.
Floor (rem*) and truncating (fmod*) remainder. Tensor operands must match shape and dtype; tile-tile operands must match physical and valid shapes. A2/A3 supports FP32/INT32 for rem* and FP32 for fmod*; every A2/A3 INT32 rem* source/scalar value must be in the inclusive PTO-ISA domain [-2^24, 2^24]. A2/A3 scalar forms require provably positive valid extents. Tile rem / rems scratch must have provably sufficient physical and valid capacity (two / one rows and all source columns) and must not overlap a live source on A2/A3. A5 accepts the wider frontend dtype union. high_precision=True is FP32 tile-tile only (defined on A5, accepted but ignored on A2/A3)
Square root; reciprocal square root. high_precision= is tensor-only and raises on a Tile — at tile level precision is selected by passing the scratch tile to pl.tile.rsqrt(src, tmp)
Several reductions accept a tmp_tile argument. Passing one changes the reduction
strategy (binary tree versus sequential), which changes floating-point association — the
results differ within tolerance rather than being wrong. Reductions over a partially valid
tile depend on the pad value; see
Memory § valid shape.
Ascend950 MXFP8 block-32 dynamic quantization to FP8E4M3FN data plus FP8E8M0 scales (group_axis = PTOAS grpAxis). MXFP4 quant is out of scope for this release. May feed matmul_mx in one InCore mixed task through direct data+scale V2C transport (see types)
tmov_x2zz
pl. (t)
Ascend950 exponent X-to-ZZ layout conversion (UINT8). Workspace tmp is write-only; axis1 needs dst_rows/dst_cols for ZZ [M,G] over flat TQUANT exp. Typically used via quant_mx lowering rather than directly
A5 MX block-scale multiply — data tiles reaching the op must be FP8E4M3FN; the supported FP4-input form is FP4×FP8, with the FP4 lhs explicitly cast to FP8 first; native FP4×FP4 is unsupported
For phased GEMV accumulation, select producer phases with pl.AccPhase. A producer
ending with pl.AccPhase.Final must be paired with a store using pl.STPhase.Final:
Here lhs0, rhs0, lhs1, and rhs1 are preloaded tiles, and output is the
destination tensor.
Push and pop must be paired, and each pop must be matched by a tfree. The tutorial covering this is
Mixed kernels; the machine-level mechanics are in
TPUSH/TPOP and
ExpandMixedKernel.
FP16, FP32 (mesh; hard compile-time check); HOST ring: FP32 only (4-byte)
Mesh: O(N) remote traffic per step. Ring: O(N/P) remote traffic per step, 2(P-1) steps.
AllGather
pld.tensor.allgather
—
—
—
FP32 only (HOST builtin); any GM dtype (InCore)
Push-based. Input and target must be different buffers.
ReduceScatter
pld.tensor.reduce_scatter
—
Sum, Max, Min, Prod (InCore); Sum only (HOST builtin)
—
FP32 only (HOST builtin); any GM dtype (InCore)
Every rank stages all NR chunks before the call.
Broadcast
pld.tensor.broadcast
—
—
—
FP32 only (HOST builtin); any GM dtype (InCore)
Root stages data before the call.
All-to-All
pld.tensor.all_to_all
—
—
—
FP32 only (HOST builtin); any GM dtype (InCore)
Personalized exchange. Input and target must be different buffers.
Barrier
pld.tensor.barrier
—
—
—
—
Signal is INT32, single-shot per call.
Put
pld.tensor.put
—
—
None_ / Add
All GM dtypes
dst must be window-bound. Supports chunked + pipelined staging.
Get
pld.tensor.get
—
—
—
All GM dtypes
src must be window-bound. Supports chunked + pipelined staging.
Notify
pld.system.notify
AtomicAdd / Set
—
—
—
Side-effect-only signal deposit.
Wait
pld.system.wait
Eq / Ge
—
—
—
Side-effect-only signal block.
Deferred Wait
pld.system.defer_wait
Ge only
—
—
INT32 signal
Register a monotonic counter condition without spinning the AIV; Simpler keeps the ordinary waiter TaskId incomplete and later work uses ordinary deps=[wait_tid].