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



我在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)。

最新更新