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++

Vue hybride

AricDestroy CUDA et intégration au C++ 18/08/2008, 11h13
HanLee Tu compiles comment ? nvcc... 18/08/2008, 22h50
AricDestroy Merci pourrait tu m'expliquer... 19/08/2008, 09h33
HanLee Envoie moi plutôt ta... 19/08/2008, 11h58
AricDestroy Voici le projet ultra simple... 19/08/2008, 13h40
Message précédent Message précédent   Message suivant Message suivant
  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

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