Поиск библиотеки расширений nVIDIA Toolkit с помощью CMake - PullRequest
0 голосов
/ 15 июня 2019

Я использую последнюю версию CMake с внутренней поддержкой CUDA в качестве языка для создания проекта. Для этого проекта требуется библиотека расширений nVIDIA Toolkit. В предыдущей системе у меня это было под /usr/local/cuda/lib64. Я использовал команду find_library(), которая, по моему мнению, была достаточной, и все было хорошо. Но - это не так и не было: в системе, в которой 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.

1 Ответ

0 голосов
/ 15 июня 2019

CMake выясняет пути многих других библиотек, связанных с CUDA, например ::10000

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

Я думаю, что на самом деле ошибка в том, что это не так для библиотек 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
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...