Использование CMake для связи с TPL, который был скомпилирован с NVCC

Как правильно связать мой проект с TPL (CHOLMOD), в котором используется CUDA?

Я хочу связать свой проект CMake с CHOLMOD (libcholmod.so). CHOLMOD был скомпилирован отдельно с -GPU_BLAS, который является просто флагом, который включает функциональность GPU. Библиотека CHOLMOD поставляется с несколькими демонстрационными примерами, которые позволяют пользователю проверить, работает ли библиотека и работает ли она правильно с графическим процессором. Все эти тесты пройдены, и мониторинг активности графического процессора подтверждает эти проходы.

Теперь я хочу связать свой проект CMake, чтобы получить доступ к libcholmod.so. Я сделал это с помощью простого файла FindCholmod.cmake:

FIND_LIBRARY(CHOLMOD_LIBRARIES NAMES libcholmod.so PATHS /usr/local/SuiteSparse/lib)

FIND_LIBRARY(AMD_LIBRARY NAMES amd libamd PATHS /usr/local/SuiteSparse/lib)
FIND_LIBRARY(CAMD_LIBRARY NAMES camd libcmd PATHS /usr/local/SuiteSparse/lib)
FIND_LIBRARY(COLAMD_LIBRARY NAMES colamd libcolamd PATHS /usr/local/SuiteSparse/lib)
FIND_LIBRARY(CCOLAMD_LIBRARY NAMES ccolamd libccolamd PATHS /usr/local/SuiteSparse/lib)
FIND_LIBRARY(SUITESPARSE_LIBRARY NAMES SuiteSparse libsuitesparseconfig.so
PATHS /usr/local/SuiteSparse/lib)

FIND_PATH(CHOLMOD_INCLUDE_DIR cholmod.h PATH /usr/local/SuiteSparse/include)

MESSAGE(STATUS "FOUND CHOLDMOD " ${CHOLMOD_LIBRARIES})

INCLUDE(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(Cholmod DEFAULT_MSG CHOLMOD_LIBRARIES
CHOLMOD_INCLUDE_DIR AMD_LIBRARY CAMD_LIBRARY COLAMD_LIBRARY CCOLAMD_LIBRARY
SUITESPARSE_LIBRARY)
MARK_AS_ADVANCED(CHOLMOD_LIBRARIES CHOLMOD_INCLUDE_DIR AMD_LIBRARY CAMD_LIBRARY COLAMD_LIBRARY CCOLAMD_LIBRARY SUITESPARSE_LIBRARY)

FindCublas.cmake (где я убедился, что я нахожу те же библиотеки, которые использовались во время компиляции CHOLMOD):

FIND_LIBRARY(CUBLAS_LIBRARY NAMES libcublas.so PATHS /usr/lib/x86_64-linux-gnu )
FIND_LIBRARY(CUDART_LIBRARY NAMES libcudart.so PATHS /usr/lib/x86_64-linux-gnu )
FIND_PATH(CUDA_INCLUDE_DIR cuda.h PATHS /usr/local/cuda-8.0/include)

INCLUDE(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(CuBlas  DEFAULT_MSG  CUBLAS_LIBRARY CUDART_LIBRARY CUDA_INCLUDE_DIR)

MARK_AS_ADVANCED(CUBLAS_LIBRARY CUDART_LIBRARY CUDA_INLUCDE_DIR)

Конечно, у меня есть похожие файлы FindMetis, FindOpenBlas и FindLapack. Я тогда все связываю:

SET(LINKLIBS  "${LINKLIBS};${CHOLMOD_LIBRARIES};${AMD_LIBRARY};${CAMD_LIBRARY};${COLAMD_LIBRARY};${CCOLAMD_LIBRARY};${OPENBLAS_LIBRARY};${METIS_LIBRARY};${LAPACK_LIBRARY};${CUBLAS_LIBRARY};${CUDART_LIBRARY};${SUITESPARSE_LIBRARY}")
INCLUDE_DIRECTORIES(${METIS_INCLUDE_DIR} ${CHOLMOD_INCLUDE_DIR} ${CUDA_INCLUDE_DIR})

Используя этот метод, я могу успешно получить доступ к библиотеке функций CHOLMOD в моем проекте CMake. На самом деле, он работает хорошо, но он просто не обращается к графическому процессору, несмотря на то, что я следовал указаниям руководства пользователя CHOLMOD export CHOLMOD_USE_GPU=1 и в CPP Common->useGPU=1,

Мой вопрос заключается в том, как правильно связать мой проект с TPL (CHOLMOD), в котором используется CUDA? Мой проект не содержит кода CUDA, кроме ссылки на предварительно скомпилированный libcholmod.so. Нужно ли устанавливать мой компилятор CMake на NVCC, даже если libcholmod.so уже скомпилирован с NVCC?

Дополнительные детали CHOLMOD:
CHOLMOD использует некоторые правила, чтобы решить, должна ли матрица быть разложена на GPU: CHOLMOD_ND_ROW_LIMIT, CHOLMOD_ND_COL_LIMIT, CHOLMOD_POTRF_LIMIT, CHOLMOD_GPU_SKIP Я убедился, что моя тестовая матрица удовлетворяет этим критериям.

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]