aiecompiler
は、各メモリ接続に必要な数のバッファーを自動的に割り当てます。次のように割り当てられます。
- ルックアップ テーブルは、読み出し専用でカーネルのプライベート テーブルと想定されるため、常にシングル バッファーとして割り当てられます。ルックアップ テーブルへのアクセスは排他的であると想定されるため、ルックアップ テーブルへのアクセスを同期させるためのロックは必要ありません。
- プロデューサー カーネルとコンシューマー カーネルが異なるプロセッサにマップされる場合や、プロデューサーまたはコンシューマーが DMA である場合は、バッファー接続には通常ダブル バッファーが割り当てられます。これにより、2 つのエージェントが、2 つのロックによるピンポン同期を使用してパイプライン方式で動作できます。
aiecompiler
は、この同期をそれぞれのプロセッサのmain
関数内に自動的に生成します。 - プロデューサー カーネルとコンシューマー カーネルが同じプロセッサにマップされる場合、バッファー接続にはバッファーが 1 つだけ割り当てられます。カーネルは順次実行されるため、ロックによる同期は必要ありません。
- ランタイム パラメーターの接続には、ダブル バッファー (デフォルト) と、次にアクセスするバッファーを選択するセレクター ワードを割り当てることができます。
ランタイム パラメーター接続にも、シングル バッファーを割り当てることができます。バッファー接続には、ダブル バッファーの代わりにシングル バッファー同期のみを使用する方が望ましい場合があります。ローカル データ メモリが貴重であり、データ転送にシングル バッファーを使用してもパフォーマンス上のペナルティが問題とならない場合に有益です。これは、single_buffer(port<T>&)
制約を使用して達成できます。
single_buffer(first.in[0]); //For buffer input or RTP input
single_buffer(first.inout[0]); //For RTP output