这是一个非常奇怪的情况。为什么我会收到错误
CL_PLATFORM_NOT_FOUND_KHR
当我调用此功能时:
clGetPlatformIDs(0, NULL, &platformCount);
此前此错误并非如此。我已经安装了Intel和Nvidia的驱动程序和SDK。有什么建议吗?
答案 0 :(得分:2)
Here解释了为什么会发生此类错误。如果函数执行成功并且存在非零数量的平台,clGetPlatformIDs将返回CL_SUCCESS。否则,如果启用了cl_khr_icd扩展并且未找到任何平台,则它可以返回CL_PLATFORM_NOT_FOUND_KHR。
答案 1 :(得分:0)
我的机器没有GPU,所以不得不单独使用带有OpenCL的hashcat。我的机器是英特尔酷睿i3,所以我从英特尔网站下载了OpenCL软件并手动安装,错误消失了。
答案 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 *);