自動実行カーネルを動的にプロファイリングする際には、ホストコードでライブラリー関数 clGetProfileDataDeviceIntelFPGA を呼び出す必要があります。 この関数が直接呼び出されると、ホストコードのコンパイルに失敗し、以下のようなエラーが発生する可能性があります。
Linux (gcc)
エラー: 'clGetProfileDataDeviceIntelFPGA' がこのスコープで宣言されていません
Windows (Microsoft Visual Studio)
エラー: 未解決の外部シンボル clGetProfileDataDeviceIntelFPGA
システムが ICD ドライバーを使用している場合、*IntelFPGA 関数などの標準以外の機能を直接使用することはできません。OpenCL 呼び出し clGetExtensionFunctionAddress は、非標準関数の関数ポインターを取得するために使用する必要があり、そのポインターを使用して呼び出す必要があります。
関数のプロトタイプを使用 (CL/ext.h)
エクスターン・CL_API_ENTRY cl_int CL_API_CALL
clGetProfileDataDeviceIntelFPGA(
cl_device_id /*device_id*/、
cl_program /*program*/、
cl_bool /*read_enqueue_kernels*/、
cl_bool /*read_auto_enqueued*/、
cl_bool /*clear_counters_after_readback*/、
size_t /*param_value_size*/、
void * /*param_value*/、
size_t * /*param_value_size_ret*/、
cl_int * /*errcode_ret*/ );
ファンクションコールを置き換える
cl_intステータス = clGetProfileDataDeviceIntelFPGA (デバイス、プログラム、false、true、false、0、NULL、NULL);
以下の構文を使用したコード付き
cl_int (*get_profile_fn)(cl_device_id、cl_program、cl_bool、cl_bool、cl_bool、size_t、void*、size_t*、cl_int*);
get_profile_fn = (cl_int * (cl_device_id、cl_program、cl_bool、cl_bool、cl_bool、size_t、void*、size_t*、cl_int*))clGetExtensionFunctionAddress("clGetProfileDataDeviceIntelFPGA");
cl_int status = (cl_int)(*get_profile_fn) (デバイス、プログラム、false、true、false、0、NULL、NULL);