Je n'ai jamais compilé de projet cuda moi-même mais je pense que vous devrez lier la bibliothèque au compilateur.
Une recherche rapide sur Google indique que Nvidia a un compilateur pour cela qui gérera tout. Il vous suffit donc de l'installer et vous devriez être prêt à partir. C'est ce qu'on appelle le NVVC. Une fois installé, lancez :
nvcc helloworld.cu -o hello.out
Avec des bibliothèques externes comme celles-ci, vous devez presque toujours les lier. Vous n'avez pas à le faire pour la bibliothèque standard car l'éditeur de liens sait déjà où le trouver.
Le fichier d'en-tête d'inclusion approprié n'est pas cuda.h
mais cuda_runtime.h
, en supposant que vous souhaitiez utiliser gcc
comme compilateur pour ce code. Comme l'indique l'autre réponse, vous pouvez simplement utiliser nvcc
(qui est déjà installé sur votre machine) qui ne nécessiterait aucun en-tête d'inclusion pour ce code.
Si vous souhaitez utiliser nvcc
vous devriez probablement vous assurer que le PATH
approprié variable d'environnement est définie. Ceci et d'autres informations utiles sont contenues dans le guide d'installation Linux.
Donc, si vous modifiez votre code comme ceci :
#include <cuda_runtime.h>
int main ()
{
int deviceCount;
cudaError_t e = cudaGetDeviceCount(&deviceCount);
return e == cudaSuccess ? deviceCount : -1;
}
Vous devriez pouvoir le compiler avec succès en utilisant une commande comme celle-ci :
gcc -I/usr/local/cuda/include -L/usr/local/cuda/lib64 has_cuda.c -lcudart -o has_cuda
Le chemin après le -I
switch doit contenir le chemin vers cuda_runtime.h
sur votre appareil. Normalement, cela serait configuré comme ci-dessus, mais je ne sais pas si le cuda
le lien symbolique est configuré sur votre machine, et il semble également que votre répertoire d'inclusion se trouve à un endroit inhabituel, c'est-à-dire
/usr/local/cuda-8.0/targets/x86_64-linux/include
mais vous pouvez utiliser find
tout comme vous l'avez fait pour le localiser.
De même, le chemin après le -L
switch doit être le chemin vers votre cuda lib64
répertoire, qui contiendra libcudart.so et ses cousins. Encore une fois, ce serait normalement un lien symbolique sur le chemin que j'ai montré, mais l'installation de votre machine peut ne pas être conforme à mes attentes. Vous devriez pouvoir utiliser find
pour localiser le chemin correct.
Et comme indiqué dans l'autre réponse, si vous utilisez nvcc
(que vous avez déjà localisé), vous n'aurez pas besoin de sélectionner explicitement le -I
et -L
chemin. Le moyen le plus simple pour que cela fonctionne est de renommer votre fichier à partir de has_cuda.c
à has_cuda.cu
, alors vous devriez pouvoir compiler comme ceci :
nvcc has_cuda.cu -o has_cuda
Enfin, Ubuntu 16.10 n'est pas une distribution officiellement prise en charge pour CUDA pour le moment, il peut donc y avoir des choses inattendues dans la façon dont il a été installé sur votre machine. Je vous encourage à lire le guide d'installation précédemment lié, car il contient des informations utiles sur les étapes de configuration post-installation, telles que la définition des variables d'environnement, et également comment "vérifier" l'installation de CUDA.
Chaque fois que vous exécutez des codes CUDA et que vous rencontrez des problèmes, assurez-vous d'utiliser la vérification d'erreur cuda appropriée et exécutez vos codes avec cuda-memcheck, comme ceci :
cuda-memcheck ./has_cuda
Même si vous ne comprenez pas les informations d'erreur signalées, elles peuvent être utiles pour ceux qui essaient de vous aider.