シングル/ダブルバッファ
single_buffer.pyのデザインは、Object FIFO of_inを使用してmy_workerの出力をmy_worker2に転送し、Object FIFO of_outを使用してmy_worker2の出力を外部メモリに転送します。of_inの深さは1で、以下の図に示すように、2つのWorker間の単一バッファを記述しています。
注意: 上の図は、Workerが既に
ComputeTile2とComputeTile3にマッピングされていることを前提としています。ただし、これが唯一可能なマッピングではなく、Workerを作成する際、その配置はコンパイラに任せることができます。
このデザインのプロデューサおよびコンシューマプロセスの両方が、些細なタスクを持っています。my_workerで実行されているプロデューサプロセスは、単一バッファをacquireし、消費のためにreleaseする前にそのすべてのエントリに1を書き込みます。my_worker2で実行されているコンシューマプロセスは、of_inから単一バッファとof_outから単一バッファをacquireし、入力Object FIFOから出力Object FIFOにデータをコピーし、他のプロセスのために両方のオブジェクトをreleaseします。
このデザインでデータ転送にダブルバッファ(またはピンポンバッファ)を使用するには、ユーザーはObject FIFOの深さを2に設定するだけです。Object FIFOの低レベル化がピンバッファとポンバッファの間を適切に循環させるため、他の変更は必要ありません。深さを変更するには、ユーザーは次のように記述する必要があります:
of_in = ObjectFifo(data_ty, name="in", depth=2) # ダブルバッファ
of_out = ObjectFifo(data_ty, name="out", depth=2) # ダブルバッファ
この変更により、以下の図に示すように、Object FIFOの利用可能なリソースの数が効果的に増加します:
programming_examplesで利用可能なすべての例には、このデータ移動パターンが含まれています。
このデザインをコンパイル、実行、テストするには、次のコマンドを使用できます:
make
make run
このデザインの明示的に配置されたレベルのIRONプログラミングは、single_buffer_placed.pyで利用できます。次のコマンドでコンパイル、実行、テストできます:
env use_placed=1 make
make run
注意: より詳細な情報については、公式ドキュメントを参照してください。