opencl中的CL_PLATFORM_NOT_FOUND_KHR

时间:2017-04-26 02:18:11

标签: opencl opencl-c

这是一个非常奇怪的情况。为什么我会收到错误

CL_PLATFORM_NOT_FOUND_KHR

当我调用此功能时:

clGetPlatformIDs(0, NULL, &platformCount);

此前此错误并非如此。我已经安装了Intel和Nvidia的驱动程序和SDK。有什么建议吗?

3 个答案:

答案 0 :(得分:2)

Here解释了为什么会发生此类错误。如果函数执行成功并且存在非零数量的平台,clGetPlatformIDs将返回CL_SUCCESS。否则,如果启用了cl_khr_icd扩展并且未找到任何平台,则它可以返回CL_PLATFORM_NOT_FOUND_KHR。

答案 1 :(得分:0)

我的机器没有GPU,所以不得不单独使用带有OpenCL的hashcat。我的机器是英特尔酷睿i3,所以我从英特尔网站下载了OpenCL软件并手动安装,错误消失了。

来源:https://youtu.be/AieYqNQ6ADM

答案 2 :(得分:0)

您很幸运。很好...看到这是三年后的事。

免责声明:我不知道为什么这样做

计算机:x64 Windows10。

图形卡:Geforce GTX 960

完全无法加载库:LoadLibraryA(“ OpenCL64.dll”)

错误(但已加载):LoadLibraryA(“ C:/ Program Files / NVIDIA Corporation / OpenCL / OpenCL64.dll”)

错误(但已加载):LoadLibraryA(“ C:/ Program Files / NVIDIA Corporation / OpenCL / OpenCL.dll”)

正确:LoadLibraryA(“ OpenCL.dll”)

这真的是内在的东西:我的两个“错误”答案都可以让您 抓取函数指针,但是当您调用clGetPlatformIDs时,返回状态 将为0xFFFFFC17(CL_PLATFORM_NOT_FOUND_KHR)。

然后,您将检查函数调用的正确性。 也许您甚至会查看调用约定。也许你会检查 头文件,并确保那里没有错别字。但是, 您正在寻找所有错误的地方,因为原来的问题发生了 比您想象的要多退一步。

由于这个问题,我在程序中内置了读取文件的代码: “ OPEN_CL_SEARCH_PATHS.TXT”,因此软件用户可以更改什么DLL文件 程序尝试加载。

虽然我在这里,但我也想补充一点,就是 使得OpenCL <==> OpenGL共享不是零拷贝共享的驱动程序,并且 太懒了。现在我必须找出Vulkan使其分形 渲染引擎,即使OpenCL的抽象更适合该问题。

可能很重要的一点是,我没有使用SDK或任何 验证层。实际上,我什至不使用 windows.h。 我编写了汇编代码,以通过导航PEB文件来获取GetProcAddress和LoadLibrary的地址。我也没有使用cl.h或cl_platform.h。 我从文档中重建了所需的结构。我也不是 要么为函数签名而烦恼原型。例如, 我通过将其强制转换为类型“ F_03”来调用“ clGetPlatformIDs”,然后 这样称呼。

typedef void *( F_03)(void ,void *,void *);