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

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

5.5.5.6. io属性を使用したI/Oパイプの実装

OpenCL™パイプ宣言にio属性を含め、FPGAボードの入力または出力フィーチャーと接続する特別なI/Oパイプを宣言します。
このフィーチャーには、ネットワーク・インターフェイス、PCIe®、カメラ、データのキャプチャーや処理を行うその他デバイス、プロトコルなどが含まれます。

インテル® FPGA SDK for OpenCL™ チャネル拡張のio("chan_id") 属性は、チャネルが接続するアクセラレーター・ボードのI/Oフィーチャーを指定します。chan_id引数は、カスタム・プラットフォームのboard_spec.xmlファイルにあるI/Oインターフェイスの名前です。同じI/Oフィーチャーを使用し、I/Oパイプを識別することができます。

ペリフェラル・インターフェイスの使用法は各デバイスのタイプによって異なる可能性があるため、I/Oパイプをカーネルプログラムに実装する際は、ボードメーカーの資料を参照してください。OpenCL™カーネルのコードは、ペリフェラル・インターフェイスが生成するデータの型と互換性がなければなりません。外部I/Oパイプとカーネルのバイトの順序が異なる場合、 インテル® FPGA SDK for OpenCL™オフライン・コンパイラーは、バイトの順序を入出時にシームレスに変換します。

注意:
  • ボードに直接接続しており、I/Oパイプを介してペリフェラル・デバイスと通信するパイプには、暗黙的なデータの依存性が存在する可能性があります。オフライン・コンパイラーはそれらの依存関係を認識できないため、この暗黙的なデータの依存性はコンパイルの問題を引き起こす可能性があります。
  • 同一のペリフェラルと通信する外部I/Oパイプは、シーケンシャルな順序に従いません。予期しない動作が発生する可能性があるため、外部デバイスがシーケンシャルな順序を必要としないようにしてください。
  1. カスタム・プラットフォームのboard_spec.xmlファイルを確認し、FPGAボードで使用可能な入力および出力フィーチャーを特定ください。

    例えば、board_spec.xmlファイルには、I/Oフィーチャーに関する次のような情報が含まれています。

    <channels>
      <interface name="udp_0" port="udp0_out"  type="streamsource" width="256"
       chan_id="eth0_in"/>
      <interface name="udp_0" port="udp0_in"  type="streamsink" width="256"
       chan_id="eth0_out"/>
      <interface name="udp_0" port="udp1_out"  type="streamsource" width="256"
       chan_id="eth1_in"/>
      <interface name="udp_0" port="udp1_in"  type="streamsink" width="256"
       chan_id="eth1_out"/>
    </channels>

    interface要素のwidth属性は、そのパイプで使用されるデータの型の幅をビット単位で指定します。上記例の場合、uintfloatのデータ型はどちらも32ビット幅です。その他のより大きなデータ型や、ベクトル化されたデータ型は、board_spec.xmlファイルで指定されている適切なビット幅に一致している必要があります。

  2. 次のコード例で示されているようにio属性を実装します。io属性名は、board_spec.xmlファイルで指定されているI/Oチャネル名 (chan_id) に一致しなければなりません。
    __kernel void test (pipe uint pkt   __attribute__((io(“enet”))),;
                        pipe float data __attribute__((io(“pcie”))));
    重要: board_spec.xmlファイル内のチャネルのXML要素で指定されている各I/Oパイプに、固有のio("chan_id") ハンドルを宣言してください。