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

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

7.9. カーネル・パラメーターを指定するためのプリプロセッサー・マクロの定義 (-D<macro_name>)

インテル® FPGA SDK for OpenCL™オフライン・コンパイラーは、マクロの定義を渡し、条件付きでのコードのコンパイルを可能にするプリプロセッサー・マクロをサポートします。
  • プリプロセッサー・マクロの定義をオフライン・コンパイラーに渡すには、 aoc -D <macro_name> <kernel_filename>.clコマンドを呼び出します。
  • 定義済みのプリプロセッサー・マクロの既存値を上書きするには、 aoc -D <macro_name>=<value> <kernel_filename>.clコマンドを呼び出します。
    次のカーネルsumのコードを例にします。
    #ifndef UNROLL_FACTOR
      #define UNROLL_FACTOR 1
    #endif
    
    __kernel void sum (__global const int * restrict x,
                       __global int * restrict sum)
    {
      int accum = 0;
    
      #pragma unroll UNROLL_FACTOR
      for(size_t i = 0; i < 4; i++)
      {
        accum += x[i + get_global_id(0) * 4];
      }
      sum[get_global_id(0)] = accum;
    }

    UNROLL_FACTORの1を4に上書きし設定するには、 aoc -DUNROLL_FACTOR=4 sum.clコマンドを呼び出します。このコマンドを呼び出すことは、sumカーネル・ソースコードの#define UNROLL_FACTOR 1の行を#define UNROLL_FACTOR 4に置き換えることと同等です。

  • プリプロセッサー・マクロを使用し、カーネルのソースコードを変更することなくオフライン・コンパイラーによるカーネルの最適化を制御するには、 aoc -o <hardware_filename>.aocx -D <macro_name>=<value> <kernel_filename>.clを呼び出します。
    以下に詳細を説明します。

    -oは、オフライン・コンパイラーが生成する.aocxファイル名を指定するために使用するオフライン・コンパイラーのオプションです。

    <hardware_filename> は、指定したプリプロセッサー・マクロの値を使用しオフライン・コンパイラーが生成する.aocxファイルの名前です。

    ヒント: コンパイル結果をどちらもファイルシステムに保存するには、aocコマンドの-oフラグを使用し、カーネルを個別のバイナリーとしてコンパイルします。
    例えば、同じカーネルを必要なワークグループ・サイズの64および128で複数回コンパイルする場合、次のようにWORK_GROUP_SIZEプリプロセッサー・マクロをカーネル属性reqd_work_group_sizeに定義できます。
    __attribute__((reqd_work_group_size(WORK_GROUP_SIZE,1,1)))
    __kernel void myKernel(...)
    for (size_t i = 0; i < 1024; i++)
    {
    	  // statements
    }

    次のコマンドを入力し、カーネルを複数回コンパイルします。

    aoc –o myKernel_64.aocx –DWORK_GROUP_SIZE=64 myKernel.cl

    aoc –o myKernel_128.aocx –DWORK_GROUP_SIZE=128 myKernel.cl