英特尔OpenCL SDK 2平台无法按顺序查询?

时间:2016-09-02 15:56:36

标签: opencl

我已经从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),它的工作没有问题。

任何见解都将受到赞赏。

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()使其像魅力一样工作。