IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

CUDA et intégration au C++


Sujet :

C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2008
    Messages : 27
    Par défaut CUDA et intégration au C++
    Bonjour,

    J'utilise CUDA et Visual Studio 2005 (v8)et je voudrait pouvoir utiliser les noyaux dans des applications C++.

    J'ai réussi à compiler mes noyaux avec nvcc mais le compilateur c++ repasse systematiquement sur les fichiers .cu ce qui lève un grand nombre d'erreur.

    Quelqu'un connaitrait il le moyen de résoudre le problème?

    (il faudrait empecher le compilateur de compiler mon fichier.cu

  2. #2
    Membre émérite Avatar de HanLee
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2004
    Messages : 738
    Par défaut
    Citation Envoyé par AricDestroy Voir le message
    Bonjour,

    J'utilise CUDA et Visual Studio 2005 (v8)et je voudrait pouvoir utiliser les noyaux dans des applications C++.

    J'ai réussi à compiler mes noyaux avec nvcc mais le compilateur c++ repasse systematiquement sur les fichiers .cu ce qui lève un grand nombre d'erreur.

    Quelqu'un connaitrait il le moyen de résoudre le problème?

    (il faudrait empecher le compilateur de compiler mon fichier.cu
    Tu compiles comment ?
    nvcc sépare la partie GPU de la partie qui sera exécutée sur le CPU, et il appelle justement ton compilateur C++.

    Moi j'utilise les Custom Build Rules fourni avec le SDK pour l'intégration avec VS2005.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2008
    Messages : 27
    Par défaut
    Merci pourrait tu m'expliquer les étapes a suivre pour que ca fonctionne

    Perso je me suis basé sur l'exemple d'integration au C++ fourni par le SDK.
    J'ai donc modifié les propriétés de mon fichier .cu avec les parametres de l'exemple en changeant juste le nom du .obj

    J'ai refait un exemple ultra simple, ca t'aidera peut etre a pouvoir m'aider facilement car je croit que mon problème vient d'un détail que j'ai pas vu.

    Donc je créer un projet C++, dans lequel je créer un fichier .cpp qui contriendra un main

    J'ajoute a mon projet un fichier .cu dans lequel je creer une fonction test qui ne fait qu'un affichage printf() (c'est vraiment basique!!)

    Cette fonction est déclarer comme derivant du C par extern "c"

    fichier testCu.cu
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    #include "cutil.h"
     
     
    extern "C" void testVoidCu()
    {
    	printf("ca marche");
    }
    fichier test.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #include <iostream>
    #include "cutil.h"
     
    extern "C" void testVoidCu();
     
    int
    main(int argc, char** argv)
    {
    	testVoidCu();
    }
    Je modifie ensuite les propriétés du fichier .cu avec les parametres de l'exemple
    Comand Line;
    "$(CUDA_BIN_PATH)\nvcc.exe" -ccbin "$(VCInstallDir)bin" -c -D_DEBUG -DWIN32 -D_CONSOLE -D_MBCS -Xcompiler /EHsc,/W3,/nologo,/Wp64,/Od,/Zi,/RTC1,/MTd -I"$(CUDA_INC_PATH)" -I./ -I ../../common/inc -I"C:\Program Files (x86)\NVIDIA Corporation\NVIDIA CUDA SDK\common\inc" -o $(ConfigurationName)\testCu.obj testCu.cu

    OutPuts:
    $(ConfigurationName)\testCu.obj

    Et quand la compilation échoue elle retourne une erreur
    identifier printf is undefined

    Les options du linker sont modifiées pour avoir accès aux différentes librairies

  4. #4
    Membre émérite Avatar de HanLee
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2004
    Messages : 738
    Par défaut
    Envoie moi plutôt ta solution, j'vais jeter un oeil.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2008
    Messages : 27
    Par défaut
    Voici le projet ultra simple mais qui ne fonctionne pas pour d'obscure raison

    Si tu peux m'en donner la raison

    Je suis sur que c'est un détail mais ça me prend la tête

    Merci d'avance
    Fichiers attachés Fichiers attachés

  6. #6
    Membre émérite Avatar de HanLee
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2004
    Messages : 738
    Par défaut
    Bon, d'abord pour compiler cet exemple, ce que tu vas faire c'est copier nvcc.rules dans C:\Program Files\Microsoft Visual Studio 8\VC\VCProjectDefaults, ce sera plus simple pour tous les projets que tu vas créer de sélectionner CUDACompile dans Custom Build Rules.

    Donc je te file la pièce jointe, j'ai modifié, pour en faire un exemple.

    L'exemple marche là, mais je crois que ce n'est peut-être pas la bonne manière de faire.
    Je sais pas c'est la faute de qui ou de quoi, mais je pense qu'on ne peut pas faire de bonne compilation séparée avec les fichiers .cu, en tout cas avec les Custom Build Rules définies telles quelles.
    Si je rajoute du code avec std::cout, ça me fait des erreurs de link parce que double définition.

    Si tu regardes les exemples du SDK, ils sont toujours faits selon une seule manière : le fichier .cu qui représente un peu le main.cpp, et ce meme fichier .cu qui inclut tous les autres (inclusion de code carrément), mais les fichiers .cu ne sont pas compilés.

    J'ai pas encore trop réfléchi à ça, mais faut que je fasse quelques recherches.
    Fichiers attachés Fichiers attachés

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2008
    Messages : 27
    Par défaut
    Mon objectif se rapproche des exemples du SDK parce que je récupère une image et une fois qu'elle est chargé dans un tableau de char je veu lancer une fonction défini dans un premier fichier.cu et qui fait appel à des noyaux dans deux autres fichiers.cu

    J'essaie dans un premier temps d'avoir une compilation fonctionnelle avec du code extremement simple avant de me lancer dans l'ajout de mes fonctions dans mon appli C++ beaucoup plus complexe.

    ps:peux tu renvoyer la piece jointe

    edit: mea culpa pour la piece jointe j'ai du halluciner

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2008
    Messages : 27
    Par défaut
    J'ai récupérer ta solution mais quelquechose doit encore m'échapper parce que j'obtient des erreurs de Link


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Error	1	
    error LNK2001: unresolved external symbol testVoidCu	testCpp.obj	
    Error	2	fatal error LNK1120: 1 unresolved externals	C:\Program Files
    Je suppose qu'il n'arrive pas a trouvé le resultat de la copilation du .cu mais j'arrive pas a comprendre pourquoi
    -

  9. #9
    Membre émérite Avatar de HanLee
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2004
    Messages : 738
    Par défaut
    T'as bien copié nvcc.rules là où je t'ai dit ?
    Et t'as coché la règle ?

    On dirait qu'il a pas compilé le .cu ?

    T'es parti de ma solution directement ou t'as modifié la tienne ? Pars de la mienne.
    Moi chez moi ça compile tout de suite.

    Sinon, ben je sais pas, je suis pas chez toi. Le mieux si rien ne marche, c'est que tu pars d'un exemple du SDK qui marche, et tu modifies à tes besoins...

    Ou bien alors tu te le fais à la vieille : avec un ptit Makefile...

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2008
    Messages : 27
    Par défaut
    Je suis parti de ta solution, je l'est juste modifié car j'y est ajouter les inputs des option C++ et du linker.

    N'aurais tu pas modifier le Custom Build rule (CUDACompile) ce qui pourrait expliquer les variations entre nos deux applications, car le mien est toujours dans son état d'origine.

  11. #11
    Membre émérite Avatar de HanLee
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2004
    Messages : 738
    Par défaut
    Non, j'ai rien changé du tout.

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2008
    Messages : 27
    Par défaut
    En regardant un peu les sorties du compilateurs (pourquoi je l'avais pas fait avant va savoir) j'ai decouvert ceci:

    nvcc fatal : nvcc cannot find a supported cl version. Only MSVC 7.1 and MSVC 8.0 are supported

    C'est vraiment mystique parce que je vois vraiment pas pourquoi il me met cette erreur, je travaille avec MSVC 8, et j'arrive à compiler les exemples sans problème

    Visiblement le problème apparait quand je créer un projet et a chaque fois y a peut etre quelque chose que j'oubli de faire

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2008
    Messages : 27
    Par défaut
    En effet quand j'utilise comme base le projet contenu dans le SDK ça fonctionne sans problèmes donc c'est cool

    Par contre je comprend pas pourquoi je ne peut pas créer de projet qui marche

Discussions similaires

  1. Réponses: 2
    Dernier message: 02/08/2014, 12h44
  2. intégration de sons
    Par pal200 dans le forum OpenGL
    Réponses: 2
    Dernier message: 09/02/2004, 11h17
  3. [MFC][Excel] Intégration excel et MFC!
    Par fadoua dans le forum MFC
    Réponses: 2
    Dernier message: 22/12/2003, 10h51
  4. [NETBEANS] Intégration de Jboss dans NetBeans
    Par Kleb dans le forum NetBeans
    Réponses: 1
    Dernier message: 09/06/2003, 18h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo