Компиляция моей программы 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 Возможность указать путь поиска к библиотекам может или не может быть необходимым.

Другие вопросы по тегам