Ich habe noch nie selbst ein cuda-Projekt kompiliert, aber ich denke, Sie müssen die Bibliothek mit dem Compiler verknüpfen.
Etwas schnelles Googeln sagt, Nvidia hat dafür einen Compiler, der alles handhabt. Sie müssen das also nur installieren und Sie sollten loslegen können. Es heißt NVVC. Nach der Installation einfach ausführen:
nvcc helloworld.cu -o hello.out
Bei externen Bibliotheken wie diesen müssen Sie sie fast immer verknüpfen. Für die Standardbibliothek müssen Sie dies nicht tun, da der Linker bereits weiß, wo er sie finden kann.
Die richtige Include-Header-Datei dafür ist nicht cuda.h
aber cuda_runtime.h
, vorausgesetzt, Sie möchten gcc
verwenden als Compiler für diesen Code. Wie die andere Antwort zeigt, könnten Sie einfach nvcc
verwenden (das bereits auf Ihrem Rechner installiert ist), was überhaupt keine Include-Header für diesen Code erfordern würde.
Wenn Sie nvcc
verwenden möchten Sie sollten wahrscheinlich sicherstellen, dass der entsprechende PATH
Umgebungsvariable gesetzt. Diese und andere nützliche Informationen sind in der Linux-Installationsanleitung enthalten.
Wenn Sie also Ihren Code wie folgt ändern:
#include <cuda_runtime.h>
int main ()
{
int deviceCount;
cudaError_t e = cudaGetDeviceCount(&deviceCount);
return e == cudaSuccess ? deviceCount : -1;
}
Sie sollten in der Lage sein, es erfolgreich mit einem Befehl wie dem folgenden zu kompilieren:
gcc -I/usr/local/cuda/include -L/usr/local/cuda/lib64 has_cuda.c -lcudart -o has_cuda
Der Pfad nach -I
switch sollte den Pfad zu cuda_runtime.h
enthalten auf Ihrer Maschine. Normalerweise würde das wie oben eingerichtet werden, aber ich bin mir nicht sicher, ob die cuda
Symlink ist auf Ihrem Rechner eingerichtet, und es sieht auch so aus, als ob sich Ihr Include-Verzeichnis an einem ungewöhnlichen Ort befindet, z. B.
/usr/local/cuda-8.0/targets/x86_64-linux/include
aber Sie können find
verwenden genau so, wie Sie es getan haben, um es zu finden.
Ebenso der Pfad nach dem -L
switch muss der Pfad zu Ihrem cuda lib64
sein Verzeichnis, das libcudart.so und seine Cousins enthalten wird. Auch dies wäre normalerweise auf dem von mir gezeigten Pfad symbolisch verlinkt, aber Ihre Maschineninstallation entspricht möglicherweise nicht meinen Erwartungen. Sie sollten find
verwenden können um den richtigen Pfad zu finden.
Und wie in der anderen Antwort angegeben, wenn Sie nvcc
verwenden (die Sie bereits gefunden haben), müssen Sie den -I
nicht explizit auswählen und -L
Weg. Der einfachste Weg, dies zum Laufen zu bringen, besteht darin, Ihre Datei von has_cuda.c
umzubenennen bis has_cuda.cu
, dann sollten Sie in der Lage sein, wie folgt zu kompilieren:
nvcc has_cuda.cu -o has_cuda
Schließlich ist Ubuntu 16.10 derzeit keine offiziell unterstützte Distribution für CUDA, daher kann es einige unerwartete Dinge geben, wie es auf Ihrem Computer installiert wurde. Ich möchte Sie ermutigen, die zuvor verlinkte Installationsanleitung zu lesen, da sie nützliche Informationen zu den Einrichtungsschritten nach der Installation enthält, z. B. zum Festlegen von Umgebungsvariablen und auch zum "Verifizieren" der CUDA-Installation.
Jedes Mal, wenn Sie CUDA-Codes ausführen und irgendwelche Probleme haben, stellen Sie sicher, dass Sie die richtige cuda-Fehlerprüfung verwenden und Ihre Codes mit cuda-memcheck wie folgt ausführen:
cuda-memcheck ./has_cuda
Auch wenn Sie die gemeldeten Fehlerinformationen nicht verstehen, können sie für diejenigen hilfreich sein, die versuchen, Ihnen zu helfen.