我编写了简单的CUDA c ++程序,模拟2D矩阵上的扩散。当我尝试使用Toolkit中提供的一些库时,我遇到了麻烦。我想用cuBlas和implCU替换我极其低效的矩阵转置内核,并使用cuSolvers实现求解线性系统。麻烦的是我不知道如何使用这些函数或编译它们。它与Makefile一起使用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
答案 0 :(得分:1)
您必须明确链接cublas和cusolver库。像
这样的东西nvcc -I /usr/local/cuda-8.0/samples/common/inc \
-L/path/to/CUDA/libraries difusion2d.cu -lcublas -lcusolver
应该有效。根据您的安装,提供库的搜索路径的-L
选项可能是必需的,也可能不是。