【问题标题】:CL_PLATFORM_NOT_FOUND_KHR in openclopencl 中的 CL_PLATFORM_NOT_FOUND_KHR
【发布时间】:2017-04-26 02:18:10
【问题描述】:

这是一个非常奇怪的情况。为什么会报错

CL_PLATFORM_NOT_FOUND_KHR

当我调用这个函数时:

clGetPlatformIDs(0, NULL, &platformCount);

之前没有这个错误。我已经安装了 Intel 和 Nvidia 的驱动程序和 SDK。有什么建议吗?

【问题讨论】:

    标签: opencl opencl-c


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      机器: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。 我从文档中重建了我需要的结构。我也不 也为函数签名的原型而烦恼。例如, 我通过将其转换为类型“F_03”来调用“clGetPlatformIDs”,然后 这么称呼它。

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-10-16
          • 2012-05-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-03-24
          • 2018-02-06
          相关资源
          最近更新 更多