FPGA デバイスのバッファー転送 - 2019.2 Japanese

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

Document ID
UG1393
Release Date
2020-02-28
Version
2019.2 Japanese

ホスト プログラムとハードウェア カーネル間の送受信方法は、デバイス内のグローバル メモリを転送されるデータによって異なります。FPGA とデータの送受信を実行するには、 clCreateBuffer clEnqueueWriteBuffer および clEnqueueReadBuffer コマンドを使用します。

これを次のコード例に示します。

int host_mem_ptr[MAX_LENGTH]; // host memory for input vector
// Fill the memory input
for(int i=0; i<MAX_LENGTH; i++) {
  host_mem_ptr[i] = <... >   
}
cl_mem dev_mem_ptr = clCreateBuffer(context,  CL_MEM_READ_WRITE, 
                     sizeof(int) * number_of_words, NULL, NULL);

err = clEnqueueWriteBuffer(commands, dev_mem_ptr, CL_TRUE, 0,
      sizeof(int) * number_of_words, host_mem_ptr, 0, NULL, NULL);
重要: 現時点では、ホストからグローバル メモリまでのスループットを最大化するために 4 GB を上回るバッファーは使用できませんが、ザイリンクス ではバッファー サイズをできれば少なくとも 2 MB に抑えることをお勧めしています。

単純なアプリケーションの場合、このサンプル コードでホストからデバイス メモリにデータを問題なく転送できますが、パフォーマンスおよび詳細な制御を最大にするために従う必要のあるコーディング プラクティスも多くあります。