Intel OpenCL SDK 2 平台不能按顺序查询?

Intel OpenCL SDK 2 platforms can't be queried in sequence?

我已经在 Windows 系统上安装了来自 here and also installed the SDK from here 的英特尔 OpenCL 运行time for CPU 支持。现在,一切似乎都井井有条,安装完全没有问题。

我现在想使用我通常用来查询我 github here 中的 OpenCL 设备的脚本。使用以下调用编译没有问题:

g++ -o clDeviceQuery -I"C:\Program FIles (x86)\Intel\OpenCL SDK.1\include" -L"C:\Program FIles (x86)\Intel\OpenCL SDK.1\lib\x86" clDeviceQuery.cpp -lOpenCL

但是,当我 运行 生成的 clDeviceQuery.exe 文件中指出有两个 OpenCL 平台(除了上面提到的 Intel,我没有安装任何其他 OpenCL)。此外,当它尝试使用简单的弹出窗口说明 'clDeviceQuery.exe' 已停止工作来查询第二个平台时,它会崩溃。我不知道为什么会这样。

更复杂的是,如果我将脚本更改为仅查询特定平台(即第 184 行循环中的 i 迭代器变为 0 或 1),它可以正常工作。

如有任何见解,我们将不胜感激。

您发送的是指向 clGetPlatformInfo 的 char 指针而不是 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* 是一个优先事项。我个人比较喜欢。


好的,我明白了!真实!

我 运行 你通过 Visual Studio 调试器编程,程序在 (257) 行崩溃:

free(clPlatformIDs);

...因为它在 for 循环内部,而不是外部。将 free() 移到循环外使其工作起来很有魅力。