メールボックスの使用 - 2022.1 日本語

Vitis 統合ソフトウェア プラットフォームの資料: アプリケーション アクセラレーション開発 (UG1393)

Document ID
UG1393
Release Date
2022-05-25
Version
2022.1 日本語

自動再起動カーネルの主な利点は、ホスト アプリケーションと頻繁にやり取りしたり、ソフトウェア制御することせずに、データ駆動カーネルとして半自立的に動作することです。ただし、カーネルの自動再起動は、メールボックスを使用すると、半同期にもできます。メールボックスは、非同期、ノンブロッキング、安全な方法でホスト アプリケーションとデータを交換する機能です。ソフトウェアで制御されるカーネルの場合、カーネルは呼び出しと戻り値の C セマンティクスに従います。入力引数はカーネル実行の開始時に読み込まれ、出力引数は各カーネル実行の終了時に書き出されます。ただし、自動再起動カーネルを使用すると、カーネルがハードウェアで管理され、フリーランニング カーネル のパフォーマンス上の利点の多くが提供されます。したがって、ホスト コードでカーネルが 1 度起動されると、明示的な停止があるまで自動的に再起動されます。ホスト コードは、カーネルのステータスをクエリして、指定の後に実際に実行がいつ終了したかを判断することもできます。ホスト アプリケーションと自動再起動カーネルは、次の通信プロトコルを使用します。

  • ホストからカーネルに引数の値を渡すため、メールボックスはダブルバッファの s_axilite マップ レジスタのセットをインプリメントし、ホスト コードによるノンブロッキング通信と一貫した入力の受け渡し、およびカーネルによる出力の受け渡しが問題なくできるようにします。
  • ホスト コードは、入力引数に書き込むたびに、ホスト側のコピーを変更します。ハードウェアで実行されるカーネルは、この変更を認識しません。ホスト コードがメールボックスの書き込みを要求すると、次にカーネルが認識したレジスタのコピーを自動的に再起動したときに、そのコピーが常に更新されるようになります。したがって、ホスト コードは任意の数の引数を任意の順序で書き込むことができます。カーネルは、ホスト コードがメールボックスの書き込みを要求してカーネルが再起動するまでこれらの更新を認識しません。
    ヒント: いくつかの引数が s_axilite レジスタ ファイルにマップされた配列である場合、配列全体を連続したメールボックス書き込みの間に書き込む必要があります。これは、配列がピンポン バッファとしてインプリメントされるためです。
  • カーネルがカーネル側のレジスタに書き込み、メールボックスの読み出しを要求した場合も、同じプロセスが出力側で発生します。次回カーネルが実行されると、s_axilite のマップされた出力引数の値が更新され、ホスト コードは必要に応じてそれらを読み出すことができます。

このため、ホスト アプリケーションには次の基準があります。

  • ソフトウェア制御カーネルの場合のように、カーネル実行時の入力データの提供、出力データの最終的な収集はしません。
  • 一部のカーネル入力パラメーター (配線テーブルなど) の設定や更新、カーネル計算のステータスのチェックなどに関与します。通常、この半同期操作は、ホストとカーネル間の通信速度が固定されていない状態で実行されます。
  • ホスト アプリケーションがハードウェア カーネルに送信する新しいパラメーター セットを持っている場合、ハードウェア カーネルがどの計算をしているかに関係なく、そのパラメーター セットが送信されます。ホスト アプリケーションがハードウェア カーネルのステータスをチェックする必要がある場合、ハードウェアがどの計算をしているか関係なく、チェックがされます。パラメーターの更新とステータス チェックがハードウェアに対して一貫して実行されるだけで十分です。