1. #1
    Responsable Qt


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherches
    Inscrit en
    août 2008
    Messages
    23 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherches
    Secteur : Enseignement

    Informations forums :
    Inscription : août 2008
    Messages : 23 310
    Points : 140 661
    Points
    140 661

    Par défaut Approfondissons CUDA !

    Bonjour,

    Quelques temps après vous avoir proposé une introduction à C pour CUDA (simplement dit CUDA), voici maintenant un approfondissement de l'extension de NVIDIA au C pour la gestion du GPU via CUDA.

    Vous aviez appris simplement les techniques de base de l'utilisation du GPU et les bases matérielles de ce GPU. Vos kernels étaient fonctionnels, mais pas optimisés. Vous connaissiez un peu l'architecture du processeur sur lequel sont exécutées vos kernels, mais pas comment exploiter ces connaissances pour tirer le meilleur du processeur.

    Après avoir lu cet article, vous serez plus à même d'utiliser ces connaissances pour mieux utiliser le matériel.

    On ne se limitera pas à cela : vous apprendrez aussi à utiliser des bibliothèques se basant sur CUDA. D'une manière plus simple, vous utiliserez aussi efficacement le matériel.

    Voici l'article : CUDA approfondi.

    Pour ceux qui ont lu l'article, qu'en pensez-vous ? Y a-t-il des choses que vous n'avez pas compris, que vous ne trouvez pas claires ? Avez-vous repéré des erreurs ? Vous pouvez les communiquer ici.

    Pour tous : a-t-on besoin d'optimiser ses kernels CUDA ? Dans tous les cas ? Même si cela est utile, est-ce une étape obligée ?
    Quelles sont les techniques que vous employez ou prévoyez employer pour optimiser vos applications basées sur CUDA ? Prévoyez-vous d'utiliser en ce but un compilateur Fortran pour CUDA, proposé par PGI ?
    Vous souhaitez participer aux rubriques Qt ou PyQt (tutoriels, FAQ, traductions), HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  2. #2
    Membre éprouvé
    Avatar de Ange_blond
    Homme Profil pro
    Ingénieur développement en 3D temps réel
    Inscrit en
    mars 2007
    Messages
    900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement en 3D temps réel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mars 2007
    Messages : 900
    Points : 1 249
    Points
    1 249

    Par défaut

    Je me disais bien que j'avais mis un article à lire dans mes favoris et que j'avais oublié !
    Je n'ai que survoler rapidement ton 1er article, et donc de meme pour le second, mais je prévois (tôt ou tard) de m'essayer à CUDA pour optimiser les calculs couteux pour un projet perso en C++. Je vois CUDA comme un moyen de gagner du temps au niveau des boucles de calcul en les parallelisant autant que possible...

    Merci de nous faire profiter de tes connaissances et de prendre le temps (énorme, pour l'avoir fait) de rédiger un article.
    "le langage C permet de tout faire, y compris se tirer dans le pied. Le langage C++ permet de tout faire, y compris se tirer dans le pied - et réutiliser la balle"

    Ange3d.developpez.com

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    décembre 2008
    Messages
    124
    Détails du profil
    Informations personnelles :
    Âge : 25
    Localisation : France

    Informations forums :
    Inscription : décembre 2008
    Messages : 124
    Points : 144
    Points
    144

    Par défaut

    Salut !

    Tout d'abord bon boulot !
    Maintenant les critiques
    Pour ce qui est de la mémoire tu avances la notion d'accès aux bank mais tu ne parles que d'un tout petit morceau du problème, tu ne parles pas vraiment du coalescing, de la complexité en fonction d'un offset ou d'un stride. Et la shared memory n'est pas toujours le mieux ! Il faut aussi regarder les textures qui sont généralement une très bonne solution.
    Tu as introduit l'idée des streams ainsi que de la copie asynchrone mais tu n'as pas précisé qu'il faut de la mémoire pinned ou non-pageable... De même tu introduit cette notion sans parler de l'overlaping qui est pourtant la raison pour laquelle l'asynchrone existe dans CUDA.
    Tu ne parles pas de la Zero memory qui est pourtant une bonne solution grâce a la mémoire cohérente...
    Dans certains cas tu vas dans les détails alors que dans certains cas une optimisation général peut-être bien plus intéressante que de faire des optimisations sur la mémoire.
    Exemple : Bien penser le rapport arithmétique/mémoire.

    Je lirais le reste dans la semaine.
    Bon boulot !

    Pour les questions d'ordre général, oui il faut optimiser parfois en optimisant des trucs tout bête, on obtient 16x plus de performance car il y avait un "16-way bank conflict" et quand on utilise CUDA c'est généralement car on recherche des performances et donc ne pas optimiser est contre cette optique.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    mai 2005
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mai 2005
    Messages : 22
    Points : 18
    Points
    18

    Par défaut

    Bonjour,

    Je tiens à vous remercier pour ce très bon travail.
    J'ai cependant un problème lors du test d'un des bouts de code. Dans le chapitre "VII-E La mémoire", l'écriture du code sous visual studio 2013 m'indique des erreurs. Je joins une capture d'écran :
    Nom : Pb_cuda.png
Affichages : 267
Taille : 191,7 Ko

    D'où peut venir cette erreur ?

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    étudiant
    Inscrit en
    novembre 2017
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : étudiant

    Informations forums :
    Inscription : novembre 2017
    Messages : 1
    Points : 1
    Points
    1

    Par défaut réponse

    mettre static const int N = 2;
    à la place de #define N(2)

Discussions similaires

  1. programmation cuda débutant
    Par champion dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 05/03/2009, 16h20
  2. Cuda et Visual studio 2008
    Par Zitounix dans le forum Visual C++
    Réponses: 0
    Dernier message: 05/12/2008, 11h36
  3. CUDA lié une texture a un CudaArray
    Par AricDestroy dans le forum Traitement d'images
    Réponses: 2
    Dernier message: 18/11/2008, 17h50
  4. CUDA et intégration au C++
    Par AricDestroy dans le forum C++
    Réponses: 12
    Dernier message: 20/08/2008, 15h12
  5. CUDA traitement d'image
    Par AricDestroy dans le forum Traitement d'images
    Réponses: 26
    Dernier message: 03/07/2008, 16h22

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