J'ai des difficultés à compiler certains des exemples fournis avec CUDA SDK. J'ai installé le pilote développeur (version 270.41.19) et la boîte à outils CUDA, puis enfin le SDK (tous deux la version 4.0.17).
Au départ, il n'a pas du tout compilé, donnant:
error -- unsupported GNU version! gcc 4.5 and up are not supported!
J'ai trouvé la ligne responsable dans 81: /usr/local/cuda/include/host_config.h et l'ai changée en:
//#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 4)
#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 6)
à partir de ce moment, je n'ai que quelques exemples à compiler, cela s'arrête avec:
In file included from /usr/include/c++/4.6/x86_64-linux-gnu/bits/gthr.h:162:0,
from /usr/include/c++/4.6/ext/atomicity.h:34,
from /usr/include/c++/4.6/bits/ios_base.h:41,
from /usr/include/c++/4.6/ios:43,
from /usr/include/c++/4.6/ostream:40,
from /usr/include/c++/4.6/iterator:64,
from /usr/local/cuda/include/thrust/iterator/iterator_categories.h:38,
from /usr/local/cuda/include/thrust/device_ptr.h:26,
from /usr/local/cuda/include/thrust/device_malloc_allocator.h:27,
from /usr/local/cuda/include/thrust/device_vector.h:26,
from lineOfSight.cu:37:
/usr/include/c++/4.6/x86_64-linux-gnu/bits/gthr-default.h:251:1: error: pasting "__gthrw_" and "/* Android's C library does not provide pthread_cancel, check for
`pthread_create' instead. */" does not give a valid preprocessing token
make[1]: *** [obj/x86_64/release/lineOfSight.cu.o] Error 1
Comme certains des exemples sont compilés, je pense que ce n'est pas un problème de pilote, mais plutôt qu'il doit avoir quelque chose à voir avec une version gcc non prise en charge. Le déclassement n'est pas une option car gcc4.6 a un système entier en tant que dépendance à ce stade ...
Réponses:
Comme déjà souligné, nvcc dépend de gcc 4.4. Il est possible de configurer nvcc pour utiliser la version correcte de gcc sans passer les paramètres du compilateur en ajoutant des liens logiciels vers le répertoire bin créé avec l'installation nvcc.
Le répertoire binaire cuda par défaut (le répertoire d'installation par défaut) est / usr / local / cuda / bin, l'ajout d'un lien logiciel vers la bonne version de gcc à partir de ce répertoire est suffisant:
sudo ln -s /usr/bin/gcc-4.4 /usr/local/cuda/bin/gcc
la source
nvcc
invocations fonctionnent, mais disent, en appliquantmake
aux échantillons CUDA, apporte bientôt invocations commençant par:nvcc -ccbin g++
. Pour moi, j'ai utilisésudo ln -s /usr/bin/gcc-4.9 /usr/local/cuda/bin/gcc
etsudo ln -s /usr/bin/g++-4.9 /usr/local/cuda/bin/g++
.cmake .. && make
vous pouvez essayercmake -D CUDA_NVCC_FLAGS="-ccbin gcc-4.4" .. && make
. Si vous utilisez plain,Makefile
vous pouvez essayermake CXX=g++-4.4 CC=gcc-4.4
.gcc 4.5 et 4.6 ne sont pas pris en charge avec CUDA - le code ne se compilera pas et le reste de la chaîne d'outils, y compris cuda-gdb, ne fonctionnera pas correctement. Vous ne pouvez pas les utiliser et la restriction n'est pas négociable.
Votre seule solution est d'installer une version gcc 4.4 comme second compilateur (la plupart des distributions le permettent). Il existe une option pour nvcc
--compiler-bindir
qui peut être utilisée pour pointer vers un autre compilateur. Créez un répertoire local, puis créez des liens symboliques vers les exécutables de la version gcc prise en charge. Passez ce répertoire local à nvcc via l'--compiler-bindir
option, et vous devriez être en mesure de compiler le code CUDA sans affecter le reste de votre système.MODIFIER :
Notez que cette question et cette réponse concernent CUDA 4.
Depuis sa rédaction, NVIDIA a continué d'étendre la prise en charge des versions ultérieures de gcc dans la nouvelle version de la chaîne d'outils CUDA
Il n'y a actuellement (à partir de CUDA 10.1) aucun support gcc 9 dans CUDA.
Notez que NVIDIA a récemment ajouté un tableau très utile ici qui contient le compilateur et la matrice du système d'exploitation pris en charge pour la version actuelle de CUDA.
la source
gcc 4.9.3
sur SLES 11 SP3 sans aucun problème.Vérifiez la version GCC maximale prise en charge pour votre version CUDA:
Définissez une variable d'environnement pour cette version de GCC. Par exemple, pour CUDA 10.2:
Assurez-vous que cette version est installée:
Ajoutez des liens symboliques dans les dossiers CUDA:
(ou substitut
/usr/local/cuda
par votre chemin d'installation CUDA, s'il n'y est pas)Consultez ce gist GitHub pour plus d'informations sur le tableau de compatibilité CUDA-GCC .
la source
/usr/bin/gcc
et/usr/bin/g++
ou/usr/local/cuda/bin/gcc
?cuda_10.2.89_440.33.01_linux.run
assistant de NVIDIA , qui a tout simplement échoué à l'exécution avec une plainte concernant la compatibilité gcc. J'ai fini par décider de désinstaller gcc 9: Pcudatoolkit-dev
), vous devez créer un lien à l'intérieur de votre env commeln -s /usr/bin/gcc-8 /home/user/miniconda3/envs/your_env/bin/gcc
etln -s /usr/bin/g++-8 /home/user/miniconda3/envs/your_env/bin/g++
La solution de Gearoid Murphy fonctionne mieux pour moi puisque sur ma distribution (Ubuntu 11.10), gcc-4.4 et gcc-4.6 sont dans le même répertoire, donc --compiler-bindir n'est pas utile. La seule mise en garde est que j'ai également dû installer g ++ - 4.4 et créer un lien symbolique:
la source
Pour CUDA7.5, ces lignes fonctionnent:
la source
Découvrez comment utiliser les "alternatives de mise à jour" pour contourner ce problème:
la source
Si vous n'utilisez
cmake
pour moi aucun des hacks d'édition des fichiers et de liaison n'a fonctionné, j'ai donc compilé en utilisant les indicateurs qui spécifient la version gcc / g ++.cmake -DCMAKE_C_COMPILER=gcc-6 -DCMAKE_CXX_COMPILER=g++-6 ..
A travaillé comme un charme.
la source
Sur la plupart des distributions, vous avez la possibilité d'installer une autre version de gcc et g ++ à côté d'un compilateur le plus récent comme gcc-4.7. De plus, la plupart des systèmes de construction connaissent les variables d'environnement
CC
etCXX
, qui vous permettent de spécifier respectivement d'autres compilateurs C et C ++. Donc, je suggère quelque chose comme:Pour Makefiles, il devrait y avoir une méthode similaire. Je ne recommande pas de définir des liens symboliques personnalisés dans / usr / local à moins que vous ne sachiez ce que vous faites.
la source
Cela fonctionne pour fedora 23. Les dépôts de compatibilité gcc seront légèrement différents selon votre version de fedora.
Si vous installez les référentiels suivants:
Maintenant, créez les liens souples comme mentionné ci-dessus en supposant que votre dossier bin cuda est dans
/usr/local/cuda/
Vous devriez maintenant pouvoir compiler avec
nvcc
sans l'erreur de version gcc.la source
La solution de Gearoid Murphy fonctionne comme un charme. Pour moi, j'avais deux répertoires pour cuda -
Les liens souples ne devaient être ajoutés qu'au répertoire mentionné ci-dessous -
De plus, les liens souples g ++ et gcc étaient requis comme mentionné par SchighSchagh.
la source
Une autre façon de configurer nvcc pour utiliser une version spécifique de gcc (gcc-4.4, par exemple), est d'éditer nvcc.profile et de modifier PATH pour inclure le chemin vers le gcc que vous voulez utiliser en premier.
Par exemple (gcc-4.4.6 installé dans / opt):
L'emplacement de nvcc.profile varie, mais il doit être dans le même répertoire que l' exécutable nvcc lui-même.
C'est un peu un hack, car nvcc.profile n'est pas destiné à la configuration utilisateur selon le manuel nvcc, mais c'était la solution qui fonctionnait le mieux pour moi.
la source
mkdir /usr/local/bin/cuda-hack && ln -s /usr/bin/g++-5 /usr/local/bin/cuda-hack
CUDA est après quelques modifications d'en-tête compatible avec gcc4.7 et peut-être une version supérieure: https://www.udacity.com/wiki/cs344/troubleshoot_gcc47
la source
Pour les gens comme moi qui sont confus lors de l'utilisation
cmake
, leFindCUDA.cmake
script remplace certains éléments denvcc.profile
. Vous pouvez spécifier lenvcc
compilateur hôte en définissantCUDA_HOST_COMPILER
comme indiqué sur http://public.kitware.com/Bug/view.php?id=13674 .la source
cmake .. -DCMAKE_INSTALL_PREFIX=/InstallPos_GPU/ -DCMAKE_C_COMPILER="/gcc-8.3.0/bin/gcc" -DCMAKE_CXX_COMPILER="/gcc-8.3.0/bin/g++" -DGMX_GPU=ON -DCUDA_TOOLKIT_ROOT_DIR=/cuda-7.5/ -D NVCCFLAGS=" -ccbin /cuda-7.5/bin/" -DCUDA_HOST_COMPILER=/cuda-7.5/bin/gcc
J'ai installé avec succès les gromacs avec support GPU.J'ai dû installer les anciennes versions de gcc, g ++.
Vérifiez que gcc-4.4 est dans / usr / bin /, et de même pour g ++ Ensuite, je pourrais utiliser la solution ci-dessus:
la source
Dans
$CUDA_HOME/include/host_config.h
, trouvez des lignes comme celles-ci (peuvent légèrement varier entre les différentes versions de CUDA):Supprimez-les ou modifiez-les en fonction de votre état.
Notez que cette méthode est potentiellement dangereuse et peut interrompre votre build. Par exemple, gcc 5 utilise C ++ 11 par défaut, mais ce n'est pas le cas pour nvcc à partir de CUDA 7.5. Une solution de contournement consiste à ajouter
--Xcompiler="--std=c++98"
pour CUDA <= 6,5ou
--std=c++11
pour CUDA> = 7,0.la source
--std=c++
option?Si vous rencontrez cette erreur, veuillez lire le fichier journal:
Suivez simplement la suggestion du fichier journal:
Travail accompli :)
Je viens d'installer CUDA 10.2 avec gcc 9.2 sur Kubuntu 19.10 en utilisant l'
--override
option.la source
Pour compiler les exemples CUDA 8.0 sur Ubuntu 16.10, j'ai fait:
Cela a l'avantage de ne pas modifier l'ensemble du système ou de créer des liens symboliques uniquement vers les binaires (cela pourrait causer des problèmes de liaison de bibliothèque.)
la source
Cela a résolu mon problème:
la source
Pour CUDA 6.5 (et apparemment 7.0 et 7.5), j'ai créé une version du package gcc 4.8.5 RPM (sous Fedora Core 30) qui permet à cette version de gcc d'être installée avec le GCC actuel de votre système.
Vous pouvez trouver toutes ces informations ici .
la source
Dans mon cas, CUDA était déjà installé à partir de la version Ubuntu et cmake le détectait au lieu de la version nouvellement installée à l'aide du gestionnaire de SDK NVidia.
L'Iran
dpkg -l | grep cuda
et pu voir les deux versions.Ce que j'ai dû faire, c'est désinstaller l'ancien CUDA (version 9.1 dans mon cas) et laisser la nouvelle version seule (version 10.2). J'ai utilisé la commande purge comme ceci:
Veuillez vérifier que les noms de package correspondent à la version que vous souhaitez supprimer de votre installation.
J'ai dû réexécuter à
cmake
partir d'unBUILD
répertoire vide pour rediriger toutes les#include
bibliothèques et vers la version SDK (puisque les anciens chemins étaient cuits dans l'environnement de construction existant).la source
Cela se produit parce que votre version actuelle de CUDA ne prend pas en charge votre version actuelle de GCC. Vous devez effectuer les opérations suivantes:
Trouvez la version GCC prise en charge (dans mon cas 5 pour CUDA 9)
Installez la version GCC prise en charge
Changer les softlinks pour GCC dans le
/usr/bin
répertoireChanger les softlinks pour GCC dans le
/usr/local/cuda-9.0/bin
répertoireAjouter
-DCUDA_HOST_COMPILER=/usr/bin/gcc-5
à votresetup.py
fichier, utilisé pour la compilationSupprimer l'ancien répertoire de construction
Compilez à nouveau en définissant
CUDAHOSTCXX=/usr/bin/gcc-5
Remarque: si vous obtenez toujours l'
gcc: error trying to exec 'cc1plus': execvp: no such file or directory
erreur après avoir suivi ces étapes, essayez de réinstaller le GCC comme ceci, puis de compiler à nouveau:Crédits: https://github.com/facebookresearch/maskrcnn-benchmark/issues/25#issuecomment-433382510
la source