Die Bibliotheksfunktion clGetProfileDataDeviceIntelFPGA muss im Host-Code aufgerufen werden, wenn ein autorun-Kernel dynamisch profiliert wird. Wenn diese Funktion direkt aufgerufen wird, kann die Hostcode-Kompilierung mit einem Fehler wie dem unten stehenden ausfallen.
Linux (Gcc)
Fehler: "clGetProfileDataDeviceIntelFPGA" wurde in diesem Bereich nicht erklärt
Windows (Microsoft Visual Studio)
Fehler: Nicht gelöstes externes Symbol clGetProfileDataDeviceIntelFPGA
Wenn das System den ICD-Treiber verwendet, können nicht standardmäßige Funktionen wie *IntelFPGA-Funktionen nicht direkt verwendet werden. Der OpenCL-Aufruf clGetExtensionFunctionAddress muss verwendet werden, um einen Funktionszeiger für die nicht standardmäßige Funktion zu erhalten, und dieser Pointer muss verwendet werden, um sie aufzurufen.
Verwendung des Prototyps der Funktion in CL/ext.h
extern CL_API_ENTRY cl_int CL_API_CALL
clGetProfileDataDeviceIntelFPGA(
cl_device_id /*device_id*/,
cl_program /*programm*/,
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*/ );
Ersetzen des Funktionsanrufs
cl_int status = clGetProfileDataDeviceIntelFPGA (Gerät, Programm, false, true, false, 0, NULL, NULL, NULL);
mit Code, der den folgenden Code verwendet
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) (Gerät, Programm, false, true, false, 0, NULL, NULL, NULL);