如何在 Windows 上禁用已注册的 OpenCL 平台?

How to disable registered OpenCL platforms on Windows?

我在 Windows 上使用 OpenCL 2.0。我的机器有 2 个平台:

我根本不希望 OpenCL API 到 return CUDA 平台。根据此 article、opencl.dll return 通过查看 Windows 注册表注册的平台。但是,没有提及搜索哪些注册表项。

如何在 Windows 上禁用某个 OpenCL driver/platform,这样 return 就不会被 API 编辑?

正如您提到的,OpenCL ICD 加载器从 Windows 注册表中获取可用 OpenCL 平台的列表。要防止 OpenCL 平台出现在您系统上的任何 OpenCL 应用程序 运行 中,您只需从以下一个或两个注册表项中删除相应的值:

对于 32 位机器或 64 位机器上的 64 位应用程序: HKEY_LOCAL_MACHINE\SOFTWARE\Khronos\OpenCL\Vendors

对于 64 位计算机上的 32 位应用程序: HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Khronos\OpenCL\Vendors

注册表值的名称将是 .dll 提供 OpenCL 运行时实现的完整路径。

在我看来,这是一种相当严厉的解决问题的方法。大多数 OpenCL 应用程序为用户提供了一种手动 select/override 所需 OpenCL 平台的方法(例如,通过命令行参数、环境变量,或者即使适用的 GUI)。