2017-03-19 3 views
0

Ich schrieb ein einfaches CUDA-C++ - Programm, das die Diffusion auf einer 2D-Matrix simuliert. Ich habe Probleme bekommen, als ich versucht habe, einige der in Toolkit bereitgestellten Bibliotheken zu verwenden. Ich möchte meinen extrem ineffizienten Matrix-Transpose-Kernel durch etwas von cuBlas und implCU durch cuSolvers-Implementierung von linearen Systemen ersetzen. Das Problem ist, dass ich nicht weiß, wie man die Funktionen benutzt oder kompiliert. Es arbeitet mit Makefiles zu Beispielcodes von Nvidia. Wenn mir jemand helfen würde, der mir im Idealfall zeigt, wie diese Funktionen beim Schreiben von .cu-Dateien verwendet werden sollen, wäre ich dankbar. HierKompilieren meines CUDA-Programms mit Bibliotheken im Toolkit

ist der Code: http://pastebin.com/UKhJZQBz

Ich bin auf Ubuntu 16.04 und ich habe die PATH-Variablen exportiert werden (so sie gehören /usr/local/cuda-8.0/bin) wie im Verzeichnis geschrieben. Hier

ist die Ausgabe von 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

So wie es für mich gearbeitet ist nvcc -I /usr/local/cuda-8.0/samples/common/inc/ -lcusolver -lcublas -lcusparse difusion2d.cu –

Antwort

1

Sie explizit verknüpfen müssen die cublas und cusolver Bibliotheken. Etwas wie

nvcc -I /usr/local/cuda-8.0/samples/common/inc \ 
    -L/path/to/CUDA/libraries difusion2d.cu -lcublas -lcusolver 

sollte funktionieren. Abhängig von Ihrer Installation kann die -L Option, einen Suchpfad zu den Bibliotheken bereitzustellen, erforderlich sein oder nicht.

+0

TY. Ich bin immer noch ein wenig verwirrt darüber, wie Doeas -lcu * tatsächlich arbeiten, könntest du mir das bitte erklären? Auch wenn ich Pfad zur Bibliothek einfüge, bekomme ich ziemlich viele Fehler (der Pfad ist bereits in $ LD_LIBRARY_PATH). Wie bindet dies den gesamten Kompilierungsprozess von cuda code ein? –

+0

gibt es Dokumentation für all das, wenn Sie es lesen möchten http://docs.nvidia.com/cuda/cuda-compiler-driver-nvcc/#file-and-path-specifications – talonmies

Verwandte Themen