1. #1
    Responsable Qt


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherches
    Inscrit en
    août 2008
    Messages
    23 304
    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 304
    Points : 140 563
    Points
    140 563

    Par défaut À la découverte de CUDA

    Bonjour,

    De nos jours, les calculs à effectuer sont de plus en plus nombreux, et de plus en plus complexes, tout en restant parallélisables. C'est pourquoi des ingénieurs se sont penchés sur le problème, en cherchant à savoir s'il était possible de déléguer ces calculs sur nos cartes graphiques, ces monstres de puissance parallèle. Leur réponse fut positive. Ceci fut le début du GPGPU.

    Depuis, nVidia a lancé sa propre solution de GPGPU, dénommée CUDA. Elle est utilisable sur toutes les cartes graphiques récentes (GeForce 8 et supérieures), et sera toujours supportée par les futures GeForce et autres GPU professionnels.

    Cet article se propose de vous montrer l'utilisation de CUDA, sans trop rentrer dans les détails, juste ce qu'il faut pour pouvoir employer son GPU pour des calculs parallèles. CUDA se présente sous la forme d'une extension au C, que je survole dans cet article.

    À la fin, vous pourrez même écrire vos premiers kernels, et bénéficier de la puissance de votre GPU pour tous vos calculs : physique, traitement du signal, et tous les autres calculs parallèles.


    En attendant la publication de cet article, n'hésitez pas à vous exprimer sur le GPGPU, son avenir :
    • Sera-t-il utile ?
    • Pourra-t-il subsister dans le futur ?
    • Avez-vous déjà entendu parler du GPGPU auparavant ?
    • Avez-vous déjà utilisé le GPGPU ? Quelles sont vos réactions ? Les gains promis peuvent-ils être atteints ? Facilement ou pas ? Dans quelle mesure ?
    • ...
    L'article est désormais disponible ici : http://tcuvelier.developpez.com/gpgp.../introduction/
    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

    Hello

    Moi qui ai investit dans une carte graphique plutot balaise, j'ai hate de connaitre CUDA pour voir ce que je peux en tirer sur mon matériel. J'ai tenté les install de CUDA, mais j'ai pas trouvé de tuto abordable .. et donc j'ai hate de voir ce que tu nous a préparé pour découvrir ça, et pourquoi pas m'y mettre par la suite.

    On sait que de nos jours les processeurs stagnent en puissance, et que c'est le multi-threading qui fait leur puissance actuelle. CUDA, selon moi, est donc précisément dans les attentes des programmes contemporains, qui privilegient le parallelisme des calculs à la rapidité du processeur.

    Ce qui m'interroge, c'est que le GPGPU est une capacité de la carte graphique, et donc a la base la puissance de calcule parallele de cette derniere a été prévue pour elle et non pas en soutient du CPU. Ainsi, j'ai peur que si le GPGPU devient monnaie courante, il faille avoir une bonne carte graphique pour soutenir le CPU, meme si on n'utilise pas ses capacités graphiques.

    Pourquoi ne pas directement integrer la technologie du multi-threading des GPU dans les CPU à l'avenir ?
    "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
    Responsable Qt


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherches
    Inscrit en
    août 2008
    Messages
    23 304
    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 304
    Points : 140 563
    Points
    140 563

    Par défaut

    Citation Envoyé par Ange_blond Voir le message
    Pourquoi ne pas directement integrer la technologie du multi-threading des GPU dans les CPU à l'avenir ?
    C'est justement l'objectif d'Intel Larrabee, d'intégrer GPU et CPU dans une même puce. AMD prévoit la même chose, mais je ne connais plus le nom. Dans un premier temps, il est prévu que le GPU soit l'équivalent des chipsets graphiques intégrés, mais, comme toute chose, ça va changer !
    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 !

  4. #4
    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

    Effectivement AMD a pour projet de concevoir un APU qui est n'est pas vraiment une fusion du GPU et CPU mais plutôt un hardware possédant 2-3 coeur CPU et 1 coeur GPU.

    J'ai travaille sur CUDA quand j'étais chez nvidia donc je connais bien et j'ai pas mal d'expérience avec et je vous garantis que le gains de performance est très important sur des applications pouvant être traite sur plusieurs thread.
    La physique par exemple ne fonctionne pas par récurrence il est donc assez facile de porter ce genre de calcul sous un GPU, je pense a physX et bullet qui utilisent le GPGPU.
    Le problème est que nous sommes dans la section Jeux donc on ne peut pas parler des simulations avance, de l'IA car les fsm n'ont pas besoin de ce genre de puissance de calcul.
    Je pense que dans le jeu vidéo les seules utilités sont pour la physique et les serveurs de jeux. La mémoire du GPU étant bien plus rapide que celle du CPU (je parle bien sur de la ram, pas des registres) il est plus intéressant de traite la logique d'un jeu du type MMORPG sur le GPU, c'est d'ailleurs ce que je fais sur mon projet personnel, permettant alors de permettre au CPU de gérer le réseau et uniquement le réseau, ce qui implique une meilleurs réactivité.

    CUDA n'est pas facile a aborder car il faut voir la conception de l'application différemment et il est dur de se défaire de ses habitudes. Mais après quelques mois ou semaines selon les personnes il est possible de se débrouiller seul sans trop de difficulté.

    La technologie de multi-thread du GPU ne peut pas être implanter dans un CPU pour la simple raison qu'ils n'ont pas la même utilité et pas la même architecture, pour plus d'informations je vous laisse lire des paper sur le multithreading de chez intel.

    Pour ce qui est de l'essor du GPGPU il est certain que ça va fonctionner car nous avons besoin de plus en plus de puissance de calcul et vu l'évolution actuel du hardware qui n'est plus une course a la fréquence mais une course au nombre de core, il faut afin d'avancer rendre nos applications multithreaded et le GPU offre un meilleurs support de ce genre d'architecture que le CPU.
    Par exemple l'encodage de video, avec le logiciel CUDA de nvidia l'encodage est bien plus rapide qu'avec le support CPU.

  5. #5
    Membre chevronné Avatar de kain_tn
    Homme Profil pro
    Inscrit en
    mars 2005
    Messages
    729
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : mars 2005
    Messages : 729
    Points : 2 242
    Points
    2 242

    Par défaut

    Citation Envoyé par yamashi Voir le message
    Je pense que dans le jeu vidéo les seules utilités sont pour la physique et les serveurs de jeux. La mémoire du GPU étant bien plus rapide que celle du CPU (je parle bien sur de la ram, pas des registres) il est plus intéressant de traite la logique d'un jeu du type MMORPG sur le GPU, c'est d'ailleurs ce que je fais sur mon projet personnel, permettant alors de permettre au CPU de gérer le réseau et uniquement le réseau, ce qui implique une meilleurs réactivité.
    Côté client ok, mais pour ce qui est des serveurs, il faut une carte vidéo compatible avec CUDA. Je ne pense pas qu'à l'heure actuelle, les serveurs proposés par les hébergeurs proposent autre chose qu'une simple carte intégrée... Par exemple, les dernières lames de dell ont une matrox g200 je crois (une carte de plus de 10 ans!)
    Copier c'est copier; voler c'est vendre un CD une vingtaine d'euros!


    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #include <stdio.h>
     
    int main(int argc, char **argv) {
     
        printf("So long, and thanks for the fish, Dennis...\n");
        return 0;
    }

  6. #6
    Membre actif

    Inscrit en
    février 2009
    Messages
    200
    Détails du profil
    Informations forums :
    Inscription : février 2009
    Messages : 200
    Points : 235
    Points
    235

    Par défaut

    Côté client ok, mais pour ce qui est des serveurs, il faut une carte vidéo compatible avec CUDA. Je ne pense pas qu'à l'heure actuelle, les serveurs proposés par les hébergeurs proposent autre chose qu'une simple carte intégrée... Par exemple, les dernières lames de dell ont une matrox g200 je crois (une carte de plus de 10 ans!)
    Je ne suis pas sûr de bien comprendre le sens de ta réflexion:

    Le serveur ne fait que transmettre des données qui ne transitent pas via la carte graphique..

  7. #7
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    juin 2008
    Messages
    7 636
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juin 2008
    Messages : 7 636
    Points : 13 481
    Points
    13 481

    Par défaut

    Citation Envoyé par kain_tn Voir le message
    Côté client ok, mais pour ce qui est des serveurs, il faut une carte vidéo compatible avec CUDA. Je ne pense pas qu'à l'heure actuelle, les serveurs proposés par les hébergeurs proposent autre chose qu'une simple carte intégrée... Par exemple, les dernières lames de dell ont une matrox g200 je crois (une carte de plus de 10 ans!)
    Bonjour,
    J'ai deux questions de béotien par rapport à ça : 1/Une application intégrant CUDA doit-elle être distribuée avec des DLL (ou autres ressources) particulières ? 2/Si le poste n'a pas de carte nVidia, il y a-t-il une émulation ou faut-il prévoir dans l'appli une solution de repli ?
    Merci.

  8. #8
    Membre chevronné Avatar de kain_tn
    Homme Profil pro
    Inscrit en
    mars 2005
    Messages
    729
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : mars 2005
    Messages : 729
    Points : 2 242
    Points
    2 242

    Par défaut

    Citation Envoyé par Rémi Coquet Voir le message
    Je ne suis pas sûr de bien comprendre le sens de ta réflexion:

    Le serveur ne fait que transmettre des données qui ne transitent pas via la carte graphique..
    Je sais mais Yamashi propose une idée plus que sympathique qui est d'utiliser CUDA pour traiter les calculs (lourds) de l'IA pour un MMO, sauf que ça ne me parait pas exploitable pour les MMO, car l'IA est traitée côté serveur pour éviter entre autres des problèmes de tricheries:
    sur des serveurs (et non des PC de particuliers), la carte graphique a des capacités très limitées (pour diverses raisons: elle est rarement utilisée et va servir tout au plus à afficher une console ou un menu, elle ne doit donc pas consommer de trop, chauffer de trop, prendre trop de place etc) et n'est surement pas compatible avec CUDA
    Copier c'est copier; voler c'est vendre un CD une vingtaine d'euros!


    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #include <stdio.h>
     
    int main(int argc, char **argv) {
     
        printf("So long, and thanks for the fish, Dennis...\n");
        return 0;
    }

  9. #9
    Membre actif

    Inscrit en
    février 2009
    Messages
    200
    Détails du profil
    Informations forums :
    Inscription : février 2009
    Messages : 200
    Points : 235
    Points
    235

    Par défaut

    Je sais mais...ça ne me parait pas exploitable pour les MMO, car l'IA est traitée côté serveur pour éviter entre autres des problèmes de tricheries...la carte graphique a des capacités très limitées... et n'est surement pas compatible avec CUDA
    L'IA est une chose, les traitements graphiques n'entrent pas (forcément) dans cette partie...
    Il est donc possible d'utiliser la technologie ATI à l'envers: Faire travailler les PCs sur les données graphique lourdes en traitements (les datas pouvant circuler compréssées sur le reseau) et reçoivent simplement les scripts de traitements: Un réseau d'automates où la puissance de calcul est déléguée à chaque feuille ce qui paraît nettement plus optimisé (mêmes si les calculs sont refaient plusieurs fois presque à l'identique sur chacune des feuilles active (c'est pas grave, le serveur est dé engorgé et les flux réseaux minimes, voip etc. restant viables) au niveau de la bande passante.

    Edit aurthogaf

  10. #10
    Membre actif

    Inscrit en
    février 2009
    Messages
    200
    Détails du profil
    Informations forums :
    Inscription : février 2009
    Messages : 200
    Points : 235
    Points
    235

    Par défaut

    deux questions:

    1/Une application intégrant CUDA doit-elle être distribuée avec des DLL (ou autres ressources) particulières ?

    2/Si le poste n'a pas de carte nVidia, il y a-t-il une émulation ou faut-il prévoir dans l'appli une solution de repli ?
    Pour la question 2, émulation veut dire: Est-ce que je peux utiliser mon CPU à la place . la réponse est oui ! Mais quelle était la question ?

    Si tu utilises du matériel ATI, ces derniers ont leurs propres solutions.
    Ceci dit, il semblerait qu'OpenCL puisse mettre tout le monde d'accord, mais j'ai peur, comme d'habitude, que les rapports de forces ne prennent la main sur la raison: OpenX n'ayant jamais apporté de solutions viables et pérennes.

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    janvier 2007
    Messages
    46
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : janvier 2007
    Messages : 46
    Points : 64
    Points
    64

    Par défaut

    J'ai assisté a une soutenance d'ingénieur en informatique et l'étudiant en question a utilisé cette technologie pour faire une simulation: "Mouvement des vagues et impactes au bord d'une plage ou sur un port" et le résultat été assai bluffant. Son promoteur un enseignant a l'université de Lyon travail en labo avec une équipe sur la réalisation de plusieurs simulations en utilisant CUDA parmi ces simulations: "Mouvement des nuages avec réflexions des rayons lumineux en provenance du soleil" et pour l'instant les résultats sont prometteurs.

    Je ne sais pas si mes sources sont vraies, mais je crois je jeux "Crysis" à bénéficié de cette technologie (A confirmer).

  12. #12
    Responsable Qt


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherches
    Inscrit en
    août 2008
    Messages
    23 304
    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 304
    Points : 140 563
    Points
    140 563

    Par défaut

    Citation Envoyé par Rémi Coquet Voir le message
    - Le transfert inter-cartes semble donc le plus intéressant, perturbe t'il DMA ou les autres flux PCIe ?
    Il ne s'agit de transfert entre les cartes, il s'agit de transférer des données d'un emplacement à un autre sur la mémoire (par exemple, pour effectuer un OU sur toute une plage mémoire, c'est à peu près à ce débit là).

    Citation Envoyé par Rémi Coquet Voir le message
    - Comment OpenCL peut-il générer du code à la fois pour NVIDIA et AMD ?
    OpenCL est un standard que nVidia et AMD vont suivre. Chacun va proposer son implémentation de OpenCL. nVidia la propose déjà pour ses développeurs enregistrés.

    Citation Envoyé par Rémi Coquet Voir le message
    - La compression hard (H.264) n'est-elle accessible que via CUDA ?
    Elle est aussi disponible pour CPU, mais alors c'est d'une lenteur incroyable.
    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 !

  13. #13
    Membre expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : novembre 2006
    Messages : 1 727
    Points : 3 288
    Points
    3 288

    Par défaut

    Salut,

    Citation Envoyé par yamashi Voir le message
    Mouvement des nuages avec réflexions des rayons lumineux en provenance du soleil
    Les deux exemples que tu proposes ne sont pas adapte a un environnement CUDA... Tu cherche du rendu, CUDA n'est pas fait pour ca (GPGPU = GPUs for Genetic and Evolutionary Computation). Pour ce que tu proposes il est bien plus intéressant d'utiliser des shaders...
    Je pense que le posteur ne parlait pas de l'affichage, mais plutôt de la physique sous-jacente dans les 2 exemples donnés

    Par contre heuu... Depuis quand GPGPU ce n'est plus "General-Purpose [computation on] Graphics Processing Units" ??? Qui l'a déclaré ??

    Pour un tuto: je verrais bien pas mal de pratique, avec ce qu'il faut de théorique pour comprendre un minimum histoire de pas jouer à harry potter

  14. #14
    Membre actif

    Inscrit en
    février 2009
    Messages
    200
    Détails du profil
    Informations forums :
    Inscription : février 2009
    Messages : 200
    Points : 235
    Points
    235

    Par défaut

    C'est pourtant pas sorcier

  15. #15
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    juin 2008
    Messages
    7 636
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juin 2008
    Messages : 7 636
    Points : 13 481
    Points
    13 481

    Par défaut

    Discussion engendrée sur CUDA ici

  16. #16
    Membre actif

    Inscrit en
    février 2009
    Messages
    200
    Détails du profil
    Informations forums :
    Inscription : février 2009
    Messages : 200
    Points : 235
    Points
    235

    Par défaut News CUDA

    « La communauté des développeurs nous a clairement indiqué qu'il y avait un besoin et une demande pour une solution professionnelle permettant d'utiliser les GPU dans les applications FORTRAN » : c’est par ces termes qu’Andy Kean, responsable des solutions de calcul GPU Tesla chez NVIDIA, a récemment annoncé un partenariat avec PGI (The Portland Group) afin de développer un compilateur FORTRAN pour CUDA.
    FORTRAN étant un langage de programmation spécialisé dans les applications mathématiques et de calcul scientifique, utiliser la puissance des GPU (compatibles CUDA) dans ce type de tache est assez logique. CUDA Fortran devrait voir le jour avant la fin de l'année, probablement au mois de novembre. D’ici là, PGI devrait donner un peu plus de détails sur CUDA Fortran à l’occasion de l'International Conference on Supercomputing qui se tiendra cette semaine à Hambourg.

  17. #17
    Membre à l'essai
    Profil pro
    Inscrit en
    juin 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : juin 2008
    Messages : 18
    Points : 13
    Points
    13

    Par défaut exemple de multiplication de matrices carrées

    Salut,

    j'essaie de tester l'exemple des matrices mais ça ne fonctionne pas.
    D'abord dans la fonction MatrixMulOnDevice(), les Md, Nd et Pd ne sont pas déclarés (??) mais de plus, le code ne compile pas:

    cette erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    matrix_cuda.cu(36): error: expression must have class type
    matrix_cuda.cu(37): error: expression must have class type
    pour ces lignes-là
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    float MdElement = Md[ty * Md.width + i];
    float NdElement = Nd[i * Nd.width + tx];
    J'ai peut-être loupé un truc mais "Md.width" ça me semble étrange, seulement je ne sais pas quoi mettre à la place

    Une idée?
    Merci!

  18. #18
    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

    Si tu mettais le code de la fonction... on pourrait voir ou se situe le problème.

  19. #19
    Membre à l'essai
    Profil pro
    Inscrit en
    juin 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : juin 2008
    Messages : 18
    Points : 13
    Points
    13

    Par défaut code

    Citation Envoyé par yamashi Voir le message
    Si tu mettais le code de la fonction... on pourrait voir ou se situe le problème.
    Le code est celui donné dans l'article présenté au début de la discussion => http://tcuvelier.developpez.com/gpgp.../introduction/

Discussions similaires

  1. Tres tres débutant(découverte de l'Oracle)
    Par argon dans le forum Oracle
    Réponses: 14
    Dernier message: 19/03/2006, 19h14

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