GNU/Linux >> Tutoriels Linux >  >> Linux

Erreur fatale :cuda.h :aucun fichier ou répertoire de ce type

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.


Linux
  1. Erreur :xenstore-read :xs_open :aucun fichier ou répertoire de ce type sur DomU [Résolu]

  2. Erreur :Xend Start – /proc/xen/capabilities :aucun fichier ou répertoire de ce type [Résolu]

  3. Erreur :Tcl.h introuvable (aucun fichier ou répertoire de ce type) ?

  4. Aucune erreur de fichier ou de répertoire de ce type lors de l'exécution d'un binaire

  5. erreur fatale arm-linux-gnu-gcc :stdio.h :aucun fichier ou répertoire de ce type

Ssh - Essayer de se connecter au serveur et d'obtenir Key_load_public :aucune erreur de fichier ou de répertoire de ce type ?

Erreur de compilation :g++ :erreur lors de la tentative d'exécution de 'cc1plus' :execvp :aucun fichier ou répertoire de ce type

Pourquoi ENOENT signifie-t-il Aucun fichier ou répertoire de ce type ?

Comment éviter l'erreur No such file or directory pour `make clean` Makefile cible

source conda désactiver :bash :désactiver :aucun fichier ou répertoire de ce type

ssh-add renvoie :Erreur lors de la connexion à l'agent :aucun fichier ou répertoire de ce type