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

OpenGL Discussion :

Calcul determinant avec OpenGL


Sujet :

OpenGL

  1. #1
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 10
    Par défaut Calcul determinant avec OpenGL
    Bonjour a tous.
    Est ce que quelqu'un aurait une idée pour calculer le determinant d'une matrice 3x3 et 4x4 en se servant de fonction OpenGL de telle sorte que le calcul se fasse au maximum sur le GPU. Se serait pour effectuer un nombre important de calcul de determinant a la seconde.

    En bref :
    -Fonction OpenGL pour calcul determinant de matrice
    -Maximum de charge sur le CPU

  2. #2
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Par défaut
    Bonjour,

    il existe des tas de méthodes de calculs de déterminants d'une matrice !!!!
    Tournes toi donc vers un livre de math pour avoir les formules.

    Mais pour une matrice 3*3, inutile d'utiliser le calcul matriciel d'OPENGL, entres directement le calcul à la main :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    X1 X2 X3
    X4 X5 X6
    X7 X8 X9
    La formule du déterminant est alors :
    X1(X5X9-X6X8) - X4(X2X9-X3X8) + X7(X2X6-X3X5).

    Il faut faire de même pour uen matrice 4*4.
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  3. #3
    Membre chevronné
    Avatar de Edouard Kaiser
    Profil pro
    Inscrit en
    Février 2004
    Messages
    521
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2004
    Messages : 521
    Par défaut
    Je pense qu'il se tourne vers OpenGL afin d'effectuer ces calculs sur le GPU pour décharger le CPU justement

  4. #4
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Par défaut
    Pour un simple calcul linéaire, c'est assez simple et je pense moins couteux.
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  5. #5
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 10
    Par défaut
    Merci pour la reponse mais ce n'est pas tout a fait ce que je cherchais reellement. Vu que dans mon application je vais devoir faire enormément de calcul de déterminant. mon but final est de migrer ces calculs de déterminant sur le GPU et donc d'effectuer des calculs réalisable sur le GPU de façon optimisée sous la forme de produit scalaire, produit vectoriel ou produit de matrice. Pour des matrices ce ne serait pas trés embétant mais pour des matrice 4x4 cela devient plus embétant lorsqu'il y en a un grand nombre. (3x3 : 9mult+4soustraction+1addition, 4x4 : 40 mult+18 soustraction+5addition ::::: soit un facteur 4)

    Merci tout de meme

  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 : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    A mon avis, impossible de faire ce genre de calculs sur le GPU sans passer par un shader, et encore faut voir ce que tu veux faire des résultats (si c'est pour les récupérer en mémoire centrale laisse tomber).

  7. #7
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 10
    Par défaut Shader
    En effet je comptait passer par des shaders pour effectuer ses calculs s'il n'y avait pas de fonction haut niveau opengl. Ce qui m'embetre c'est que j'ai besoin d'effectuer 4 a 5 calculs de determinant 3x3 ou 4x4 par element de mon environnement que je souhaite recuperer en memoir centrale et il est possible qu'il y ait plusieurs millliers d'elements.
    Je souhaitais essayer de dechargere le CPU de ces calculs vu que le GPU est plutot a l'aise avec les operation sur les matrices. Mais une question m'interpelais. est ce que ca va pas etre plus long de faire des envoie de matrices sur le GPU pour des operation tel que le calcul du determinant plutot que d'effectuer le calcul tout simplement.

    Autre question qui s'en suit quel langage de shader utiliser CG, GLSL, HLSL ?lequel est le plus portable ? Le quel est le plus utiliser a l'heure actuelle vis a vis de sa portabilité

    Merci

  8. #8
    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 : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Effectivement, envoyer les matrices et les récupérer en mémoire centrale après calculs, en plus d'être irréalisable, serait bien plus lent que simplement les faire avec le CPU. De plus les cartes graphiques sont rapides pour faire ce pour quoi elles sont précablées, et je ne pense pas que le calcul de déterminant et autre en fasse partie. Ton CPU par contre, possède tout un tas d'instructions pour accélérer ce genre de calculs (MMX, SSE, ...).

    Concernant le langage de shading, HLSL est à oublier (DirectX), GLSL est le langage d'OpenGL, et Cg est compatible avec les 2 APIs.

  9. #9
    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 : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Pour des petits calculs comme celui-ci, je pense que le temps de transférer les données au GPU, d'attendre qu'il calcule et les récupérer, ça fait plus de temps CPU que qqs multiplications.

  10. #10
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 10
    Par défaut
    Merci pour la reponse, je me douter d'un truc du genre mais je n'etait pas sur ! Donc on peut dire que ca vaut pas le coup. Par contre si je fais mais 4 a 5 calculs de matrice en meme temps via le shader sur le GPU et que celui ci me retourne juste le resultat final de façon plus globale est ce que ca peut valoir le coup.
    En fait il s'agit de calcul de détection d'un point a l'intérieur d'un triangle ou a l'intérieur d'un tetraedre, calcul d'intersection entre< primitives ....
    A la rigueur y a personne qui connaitrais une méthode assez simple pour effectuer ces calculs en opengl de façon assez simple en utilisant le GPU ou non.
    Est ce qu'il serait interessant d'effectuer le calcul d'intersection ou de detection entièrement sur le GPU et de ne sorti_r que le resultat.
    Du coup CG ou GLSL, y en a un qui est prférable ? mis a part la portabilite qui semble accru grace a CG. Vu que de toute façon mon application utilise OpenGL 1.5 actuellement.

    Une autre petite question :
    Ou est ce que je peux telecharger OpenGL 2.0 pour windows (Visual C++)

  11. #11
    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 : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Comme je te l'ai dit, le pipeline d'execution de la carte graphique ne va que dans un sens, tu pourras faire des calculs dans tes shaders mais les résultats n'auront aucune chance de revenir vers ton CPU. Vouloir transférer des calculs matriciels sur le GPU (sans but de s'en servir directement pour influer sur le rendu) n'a aucun sens.

    Je ne pense pas que tu puisses télécharger OpenGL, il faut se contenter de la version fournie (toujours la 1.1 sous Windows) et utiliser les extensions -- si je ne me trompe pas.

  12. #12
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 10
    Par défaut GPU
    Comme tu le decrit, ce que je souhaite faire c'est, effectuer des calculs sur les shader et recuperer les resultat de ces calculs sur le CPU
    Je souhaite me servir du GPU comme d'un coprocesseur qui a une rapidité d'execution accru pour les calculs sur les matrice (mes calculs d'intersection, detection d'intrusion)
    Es tu vraiment sur que l'on ne peut pas recuperer les resultat des calculs apres qu'ils ait ete effectuer sur GPU.
    Ce servir du GPU pour sans servir de co'processeur du CPU pour des calculs n'ayant aucun rapport avec le rendu est un objectifs de GPGPU www.gpgpu.org


    Gilles

    PS: Merci pour les info concernant la lib, ca repond completement a ma question. je pensais qu'on pouvais la trouver mais si elle est pas telechargeable ca serft a rien que je continue a chercher

  13. #13
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Sans pouvoir dire si cela pourra t'aider, j'ai eu l'occasion de participer à la présentation de ce papier...

    En gros, il accélère un programme en utilisant le GPU en tant que coprocesseur. Il illustre sa solution avec le rendu d'image mais c'est un exemple.

    http://www.esuna.co.uk/~jay/papers/accelgpu.pdf

    En principe, je pense que tu trouveras des réponses voir des références pour tes recherches...

    Jc

  14. #14
    Membre Expert
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 547
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 547
    Par défaut
    j'aurai éventuellement une bidouille à soumettre, à voir si c'est faisable vu que je n'ai pas encore touché réellement aux shaders

    peut-on faire les calculs sur le gpu ? ça oui

    et stocker les résultats des calculs dans une texture ?
    ou alors, si ce n'est que quelques matrices, stocker le résultat dans une des matrices MODELVIEW, PROJECTION, TEXTURE (donc 3 maxi)

    et peut-on faire des push/pop de matrices dans un vertex shader ?
    auquel cas on peut faire se servir de la pile pour passer les matrices en paramètres, et pour les récupérer, et on prend une variable opengl pour indiquer le nombre de matrices

    Loulou ou Bafman entre autres qui connaissent les shaders sauront dire si ce genre de bidouille est réalisable
    Tutoriels OpenGL
    Je ne répondrai à aucune question en MP
    - Si c'est simple tu dis que c'est compliqué et tu le fait
    - Si c'est compliqué tu dis que c'est simple et tu le sous-traite ou le fait faire par un stagiaire.

  15. #15
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 10
    Par défaut
    C exactement le style de bidouille auquel je pensait, mais je n'ai pas encore essayer et je voulais savoir si ca pouvait se faire avant de m'y lancer.
    En gros ce que je veux c pouvoir recuperer au pire une variable quelconque qui serait suceptible de contenir le resultat de mon calcul sur le GPU, meme en tant que texture ou position ou autre.

  16. #16
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 10
    Par défaut Recuperer resultat
    Y a t il une requete OpenGL ou GLSL qui permet de recuperer le resultat calculé sur le GPU ou sinon une méthode quelconque qui permet de recuperer sur le CPU le resultat d'un calcul par l'intermédiaire des variable de base du GPU ou par une autre variable.
    Par hasard personne n'aurait un exemple de ce style.

  17. #17
    Invité de passage
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 1
    Par défaut
    Bonjour,

    Pour être bref,
    - Pour mettre à jour OpenGL, c'est le driver de ta carte graphique que tu dois mettre à jour (et donc il faut que ta carte supporte OpenGL 2)
    - Oui c'est possible de récupérer le travail d'un pixel shader, dans une texture : Pour cela, : glReadPixels(x,y,largeur, hauteur, format de lecture (GL_RGBA par ex), format de sortie (ex : GL_FLOAT), tableau)
    - Tu peux aussi utiliser des FBO (frame buffer Objects), qui est une mémoire graphique qui remplace l'écran (tu dessine dedans en fait) et tu peux la récupérer sous forme de texture et la réutiliser comme donnée pour des shaders plus tard

  18. #18
    Membre éclairé
    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
    Par défaut
    l'idée de Shenron n'est pas faisable. Un shader ne fait que lire les matrices du système pour les utiliser de facon interne, et tout ce stack est geré en software par le driver OpenGL (ce n'est pas pour rien que ca va jarter avec GL3 et que ca n'existe plus dans GL ES).
    Sinon pour recupérer les matrices, ce serait pas plus simples de les écrire dans une texture 1D float4 sous forme de quaternions (direct pour une mat3x3) ou deux textures (quaternions + position pour une mat4x4) ?

    Ah oui, regarde du côté de CUDA et GPGPU si par hasard ca ne correspond pas À tes besoins...

  19. #19
    Membre Expert
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 547
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 547
    Par défaut
    Citation Envoyé par Kurisu Voir le message
    Ah oui, regarde du côté de CUDA et GPGPU si par hasard ca ne correspond pas À tes besoins...
    si je devais aujourd'hui répondre à ben-hur je l'orienterai vers Cuda sans hésiter
    mais cela implique à ma connaissance d'avoir une carte vidéo nVidia geforce de série 8 minimum
    Tutoriels OpenGL
    Je ne répondrai à aucune question en MP
    - Si c'est simple tu dis que c'est compliqué et tu le fait
    - Si c'est compliqué tu dis que c'est simple et tu le sous-traite ou le fait faire par un stagiaire.

  20. #20
    Membre éclairé
    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
    Par défaut
    Il n'y a pas que CUDA, il y a aussi OpenCL (à venir, certes).
    Sinon, je ne sais pas ce que ca vaut, vu que je ne m'en suis jamais servi (bon CUDA non plus à vrai dire), mais ca semble intéressant: GL Math (glm), http://glm.g-truc.net/

Discussions similaires

  1. Probleme avec OpenGL
    Par Sh. dans le forum OpenGL
    Réponses: 3
    Dernier message: 04/11/2004, 12h48
  2. Boite de dialogue avec opengl
    Par inddzen dans le forum OpenGL
    Réponses: 3
    Dernier message: 23/04/2004, 20h25
  3. interface utilisateur avec OpenGL
    Par demis20 dans le forum OpenGL
    Réponses: 6
    Dernier message: 03/10/2002, 12h27

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