我已经从here安装了用于CPU支持的Intel OpenCL运行时,并且还在Windows系统上安装了来自here的SDK。现在,一切看起来都井井有条,安装完全没有问题。
我现在想使用我通常用于查询我在github here中的OpenCL设备的脚本。使用以下调用编译时没有问题:
g++ -o clDeviceQuery -I"C:\Program FIles (x86)\Intel\OpenCL SDK\6.1\include" -L"C:\Program FIles (x86)\Intel\OpenCL SDK\6.1\lib\x86" clDeviceQuery.cpp -lOpenCL
但是,当我运行生成的clDeviceQuery.exe文件时,它表示有两个OpenCL平台(除了上面提到的英特尔之外,我没有做任何其他OpenCL安装)。此外,它在尝试使用简单的弹出窗口查询第二个平台时崩溃了“clDeviceQuery.exe'已停止工作。我不知道为什么会这样。
为了使事情更复杂,如果我将脚本更改为仅查询特定平台(即第184行的循环中的i
迭代器为0或1),它的工作没有问题。
任何见解都将受到赞赏。
答案 0 :(得分:1)
您正在发送一个char指针指向而不是指向clGetPlatformInfo的char指针。从以下地址更改第185行:
ciErrNum = clGetPlatformInfo (clPlatformIDs[i], CL_PLATFORM_NAME, 1024, &cBuffer, NULL);
要:
ciErrNum = clGetPlatformInfo (clPlatformIDs[i], CL_PLATFORM_NAME, 1024, cBuffer, NULL);
在这种情况下,将cBuffer(char [])显式地转换为void *是一个优先事项。我更喜欢它。
好的我现在开始了! FOR REAL!
我通过Visual Studio调试器运行程序,程序在第257行崩溃:
自由(clPlatformIDs);
...因为它在for循环中,而不是在外面。在循环外移动free()使其像魅力一样工作。