Компиляция моей программы CUDA с библиотеками, предоставленными в наборе инструментов
Я написал простую программу CUDA C++, имитирующую диффузию на 2D матрице. У меня возникли проблемы, когда я попытался использовать некоторые из библиотек, представленных в Toolkit. Я хотел бы заменить свое крайне неэффективное матричное транспонированное ядро чем-то из cuBlas, а также implCU с помощью cuSolvers для решения линейных систем. Проблема в том, что я не знаю, как использовать функции или скомпилировать их. Работает с Makefiles на примерах кодов, предоставленных Nvidia. Если бы кто-то помог мне, в идеале показав мне, как эти функции должны использоваться при написании файлов.cu, я был бы признателен.
Вот код: http://pastebin.com/UKhJZQBz
Я нахожусь на Ubuntu 16.04, и я экспортировал переменные PATH (поэтому они включают /usr/local/cuda-8.0/bin), как написано в официальном руководстве.
Вот вывод из nvcc -I /usr/local/cuda-8.0/samples/common/inc/ difusion2d.cu
/tmp/tmpxft_00001c09_00000000-16_difusion2d.o: In function `csr_mat_norminf(int, int, int, cusparseMatDescr*, double const*, int const*, int const*)':
undefined reference to `cusparseGetMatIndexBase'
/tmp/tmpxft_00001c09_00000000-16_difusion2d.o: In function `display_matrix(int, int, int, cusparseMatDescr*, double const*, int const*, int const*)':
undefined reference to `cusparseGetMatIndexBase'
/tmp/tmpxft_00001c09_00000000-16_difusion2d.o: In function `main':
undefined reference to `cusolverDnCreate'
undefined reference to `cublasCreate_v2'
undefined reference to `cusolverDnSetStream'
undefined reference to `cublasSetStream_v2'
collect2: error: ld returned 1 exit status
1 ответ
Вы должны явно связать библиотеки cublas и cusolver. Что-то вроде
nvcc -I /usr/local/cuda-8.0/samples/common/inc \
-L/path/to/CUDA/libraries difusion2d.cu -lcublas -lcusolver
должно сработать. В зависимости от вашей установки, -L
Возможность указать путь поиска к библиотекам может или не может быть необходимым.