我在Windows上使用OpenCL 2.0。我的机器有 2 个平台:
- CUDA GPU(使用 OpenCL 1.2)
- 英特尔 CPU/GPU(采用 OpenCL 2.0)
我根本不希望OpenCL API返回CUDA平台。根据这篇文章,opencl.dll 通过查看 Windows 注册表返回注册的平台。但是,没有提到搜索哪些注册表项。
如何在 Windows 上禁用某个 OpenCL 驱动程序/平台,以便 API 不返回该驱动程序/平台?
正如你提到的,OpenCL ICD加载程序从Windows注册表中获取可用OpenCL平台的列表。要防止 OpenCL 平台出现在系统上运行的任何 OpenCL 应用程序中,您只需从以下一个或两个注册表项中删除相应的值:
对于 32 位计算机或 64 位计算机上的 64 位应用: HKEY_LOCAL_MACHINESOFTWAREKhronosOpenCLVendors
对于 64 位计算机上的 32 位应用: HKEY_LOCAL_MACHINESOFTWAREWow6432NodeKhronosOpenCLVendors
注册表值的名称将是提供 OpenCL 运行时实现的.dll
的完整路径。
在我看来,这是一种相当严厉的解决问题的方法。大多数 OpenCL 应用程序为用户提供了一种手动选择/覆盖所需 OpenCL 平台的方法(例如,通过命令行参数、环境变量,甚至如果适用 GUI)。