OpenCL代码由于使用英特尔OpenCL.lib而崩溃
OpenCL code is crashing due to using intel OpenCL.lib
我正在基于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的版本)。所以,虽然我不能解释为什么一个会崩溃,但我可以自信地说,你可以把崩溃的那个换成不崩溃的那个,这样就没事了。
- 当回溯以零开始时,如何调试崩溃
- 使用std::vector的OpenCL矩阵乘法
- 内联映射初始化的动态atexit析构函数崩溃
- 执行函数时导致崩溃的变量
- 程序崩溃并显示"std::out_of_range"错误
- CoInitialize()在单独的线程上崩溃而不返回
- 使用调试/崩溃报告将应用程序部署到客户端
- 为什么所有C++编译器都会崩溃或挂起此代码
- 为什么lambda在clang上崩溃而不是在gcc上崩溃
- 为什么我的多线程作业队列崩溃
- ExtractIconEx:可以工作,但偶尔会崩溃
- 为什么引用传递会导致此崩溃(C++)
- 试图创建流或fopen时程序崩溃
- 动态链接时OpenCL崩溃
- OpenCL内核因特定参数而崩溃
- OpenCL-绘制到OpenGL纹理崩溃
- OpenCL 在大输入数组时崩溃
- OpenCL资源不足-代码行崩溃,此时无法访问
- OpenCL在大2d范围内崩溃
- OpenCL代码由于使用英特尔OpenCL.lib而崩溃