C'est une question incroyablement basique, mais comment démarrer un nouveau projet CUDA dans Visual Studio 2008? J'ai trouvé des tonnes et des tonnes de documentation sur des questions liées à CUDA, mais rien sur la façon de démarrer un nouveau projet. Je travaille avec Windows 7 x64 Visual Studio 2008 C++. Je voudrais vraiment trouver une sorte d'application Hello World vraiment très basique pour simplement obtenir un programme de base compilant et en cours d'exécution.
Éditer:
J'ai essayé tes pas Tom. J'ai configuré une application console. J'ai ensuite supprimé le .cpp par défaut qu'il déposait et copié sur les trois fichiers du projet de modèle juste pour avoir quelque chose à compiler. Quand je compile cela, template_gold.cpp s'est plaint de ne pas avoir inclus stdafx.h, donc je l'ai inclus. Maintenant, la construction échoue avec ceci:
1> ------ Construction commencée: Projet: CUDASandbox, Configuration: Debug x64 ------ 1> Compilation ... 1> template_gold. cpp 1> Liaison ... 1> LIBCMT.lib (crt0.obj): erreur LNK2019: symbole externe non résolu principal référencé dans la fonction __tmainCRTStartup 1> D:\Stuff\Programming\Visual Studio 2008\Projects\CUDASandbox\x64\Debug\CUDASandbox.exe: erreur fatale LNK1120: 1 externals non résolus 1> Le journal de génération a été enregistré dans "file: // d:\Stuff\Programming\Visual Studio 2008\Projects\CUDASandbox\CUDASandbox\x64\Debug\BuildLog.htm " 1> CUDASandbox - 2 erreur (s), 0 avertissement (s) ======= === Build: 0 réussi, 1 échoué, 0 à jour, 0 ignoré ==========
[~ # ~] note [~ # ~] Avec la sortie de la version 3.2 de CUDA Toolkit, NVIDIA inclut maintenant le fichier rules avec le Toolkit par opposition au SDK. Par conséquent, j'ai divisé cette réponse en deux moitiés, utilisez les instructions appropriées pour votre version de la boîte à outils.
[~ # ~] note [~ # ~] Ces instructions sont valides pour Visual Studio 2005 et 2008. Pour Visual Studio 2010 voir cette réponse .
CUDA TOOLKIT 3.2 et versions ultérieures
Je recommande d'utiliser le fichier NvCudaRuntimeApi.rules
(Ou NvCudaDriverApi.rules
Si vous utilisez l'API du pilote) fourni par NVIDIA, il est publié avec la boîte à outils et prend en charge les derniers indicateurs du compilateur de manière conviviale. Personnellement, je déconseillerais d'utiliser l'assistant VS, mais uniquement parce que je ne pense vraiment pas que vous en ayez besoin.
Le fichier de règles (installé dans le répertoire Program Files\Microsoft Visual Studio 9.0\VC\VCProjectDefaults
) "Enseigne" à Visual Studio comment compiler et lier les fichiers .cu de votre projet dans votre application.
NvCudaRuntimeApi.rules
(Clic droit sur le projet, Custom Build Rules, cochez la case correspondante), voir note 1$(CUDA_PATH)\lib\$(PlatformName)
au = Répertoires de bibliothèques supplémentaires et dans Linker -> Input ajouter cudart.lib
Aux Dépendances supplémentaires), voir les notes [2] et [3]$(CUDA_PATH)\include
au Additional Include Directories), voir la note [3]Quelques autres conseils:
<sdk_install_dir>\C\doc\syntax_highlighting\visual_studio_8
Je recommanderais également d'activer la prise en charge d'Intellisense avec l'entrée de registre suivante (remplacez 9.0 par 8.0 pour VS2005 au lieu de VS2008):
[HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\9.0\Languages\Language Services\C/C++]
"NCB Default C/C++ Extensions"=".cpp;.cxx;.c;.cc;.h;.hh;.hxx;.hpp;.inl;.tlh;.tli;.cu;.cuh;.cl"
Soit dit en passant, je recommanderais d'éviter si possible cutil , à la place de lancer votre propre vérification. Cutil n'est pas pris en charge par NVIDIA, il est simplement utilisé pour essayer de garder les exemples du SDK concentrés sur la conception réelle du programme et de l'algorithme et éviter de répéter les mêmes choses dans chaque exemple (par exemple, l'analyse de la ligne de commande). Si vous écrivez le vôtre, vous aurez un bien meilleur contrôle et saurez ce qui se passe. Par exemple, le wrapper cutilSafeCall
appelle exit()
si la fonction échoue - une application réelle (par opposition à un échantillon) devrait probablement gérer l'échec plus élégamment!
CUDA TOOLKIT 3.1 et versions antérieures
J'utiliserais le fichier Cuda.rules
Fourni par NVIDIA avec le SDK, il est publié avec la boîte à outils et prend en charge les derniers drapeaux du compilateur de manière conviviale. Personnellement, je déconseillerais d'utiliser l'assistant VS, mais uniquement parce que je ne pense vraiment pas que vous en ayez besoin.
Le fichier de règles (dans le répertoire C\common du SDK) "enseigne" à Visual Studio comment compiler et lier les fichiers .cu de votre projet dans votre application.
Cuda.rules
(Clic droit sur le projet, Custom Build Rules, recherchez le fichier de règles et assurez-vous qu'il est coché)$(CUDA_LIB_PATH)
au = Répertoires de bibliothèques supplémentaires et dans Linker -> Input ajouter cudart.lib
Aux Dépendances supplémentaires), voir note [2] ci-dessous$(CUDA_INC_PATH)
au Répertoires d'inclusion supplémentaires)Quelques autres conseils:
<sdk_install_dir>\C\doc\syntax_highlighting\visual_studio_8
Je recommanderais également d'activer la prise en charge d'Intellisense avec l'entrée de registre suivante (remplacez 9.0 par 8.0 pour VS2005 au lieu de VS2008):
[HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\9.0\Languages\Language Services\C/C++]
"NCB Default C/C++ Extensions"=".cpp;.cxx;.c;.cc;.h;.hh;.hxx;.hpp;.inl;.tlh;.tli;.cu;.cuh;.cl"
Soit dit en passant, je recommanderais d'éviter si possible cutil , à la place de lancer votre propre vérification. Cutil n'est pas pris en charge par NVIDIA, il est simplement utilisé pour essayer de garder les exemples du SDK concentrés sur la conception réelle du programme et de l'algorithme et éviter de répéter les mêmes choses dans chaque exemple (par exemple, l'analyse de la ligne de commande). Si vous écrivez le vôtre, vous aurez un bien meilleur contrôle et saurez ce qui se passe. Par exemple, le wrapper cutilSafeCall
appelle exit()
si la fonction échoue - une application réelle (par opposition à un échantillon) devrait probablement gérer l'échec plus élégamment!
[~ # ~] note [~ # ~]
NvCudaRuntimeApi.v3.2.rules
. Cela signifie qu'au lieu de chercher la boîte à outils CUDA dans% CUDA_PATH%, elle cherchera dans% CUDA_PATH_V3_2%, ce qui signifie que vous pouvez avoir plusieurs versions de la boîte à outils CUDA installées sur votre système et que différents projets peuvent cibler différentes versions. Voir également la note [3].LNK4098: defaultlib 'LIBCMT' conflicts with use of other libs
) ou si vous multipliez les symboles définis pour les fonctions de bibliothèque standard, alors cela devrait être votre premier suspect.Quelle belle question !! Pour toute la documentation CUDA là-bas, c'est quelque chose que j'ai toujours pensé être une omission évidente ... En fait, je suis vraiment content d'avoir trouvé ce post, car après avoir utilisé CUDA pendant un bon moment, je n'avais toujours pas ' J'ai trouvé un moyen officiel correct d'amener VS à produire un programme CUDA à partir de zéro.
Quand j'ai eu besoin de démarrer un nouveau programme CUDA, j'ai toujours copié et modifié l'exemple "template" du répertoire SDK. Ce n'est peut-être pas exactement ce que vous recherchez, car il ne démarre pas à neuf, mais est un moyen rapide d'obtenir un CUDA-capable projet fonctionnant dans VS avec tous les noms de projet/fichier corrects ...
Vous pouvez jeter un œil à ce guide: http://www.programmerfish.com/how-to-run-cuda-on-visual-studio-2008-vs08/
Des informations supplémentaires sur l'installation de l'assistant CUDA sur VS2008 peuvent être trouvées ici et ici
[Éditer]
Si vous ne souhaitez pas utiliser l'assistant, vous devez configurer manuellement les chemins CUDA lib/include/nvcc et ajouter des règles de construction personnalisées à chaque nouveau programme CUDA. Pour plus d'informations sur la manière de procéder, consultez la réponse de Tom.