インテル® FPGA SDK for OpenCL™プロ・エディション: プログラミング・ガイド

ID 683846
日付 4/01/2019
Public
ドキュメント目次

8.2. エミュレーションに向けたチャネル・カーネル・コードの変更

エミュレーターは、カーネル間のチャネルをエミュレーションします。FPGAボードの入出力フィーチャーに接続するI/Oチャネルのエミュレーションはサポートしていません。 I/Oチャネルの読み書きを行うチャネルを持つアプリケーションをエミュレーションするには、カーネルを変更し、I/Oチャネルに代わる読み取りまたは書き込みチャネルを追加します。また、そのチャネルを使用するソースコードを条件付きにします。
インテル® FPGA SDK for OpenCL™ は、EMULATORのマクロの定義を設定しません。コマンドラインまたはソースコードで手動にて設定する必要があります。
次のカーネルを例に説明します。
channel unlong4 inchannel __attribute__((io("eth0_in")));

__kernel void send (int size) {
    for (unsigned i = 0; i < size; i++) {
        ulong4 data = read_channel_intel(inchannel);
        //statements
    }
}

I/Oチャネルに接続するチャネルを持つカーネルをエミュレーションするエミュレーターを有効にするには、次の手順を実行します。

  1. 次のいずれかの方法でカーネルコードを変更します。
    • 次のように、一致するwrite_channel_intel呼び出しを追加する
      #ifdef EMULATOR
      
      __kernel void io_in (__global char * restrict arr, int size) {
          for (unsigned i = 0; i < size; i++) {
              ulong4 data = arr[i]; //arr[i] being an alternate data source
              write_channel_intel(inchannel, data);
          }
      }
      #endif
    • I/Oチャネルアクセスを次のようにメモリーアクセスに置き換える
      __kernel void send (int size) { 
          for (unsigned i = 0; i < size; i++) {
              #ifndef EMULATOR 
      
                  ulong4 data = read_channel_intel(inchannel); 
      
              #else 
                  ulong4 data = arr[i]; //arr[i] being an alternate data source
      
              #endif 
              //statements
          }
      }
  2. エミュレーション中にこの条件付きカーネルを作成および起動するよう、ホスト・アプリケーションを変更します。