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

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

6.6.3. OpenCL ICD拡張APIの使用

ICDを使用する際に、OpenCL Specificationに正式に記載されていないOpenCLホストAPI関数を呼び出す場合は、clGetExtensionFunctionAddress関数を最初に呼び出し、そのホストAPI関数への関数ポインターを取得後、その関数ポインターを使用しホストAPI関数を呼び出す必要があります。 これは、関数名にIntelFPGAを含む非標準の呼び出しすべてに適用されます。

次のコード例を参照ください。

extern 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 status = clGetProfileDataDeviceIntelFPGA (device, program, false,
                                                           true, false, 0, NULL, 
                                                           NULL, NULL);

以下の構文を使用するコードと置き換え、関数ポインターの定義およびロードを行います。

typedef cl_int (*clGetProfileDataDevice_fn) (cl_device_id, cl_program,
                                                       cl_bool, cl_bool, cl_bool,
                                                       size_t, void *, 
                                                       size_t *, cl_int *);
clGetProfileDataDevice_fn get_profile_data_ptr = (clGetProfileDataDevice_fn) 
clGetExtensionFunctionAddressForPlatform ("clGetProfileDataDeviceIntelFPGA");

その後、関数呼び出しとして関数ポインターを使用します。

cl_int status = (get_profile_data_ptr) (device, program, false, true,
                                                  false, 0, NULL, NULL, NULL);