OpenCL代码由于使用英特尔OpenCL.lib而崩溃

OpenCL code is crashing due to using intel OpenCL.lib

本文关键字:OpenCL 崩溃 lib 于使用 代码 英特尔      更新时间:2023-10-16

我正在基于Eclipse CDT (Mars)和intel_sdk_for_opencl_setup_6.1.0.1600开发Windows 10上的OpenCL应用程序。我的电脑设备如下:

操作系统:Windows 10 proCPU: i7 - 5500 u司机:win64_15407.4279.exe

问题:虽然代码在Eclipse CDT中成功构建,但当它在Eclipse CDT中作为->本地C/c++应用程序运行时,它会崩溃并挂起。实际上,它可以通过替换文件OpenCL在相同的IDE和操作系统中构建和运行。lib(它来自英特尔OpenCL SDK,位于C:Program Files (x86)IntelOpenCL SDK6.1libx64OpenCL。***AMD APPlibx64OpenCL.lib)。

除了将文件(C:Program Files (x86)IntelOpenCL SDK6.1libx64OpenCL.lib)替换为(***AMD APPlibx64OpenCL.lib)外,如何使用本机intel_sdk_for_opencl_setup_6.1.0.1600和Eclipse CDT成功运行以下代码?

#include <stdio.h>
#include <stdlib.h>
#include<CL/cl.h>
int main(int argc, char *argv[]) {
    cl_uint err;
    cl_uint num_platform;
    cl_platform_id *platform;
    err = clGetPlatformIDs(0, NULL, &num_platform);
    if (CL_SUCCESS == err)
        printf("Number of Detected OpenCL platforms: %dnn", num_platform);
    else
        printf("Error calling clGetPlatformIDs. Error code: %d n", err);
    platform = (cl_platform_id *) malloc(sizeof(cl_platform_id) * num_platform);
    err = clGetPlatformIDs(num_platform, platform, NULL);
    size_t size;
    for (cl_uint i = 0; i < num_platform; i++) {
        err = clGetPlatformInfo(platform[i], CL_PLATFORM_NAME, 0, NULL, &size);
        char *PName = (char *) malloc(size);
        err = clGetPlatformInfo(platform[i], CL_PLATFORM_NAME, size, PName,NULL);
        printf("PName:%sn", PName);
        err = clGetPlatformInfo(platform[i], CL_PLATFORM_VENDOR, 0, NULL,&size);
        char *PVendor = (char *) malloc(size);
        err = clGetPlatformInfo(platform[i], CL_PLATFORM_VENDOR, size, PVendor,NULL);
        printf("PVendor:%sn", PVendor);
        err = clGetPlatformInfo(platform[i], CL_PLATFORM_VERSION, 0, NULL,&size);
        char *PVersion = (char *) malloc(size);
        err = clGetPlatformInfo(platform[i], CL_PLATFORM_VERSION, size,PVersion, NULL);
        printf("PVersion:%sn", PVersion);
        printf("i=%d err=%dnn", i, err);
    }
    return 0;
}

哪里崩溃了?在一个OpenCL调用上?我看到过clGetPlatformIDs由于各种原因而崩溃(包括OpenCL.dll的不良供应商发行版)。在Windows上,是OpenCL。lib只是OpenCL.dll的静态包装器,两者通常与Khronos发布的OpenCL ICD(可安装的客户端驱动程序,它是安装的任何供应商驱动程序的蹦床)相同。然而,一些供应商改变了它们(例如,要做NVIDIA Nsight跟踪,你需要NVIDIA的版本)。所以,虽然我不能解释为什么一个会崩溃,但我可以自信地说,你可以把崩溃的那个换成不崩溃的那个,这样就没事了。