如何在 Windows 上禁用已注册的 OpenCL 平台?
How to disable registered OpenCL platforms on Windows?
我在 Windows 上使用 OpenCL 2.0。我的机器有 2 个平台:
- CUDA GPU(使用 OpenCL 1.2)
- 英特尔 CPU/GPU(使用 OpenCL 2.0)
我根本不希望 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)。
我在 Windows 上使用 OpenCL 2.0。我的机器有 2 个平台:
- CUDA GPU(使用 OpenCL 1.2)
- 英特尔 CPU/GPU(使用 OpenCL 2.0)
我根本不希望 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)。