• ワーカー関数と入出力を指定 • ランタイム定義 • カーネル起動 • 外部メモリとObject FIFOの間のデータ移動 • MLIR (LLVM中間表現)生成 • 最終的にMLIRからAIEバイナリ(xclbin)と 命令シーケンスを生成する • ホストプログラムから実行する ©︎ 2025 Adaptive Computing Research Initiative - ACRi 16 # (4) データ移動のためのObject FIFOを作成 of_in0 = iron.ObjectFifo(vec_type, name="in0") of_in1 = iron.ObjectFifo(vec_type, name="in1") of_out = iron.ObjectFifo(vec_type, name="out") # (5) ワーカー関数と入出力を指定してWorkerを作成 worker = iron.Worker( core_fn, [of_in0.cons(), of_in1.cons(), of_out.prod(), kernel], ) # (6) 実行時のAIEアレイとDRAMの間のデータ移動を定義 rt = iron.Runtime() with rt.sequence(vec_type, vec_type, vec_type) as (in0, in1, out): rt.start(worker) rt.fill(of_in0.prod(), in0) rt.fill(of_in1.prod(), in1) rt.drain(of_out.cons(), out, wait=True) # (7) リソースの配置を行いMLIRを生成 program = iron.Program(iron.device.NPU2(), rt) module = program.resolve_program(iron.placers.SequentialPlacer()) # (8) MLIRを出力 print(module)