L2からの分散
distribute_L2.pyのデザインは、Object FIFO of_inを使用して外部メモリからL2に24xi32テンソルとしてデータを持ち込みます。そこから、データはより小さな8xi32部分で3つのObject FIFOに分散されます。各Workerは、アクセスする3つのObject FIFOのどれであるかに基づいて、より大きなデータの異なる部分を受け取ります。
# ObjectFifosを使用したデータフロー
# 入力
of_offsets = [8 * worker for worker in range(n_workers)]
of_in = ObjectFifo(tile24_ty, name="in")
of_ins = (
of_in
.cons()
.split(
of_offsets,
obj_types=[tile8_ty] * n_workers,
names=[f"in{worker}" for worker in range(n_workers)],
)
)
すべてのWorkerは、それぞれの入力Object FIFOから消費するために1つのオブジェクトをacquireし、そのすべてのエントリに1を追加し、オブジェクトをreleaseするという同じプロセスを実行しています。join designは、データが外部メモリに送り返され、テストされる方法を示しています。
このデザインをコンパイルするには、次のコマンドを使用できます:
make
このデザインの明示的に配置されたレベルのIRONプログラミングは、distribute_L2_placed.pyで利用できます。次のコマンドでコンパイルできます:
env use_placed=1 make
このデータ移動パターンを含む他の例は、programming_examples/matrix_multiplication/で利用できます。
注意: より詳細な情報については、公式ドキュメントを参照してください。