This document is relevant for: Trn2, Trn3
nki.isa.VirtualRegister#
- class nki.isa.VirtualRegister[source]#
A virtual register on engine.
Allocated via
nisa.register_alloc()and manipulated vianisa.register_move(),nisa.register_load(),nisa.register_store().Virtual registers represent registers on engine and are used for various APIs such loading and storing constants from tensors, as the return value of
nki.collectiveandnki.isaAPIs, and for dynamic addressing.In addition to NKI APIs, virtual registers can be used to represent dynamic loop bounds for for loops using dynamic_range, and while loops.
import nki.language as nl import nki.isa as nisa # Using a register in a dynamic for loop. reg = nisa.register_alloc(5) for _ in nl.dynamic_range(reg): tile = nl.load(input_tensor[0:128, 0:512]) result = nl.multiply(tile, tile) nl.store(out_tensor[0:128, 0:512], result)
import nki.language as nl import nki.isa as nisa # Using a register in a dynamic while loop. cond_sb = nl.ndarray((1, 1), dtype=nl.int32, buffer=nl.sbuf) nisa.dma_copy(dst=cond_sb, src=...) # Load condition into register reg = nisa.register_alloc() nisa.register_load(reg, cond_sb) while reg: ... nisa.dma_copy(dst=cond_sb, src = ...) nisa.register_load(reg, cond_sb)
Methods
This document is relevant for: Trn2, Trn3