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

Moteurs 3D Discussion :

Notion : Programmation multi-GPU


Sujet :

Moteurs 3D

  1. #1
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2005
    Messages : 26
    Points : 10
    Points
    10
    Par défaut Notion : Programmation multi-GPU
    Bonjour,

    Je souhaitais savoir s'il est possible d'utiliser la puissance de calcul de plusieurs cartes graphiques (branché sur une même carte mère sans connecteur de type SLI ou Crossfire) ?
    Si oui comment utiliser le GPU des cartes (langage de programmation) ?
    Les cartes graphiques peuvent-elle être de constructeurs différents (ATI/NVIDIA) ?
    Un programme en C++ peut manager chaque GPU indépendamment (dédier le travail graphique sur un et des opérations de calcul physique sur un autre) ?

    Merci pour vos réponses !

  2. #2
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 361
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 361
    Points : 20 381
    Points
    20 381
    Par défaut
    Salut je pense que c'est du ressort de l'API graphique
    Par exemple sous Direct X il ya IDirect3DDevice9Ex :: SetGPUThreadPriority()
    As-tu regardé dans le SDK de Direct X par exemple ?

  3. #3
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2005
    Messages : 26
    Points : 10
    Points
    10
    Par défaut
    Je n'ai pas regardé en détail l'API DirectX. Comme tu viens de le préciser on peut choisir son device de sortie (DirectX doit certainement questionner l'OS pour obtenir le matériel).
    En revanche, comment faire ça avec OpenGL par exemple ou même avec une technologie GpGPU (sans solution constructeur type CUDA) ?

    Je n'ai pas précisé mais je veux éviter (dans la mesure du possible) des solutions construteur ou des langages propres à un OS/machine.

  4. #4
    Membre expérimenté

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2006
    Messages
    450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 450
    Points : 1 630
    Points
    1 630
    Par défaut
    Pour pouvoir te conseiller, il faudrait qu'on sache ce que tu veuilles faire donc voici ma question : que comptes-tu calculer sur les cartes graphiques ?
    Je ne réponds à aucune question par MP, posez vos questions sur le forum adéquat.
    Profils : G+ - LinkedIn

  5. #5
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2005
    Messages : 26
    Points : 10
    Points
    10
    Par défaut
    Je veux juste savoir si c'est possible et ce qu'il faut utiliser.
    Le but étant de prendre X cartes graphiques de marques différentes les monter sur un seul PC pour les faire travailler sur une même application(pas forcement graphique d'ailleur).

  6. #6
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Pour ça il faut taper dans OpenCL, mais c'est peut-être encore trop jeune pour être exploitable.

  7. #7
    Membre expérimenté

    Profil pro
    Programmeur
    Inscrit en
    Août 2002
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Programmeur

    Informations forums :
    Inscription : Août 2002
    Messages : 1 091
    Points : 1 679
    Points
    1 679
    Par défaut
    Note à Mat.m : SetGpuThreadPriority() ne sert pas du tout à la programmation multi-gpu. Je ne sais pas d'où tu sors cette info. Cet appel sert uniquement au scheduler interne à l'OS Vista (c'est l'équivalent de la priorité d'execution par process mais rapporté cette fois aux tâches GPU puisque le GPU peut faire tourner plusieurs applications en même temps en particulier sous Vista).

    Il n'y a pas d'interface permettant de programmer (facilement et de manière performante) le multi-GPU en dehors de l'accélération SLI/Crossfire fournie par les fabricants.

    Le mieux que tu puisses faire sans faire appel à cette accélération est de créer des devices séparés sur chaque GPU (en mode non SLI), et de faire des calculs *indépendants* pour ne pas avoir à faire de copie couteuse d'un GPU à l'autre.

    Si copie il y a entre les GPUs, comme tu ne peux pas les faire se parler sans appel à une interface bas niveau non public, le mieux que tu puisses faire c'est de copier en mémoire système avec le CPU et avec toutes les traductions couteuses que cela implique (sans compter la latence, la bande passante limitée etc.). C'est parfois un gain lorsque la bande passante à transmettre est suffisamment petite pour permettre aux GPUs de faire du travail intéressant. Bref cela dépend de la charge de travail mais ce n'est pas idéal. Autant dire que les drivers SLI/Crossfire ne procèdent pas comme cela sinon ils n'atteindraient jamais des multiplicateurs de 2X etc.

    LeGreg

    Mon site web | Mon blog | Mes photos | Groupe USA
    > BONJOUR, JE SUIS NOUVEAU SUR CE FORUM
    > presse la touche caps lock, stp
    > OH.. MERCI C EST BEAUCOUP PLUS FACILE COMME CA

  8. #8
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2005
    Messages : 26
    Points : 10
    Points
    10
    Par défaut
    Merci beaucoup tous le monde ! Ca me confirme ce que j'ai pu voir sur le net.
    A l'heure actuel il n'y a que CUDA pour des solutions NVIDIA le prochain épisode sera avec OpenCL.

    Wait and see !

  9. #9
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2005
    Messages : 26
    Points : 10
    Points
    10
    Par défaut
    J'ai trouvé une petite FAQ sur la question (je ne sais pas si toutes les infos sont vraies) :
    http://www.equalizergraphics.com/doc...OpenGLFAQ.html

    Equalizer est un programme qui permet de partager l'affichage sur plusieurs machines (et GPUs) pour afficher des scènes complexes.

    Ca peut donner des idées !!!

  10. #10
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 361
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 361
    Points : 20 381
    Points
    20 381
    Par défaut
    Salut le Greg ok désolé pour la confusion apparemment c'est vrai il n'ya rien qui puisse permettre une programmation directe SLI

  11. #11
    Membre averti
    Homme Profil pro
    Game Graphics Programmer
    Inscrit en
    Août 2006
    Messages
    408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Game Graphics Programmer
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2006
    Messages : 408
    Points : 392
    Points
    392
    Par défaut
    A ma connaissance, il n'y a que NVscale (http://developer.nvidia.com/object/nvscale_home.html) qui permet de travailler sur plusieurs GPU Quadro Plex uniquement.

    Sinon, effectivement CUDA serait à rechercher ou alors l'équivalent d'ATI. Mais ce domaine est encore tellement récent qu'il n'y a que très peu d'informations dessus, et il vaut vraiment mieux attendre ce que va donner OpenCL.

    En y pensant, dans le SDK de DirectX, il y avait des exemples de DirectX 11 aussi, traitant du Compute Shader.

  12. #12
    Rédacteur
    Avatar de Bakura
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    1 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 386
    Points : 2 640
    Points
    2 640
    Par défaut
    Deux nouvelles extensions ont été apportées par OpenGL 3 qui visiblement permettent de contrôler les différentes cartes graphiques, mais je ne sais pas ce que ça vaut (il faut les Catalyst 9.2 chez ATi) : http://www.opengl.org/registry/specs...ssociation.txt

    Je ne me souviens plus du nom de l'extension similaire chez nVidia.

  13. #13
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2005
    Messages : 26
    Points : 10
    Points
    10
    Par défaut
    Je viens de voir ces nouvelles extensions pour ATI.
    Pour NVIDIA, c'est WGL_nv_gpu_affinity :
    http://developer.download.nvidia.com...u_affinity.txt

    A priori, ça permet de lier un contexte OpenGL à un ou plusieurs GPUs.

  14. #14
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Citation Envoyé par Ange_de_coren Voir le message
    Merci beaucoup tous le monde ! Ca me confirme ce que j'ai pu voir sur le net.
    A l'heure actuel il n'y a que CUDA pour des solutions NVIDIA le prochain épisode sera avec OpenCL.

    Wait and see !
    AMD avait CTM et proposait CAL et Brook+. Ils étaient les premiers et se sont faits avoir par la faiblesse logicielle.
    Mais une fois qu'ils auront OpenCL, ils vont écraser la solution NVidia (ceux qui passaient par CAL ou Brook+ le pensaient déjà, donc avec un standard, ça sera le cas).
    Citation Envoyé par Laurent Gomila Voir le message
    Pour ça il faut taper dans OpenCL, mais c'est peut-être encore trop jeune pour être exploitable.
    Exact. NVidia doit sortir ses drivers compatibles ce mois-ci, AMD ne devrait pas tarder et ça sera supporté par OS X 10.6.
    Citation Envoyé par Ange_de_coren Voir le message
    Bonjour,

    Je souhaitais savoir s'il est possible d'utiliser la puissance de calcul de plusieurs cartes graphiques (branché sur une même carte mère sans connecteur de type SLI ou Crossfire) ?
    Si oui comment utiliser le GPU des cartes (langage de programmation) ?
    Les cartes graphiques peuvent-elle être de constructeurs différents (ATI/NVIDIA) ?
    Un programme en C++ peut manager chaque GPU indépendamment (dédier le travail graphique sur un et des opérations de calcul physique sur un autre) ?

    Merci pour vos réponses !
    Tu ne pourras sans doute pas mélanger les cartes. Ce sera de plus une programmation totalement différente. Déjà, il faudra savoir programmer une carte correctement. S'il y en a une deuxième, elle pourra toujours servir... au graphisme

Discussions similaires

  1. programmation multi-agent en java
    Par ber_smmirrou dans le forum Programmation par agent
    Réponses: 7
    Dernier message: 06/04/2008, 19h55
  2. Programmation Multi-threadée et Synchronisme
    Par ChPortos dans le forum Windows Forms
    Réponses: 2
    Dernier message: 18/04/2007, 11h59
  3. Réponses: 3
    Dernier message: 14/03/2007, 13h01
  4. Programme multi-PC
    Par cjacquel dans le forum MFC
    Réponses: 1
    Dernier message: 08/03/2006, 11h22
  5. Réponses: 11
    Dernier message: 14/02/2006, 00h26

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