【问题标题】:Finding the nVIDIA Toolkit Extensions library with CMake使用 CMake 查找 nVIDIA Toolkit Extensions 库
【发布时间】:2019-10-29 12:48:45
【问题描述】:

我正在使用 CMake 3.13 来构建项目,它具有对 CUDA 作为语言的固有支持。该项目需要 nVIDIA Toolkit Extensions 库。在以前的系统上,我在/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 在内部找到的内容吗?

注意事项:

  • libOpenCL.so,nVIDIA 的 OpenCL 层,我遇到了基本相同的问题。

【问题讨论】:

    标签: cmake cuda nvtx


    【解决方案1】:

    (此答案涉及早于 3.17 的 CMake 版本;您应该真正切换到更新版本的 CMake,这会让您的生活更轻松。)

    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
    )
    
    find_library(CUDA_NVTX_LIBRARY
      NAMES nvToolsExt nvTools nvtoolsext nvtools nvtx NVTX
      PATHS "${CUDA_CUDART_LIBRARY_DIR}" "${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
    )
    
    
    

    【讨论】:

      【解决方案2】:

      你可以试试CMAKE_CUDA_IMPLICIT_LINK_DIRECTORIES(建议here),它对我有用:

      project(theproject LANGUAGES CUDA)
      find_library(LIBNVTOOLSEXT nvToolsExt PATHS ${CMAKE_CUDA_IMPLICIT_LINK_DIRECTORIES})
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-04-05
        • 2018-02-20
        • 1970-01-01
        • 1970-01-01
        • 2018-11-09
        • 1970-01-01
        • 2023-03-27
        相关资源
        最近更新 更多