如何使用 CMake 选择 OpenCL 实现?
How to choose OpenCL implementation with CMake?
我有一个 Windows OpenCL 应用程序,它使用了一些 AMD 扩展。此外,我的应用程序还有一些可选的 CUDA 组件。使用 CMake 构建 visual studio 解决方案时,FindOpenCL 模块选择 Nvidia OpenCL 实现而不是 AMD 的。有没有简单的方法让CMake使用AMD版本?
我尝试在 FindOpenCL 模块代码中注释 Nvidia 部分,但这没有用。我可以修改一些注册表设置吗?我是安装AMD的SDK后安装CUDA的。安装顺序会有所不同吗?
最后,有效的方法是从 find_library
和 find_path
命令中的 PATHS
建议中删除 NVIDIA 环境变量并添加 NO_DEFAULT_PATH
。问题是,即使我删除了建议,CMake 仍在添加默认路径,其中包括 NVIDIA 的 OpenCL 实现。这两个命令最终如下所示:
find_path(OpenCL_INCLUDE_DIR
NAMES
CL/cl.h OpenCL/cl.h
NO_DEFAULT_PATH
PATHS
ENV "PROGRAMFILES(X86)"
ENV AMDAPPSDKROOT
ENV ATISTREAMSDKROOT
PATH_SUFFIXES
include
OpenCL/common/inc
"AMD APP/include")
find_library(OpenCL_LIBRARY
NAMES OpenCL
NO_DEFAULT_PATH
PATHS
ENV "PROGRAMFILES(X86)"
ENV AMDAPPSDKROOT
ENV ATISTREAMSDKROOT
PATH_SUFFIXES
"AMD APP/lib/x86_64"
lib/x86_64
lib/x64
OpenCL/common/lib/x64)
我有一个 Windows OpenCL 应用程序,它使用了一些 AMD 扩展。此外,我的应用程序还有一些可选的 CUDA 组件。使用 CMake 构建 visual studio 解决方案时,FindOpenCL 模块选择 Nvidia OpenCL 实现而不是 AMD 的。有没有简单的方法让CMake使用AMD版本?
我尝试在 FindOpenCL 模块代码中注释 Nvidia 部分,但这没有用。我可以修改一些注册表设置吗?我是安装AMD的SDK后安装CUDA的。安装顺序会有所不同吗?
最后,有效的方法是从 find_library
和 find_path
命令中的 PATHS
建议中删除 NVIDIA 环境变量并添加 NO_DEFAULT_PATH
。问题是,即使我删除了建议,CMake 仍在添加默认路径,其中包括 NVIDIA 的 OpenCL 实现。这两个命令最终如下所示:
find_path(OpenCL_INCLUDE_DIR
NAMES
CL/cl.h OpenCL/cl.h
NO_DEFAULT_PATH
PATHS
ENV "PROGRAMFILES(X86)"
ENV AMDAPPSDKROOT
ENV ATISTREAMSDKROOT
PATH_SUFFIXES
include
OpenCL/common/inc
"AMD APP/include")
find_library(OpenCL_LIBRARY
NAMES OpenCL
NO_DEFAULT_PATH
PATHS
ENV "PROGRAMFILES(X86)"
ENV AMDAPPSDKROOT
ENV ATISTREAMSDKROOT
PATH_SUFFIXES
"AMD APP/lib/x86_64"
lib/x86_64
lib/x64
OpenCL/common/lib/x64)