2

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

CL_PLATFORM_NOT_FOUND_KHR

当我调用这个函数时:

clGetPlatformIDs(0, NULL, &platformCount);

早些时候这个错误不是。我已经安装了 Intel 和 Nvidia 的驱动程序和 SDK。有什么建议吗?

4

3 回答 3

4

这里解释了为什么会发生这样的错误。如果函数成功执行并且可用的平台数量非零,则 clGetPlatformIDs 返回 CL_SUCCESS。否则,如果启用了 cl_khr_icd 扩展并且没有找到平台,它可以返回 CL_PLATFORM_NOT_FOUND_KHR。

于 2017-04-26T13:29:14.310 回答
2

你很幸运。好吧……看到这是三年后的事了。

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

机器:x64 windows 10。

显卡: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。我从文档中重建了我需要的结构。我也不在乎函数签名的原型。例如,我通过将“clGetPlatformIDs”转换为类型“F_03”然后以这种方式调用它来调用它。

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

于 2020-04-30T14:22:05.900 回答
0

我的机器没有 GPU,因此不得不将 hashcat 与 OpenCL 一起用于 CPU。我的机器是 Intel core i3,所以我从 Intel 网站下载了 OpenCL 软件并手动安装,错误消失了。

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

于 2018-01-25T07:37:50.033 回答