【发布时间】:2017-07-05 19:06:37
【问题描述】:
我有一个使用一些 AMD 扩展的 Windows OpenCL 应用程序。此外,我的应用程序有一些可选的 CUDA 组件。使用 CMake 构建 Visual Studio 解决方案时,FindOpenCL 模块选择 Nvidia OpenCL 实现而不是 AMD。有没有简单的方法让 CMake 使用 AMD 版本?
我尝试在 FindOpenCL 模块代码中注释 Nvidia 部分,但这不起作用。是否有一些我可以修改的注册表设置?我在安装 AMD 的 SDK 后安装了 CUDA。安装顺序会有所不同吗?
【问题讨论】:
-
查询平台名称,如果有amd则选中。或者您可以尝试重命名/移动 nvidia 的 icd 文件。
-
您的意思是在 CMake 上查询平台名称吗?或者用 OpenCL 代码查询它?如果是后者,那与我的用例不同,因为由于扩展,我需要在编译时实现 AMD
-
我的意思是在 OpenCL 代码中。也许您可以从PATH等环境变量中临时删除icd文件位置?
-
您使用的哪组包含文件独立于您在运行时选择的平台和设备。例如,我的头文件总是使用旧的 AMD SDK,但代码在 AMD、NVIDIA 和 Intel 上运行。换句话说,您不会在编译时选择实现。
-
要在运行时选择特定平台和设备,只需搜索其已知名称(或“NVIDIA”等子字符串)。或者,正如 HTB 上面建议的那样,您可以手动从 ICD 中删除项目(在注册表中,如果在 Windows 上;HLM\SOFTWARE\Khronos\OpenCL\Vendors),但这仅适用于您自己的机器(不要以编程方式执行到用户的机器上!)。