使用CMake查找nVIDIA Toolkit扩展库

时间:2019-06-14 22:06:23

标签: cmake cuda nvtx

我使用的是CMake的最新版本,该版本具有对CUDA语言的固有支持,以构建项目。该项目需要nVIDIA Toolkit扩展库。在以前的系统上,我将其放在/usr/local/cuda/lib64下。我使用了find_library()命令,我认为这已经足够了,一切都很好。但是-不是,不是:在使用OS分发软件包安装CUDA的系统上,直接在/ usr下,我的命令不起作用。

更具体地说,我正在使用:

find_library(CUDA_NVTX_LIBRARY
  NAMES nvToolsExt nvTools nvtoolsext nvtools nvtx NVTX
  PATHS ${CUDA_TOOLKIT_ROOT_DIR} ENV LD_LIBRARY_PATH
  PATH_SUFFIXES "lib64" "common/lib64" "common/lib" "lib"
  DOC "Location of the CUDA Toolkit Extension (NVTX) library"
  NO_DEFAULT_PATH
)

并且缺少/usr/lib/x86_64-linux-gnu/libnvToolsExt.so

问题:

  • 我该如何更改我的find_library命令,以免错过目标平台特定的文件夹?
  • 我是否以错误的方式寻找NVTX库?我可以以某种方式依靠CMake内部找到的内容吗?

注意:

  • nVIDIA的OpenCL层libOpenCL.so基本上存在相同的问题。

2 个答案:

答案 0 :(得分:0)

CMake确实找出了许多其他与CUDA相关的库的路径,例如:

CUDA_CUDART_LIBRARY:FILEPATH=/usr/lib/x86_64-linux-gnu/libcudart.so
CUDA_CUDA_LIBRARY:FILEPATH=/usr/lib/x86_64-linux-gnu/libcuda.so
CUDA_cublas_LIBRARY:FILEPATH=/usr/lib/x86_64-linux-gnu/libcublas.so
CUDA_cudadevrt_LIBRARY:FILEPATH=/usr/lib/x86_64-linux-gnu/libcudadevrt.a
CUDA_cudart_static_LIBRARY:FILEPATH=/usr/lib/x86_64-linux-gnu/libcudart_static.a
CUDA_cufft_LIBRARY:FILEPATH=/usr/lib/x86_64-linux-gnu/libcufft.so
CUDA_cupti_LIBRARY:FILEPATH=/usr/lib/x86_64-linux-gnu/libcupti.so
CUDA_curand_LIBRARY:FILEPATH=/usr/lib/x86_64-linux-gnu/libcurand.so
CUDA_cusolver_LIBRARY:FILEPATH=/usr/lib/x86_64-linux-gnu/libcusolver.so
CUDA_cusparse_LIBRARY:FILEPATH=/usr/lib/x86_64-linux-gnu/libcusparse.so
CUDA_nppc_LIBRARY:FILEPATH=/usr/lib/x86_64-linux-gnu/libnppc.so
CUDA_nppial_LIBRARY:FILEPATH=/usr/lib/x86_64-linux-gnu/libnppial.so
CUDA_nppicc_LIBRARY:FILEPATH=/usr/lib/x86_64-linux-gnu/libnppicc.so
CUDA_nppicom_LIBRARY:FILEPATH=/usr/lib/x86_64-linux-gnu/libnppicom.so
CUDA_nppidei_LIBRARY:FILEPATH=/usr/lib/x86_64-linux-gnu/libnppidei.so
CUDA_nppif_LIBRARY:FILEPATH=/usr/lib/x86_64-linux-gnu/libnppif.so
CUDA_nppig_LIBRARY:FILEPATH=/usr/lib/x86_64-linux-gnu/libnppig.so
CUDA_nppim_LIBRARY:FILEPATH=/usr/lib/x86_64-linux-gnu/libnppim.so
CUDA_nppist_LIBRARY:FILEPATH=/usr/lib/x86_64-linux-gnu/libnppist.so
CUDA_nppisu_LIBRARY:FILEPATH=/usr/lib/x86_64-linux-gnu/libnppisu.so
CUDA_nppitc_LIBRARY:FILEPATH=/usr/lib/x86_64-linux-gnu/libnppitc.so
CUDA_npps_LIBRARY:FILEPATH=/usr/lib/x86_64-linux-gnu/libnpps.so
CUDA_rt_LIBRARY:FILEPATH=/usr/lib/x86_64-linux-gnu/librt.so

我认为对于actually a bug而言,对于NVTX和OpenCL库没有这样做。尽管如此,我们仍可以采用它为其他库找到的路径-也许是主要库CUDA_CUDART_LIBRARY,并将其用作搜索提示。

结果比以前更丑,但这似乎确实有效:

get_filename_component(CUDA_CUDART_LIBRARY_DIR "${CUDA_CUDART_LIBRARY}" PATH CACHE)

find_library(CUDA_OPENCL_LIBRARY
  NAMES OpenCL opencl
  PATHS "${CUDA_CUDART_LIBRARY_DIR}" "${CUDA_TOOLKIT_ROOT_DIR}" ENV LD_LIBRARY_PATH
  PATH_SUFFIXES "lib64" "lib"
  DOC "Location of the CUDA OpenCL support library"
  NO_DEFAULT_PATH
)

答案 1 :(得分:0)

您可以尝试$ python test.py Main Function Starts 25 Main Function Ends Finished (建议使用here),它对我有用:

CMAKE_CUDA_IMPLICIT_LINK_DIRECTORIES