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 :

Long calculs => plante


Sujet :

OpenGL

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2008
    Messages : 31
    Points : 27
    Points
    27
    Par défaut Long calculs => plante
    Bonjour,
    Pourquoi sa plante quand on veut faire de long calculs avec la carte graphique ?
    Je veux dessiner des Mandelbrot.
    A partir d'un certain nombre d’itération maximum l'image produite ressemble à la neige de la télé et même parfois l'application plante.

    * quand je dis long je pense à plus de 20 secondes de calcul.

  2. #2
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2011
    Messages
    576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 576
    Points : 1 528
    Points
    1 528
    Par défaut
    Salut,

    Peut être un timeout du driver GPU.
    Windows kill le processus si le driver graphique ne répond pas au bout de 2s.

    Plus de détail ici:
    http://msdn.microsoft.com/en-us/libr.../gg487368.aspx
    La perfection est atteinte, non pas lorsqu’il n’y a plus rien à ajouter, mais lorsqu’il n’y a plus rien à retirer. - Antoine de Saint-Exupéry

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2008
    Messages : 31
    Points : 27
    Points
    27
    Par défaut
    Ah il existe une limite de temps...
    Je suis sur linux et sa doit pas être la même car j'ai pu faire des images en ~20s.

  4. #4
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2011
    Messages
    576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 576
    Points : 1 528
    Points
    1 528
    Par défaut
    Sous linux il n'y a pas de timeout à ma connaissance.
    Par contre, le timeout n'arrive que si tu passe vraiment 2s dans le drivers, c'est à dire que tu passe vraiment 2s dans une commande de dessin.

    Dans ton cas ça sent le leak quelque part. A toi de trouver plus d'info parce que là on peut pas vraiment t'aider...
    La perfection est atteinte, non pas lorsqu’il n’y a plus rien à ajouter, mais lorsqu’il n’y a plus rien à retirer. - Antoine de Saint-Exupéry

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2008
    Messages : 31
    Points : 27
    Points
    27
    Par défaut
    Tu veux peut-être voir le code : mandelbrot_df.frag
    Par exemple sa à planté quand j'ai set accuracy à 100000. Après environ 10 secondes.
    Les GPU ne sont peu être pas fait pour faire de long calculs ???

  6. #6
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2011
    Messages
    576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 576
    Points : 1 528
    Points
    1 528
    Par défaut
    Tu as le même problème avec un tout petit viewport (genre 2x2, voir 1x1) ?
    La perfection est atteinte, non pas lorsqu’il n’y a plus rien à ajouter, mais lorsqu’il n’y a plus rien à retirer. - Antoine de Saint-Exupéry

  7. #7
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 075
    Points : 7 981
    Points
    7 981
    Par défaut
    Tu as 2 posibilités, soit desactiver le Watchdog du driver (mauvaise idée tu risque de cramer la carte :p).

    Soit tu fait ton rendus en plusieurs passes ou par "Tiling".

    J'ai experimenté les même problèmes que toi a l'epoque pour dessiner des Mandebulb et autres joyeuseté
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2008
    Messages : 31
    Points : 27
    Points
    27
    Par défaut
    Citation Envoyé par pyros Voir le message
    Tu as le même problème avec un tout petit viewport (genre 2x2, voir 1x1) ?
    Oui, avec un nombre plus élevé pour accurancy

    Soit tu fait ton rendus en plusieurs passes ou par "Tiling".
    J'avais envisagé de faire en plusieurs passes en coupent l'images en parties. Je vais y réfléchir sérieusement. Il faut que je trouve quel algorithme utiliser pour créer la grille de découpage. Comment savoir à l'avance si sa va planter.

    PS : En plus certaines zones de l'images demandent plus de calcul que d'autres... Tiens sa m'inspire une idée sa... ^^

  9. #9
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 075
    Points : 7 981
    Points
    7 981
    Par défaut
    Citation Envoyé par Aratox Voir le message
    Oui, avec un nombre plus élevé pour accurancy


    J'avais envisagé de faire en plusieurs passes en coupent l'images en parties. Je vais y réfléchir sérieusement. Il faut que je trouve quel algorithme utiliser pour créer la grille de découpage. Comment savoir à l'avance si sa va planter.

    PS : En plus certaines zones de l'images demandent plus de calcul que d'autres...
    "Comment savoir à l'avance si sa va planter"

    Tu peux pas le savoir a l'avance a priori. Si tu prends une vieille CG, avec le meme code au meme endroit dans la fractal etc ca plantera plus etc ...

    Sinon il y'a aussi la methode plusieur passe sans découpe.

    Comme le path tracing que tu peux voir dans certains logiciels de rendus 3D.

    Tu calcules que quelques point de l'image au hasards, que tu accumule dans un buffer et que tu affiches au final. (en redivisant les valeurs de lumiere bien sure).
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  10. #10
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2011
    Messages
    576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 576
    Points : 1 528
    Points
    1 528
    Par défaut
    Si ça crash aussi avec un viewport de 1x1, tiler le viewport ne marchera malheureusement pas car ça signifie que c'est le calcul d'un unique pixel qui est trop long.

    Il faut que tu fasse un système de multipass comme l'a dit wax78. Tu fait une partie du calcul, tu stock tout ce dont tu as besoin dans un ou plusieurs FBO, et tu recommence le calcul là où tu t'étais arrêté à la pass d'avant et ainsi de suite de manière itérative.

    Par contre, bonjour les perf de m***e...
    La perfection est atteinte, non pas lorsqu’il n’y a plus rien à ajouter, mais lorsqu’il n’y a plus rien à retirer. - Antoine de Saint-Exupéry

  11. #11
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 075
    Points : 7 981
    Points
    7 981
    Par défaut
    Citation Envoyé par pyros Voir le message
    Par contre, bonjour les perf de m***e...
    Le fait de faire du multipass ne va pas faire des performances de merdes, je ne comprends pas pourquoi tu dis ca. Par contre tiler avec des carrés de 1 pixel ca sera performance de merdes.
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  12. #12
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2011
    Messages
    576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 576
    Points : 1 528
    Points
    1 528
    Par défaut
    Avec du multi pass de ce type on force une synchro. Comme la pass n+1 a besoin des infos de la pass n, on doit finir la passe n en entier avant de commencer la pass n+1.

    Rajouter à ça qu'il faut parfois une synchro CPU entre les pass (pour récupérer le résultat d'un query quelconque), bref rien de mieux pour casser le pipeline graphique.
    J'ai déjà eu des perf jusqu'à 5 fois moins bonne en multi-pass qu'en mono-pass, juste à cause de problèmes de synchro...
    La perfection est atteinte, non pas lorsqu’il n’y a plus rien à ajouter, mais lorsqu’il n’y a plus rien à retirer. - Antoine de Saint-Exupéry

  13. #13
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 075
    Points : 7 981
    Points
    7 981
    Par défaut
    Citation Envoyé par pyros Voir le message
    Avec du multi pass de ce type on force une synchro. Comme la pass n+1 a besoin des infos de la pass n, on doit finir la passe n en entier avant de commencer la pass n+1.
    Je ne suis pas dutout d'accord avec toi. La pass N+1 n'a pas besoin de des infos de la pass N. Chaque passe accumule des resultat qui convergeront de plus en plus vers une solution. C'est le principe du path tracing, mais peut etre ne parlons nous pas de la même chose.
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  14. #14
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2008
    Messages : 31
    Points : 27
    Points
    27
    Par défaut
    J'ai fait ce qui me semblait le plus simle, le Tiling.
    J'ai divisé mon image en une grille 4x4.

    Y a juste un truc qui me tracasse.
    Voila un bout de mon code.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
        shader.enableAttributeArray(0);
     
        for (int y = 0; y < sy; ++y) {
            for (int x = 0; x < sx; ++x) {
                int dx = 2 * x - sx + 1;
                int dy = 2 * y - sy + 1;
                setUniformCenter(glUniform1dv, quad, shader, cx + dx * scaleX, cy + dy * scaleY);
     
                glViewport(x * subSize.width(), y * subSize.height(), subSize.width(), subSize.height());
                glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
            }
        }
     
        shader.disableAttributeArray(0);
     
        _image = buffer.toImage();
    J'ai mis des timers et il s'avère que tout le temps d'éxecution se passe dans.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    _image = buffer.toImage();
    Es-ce vraiment du tiling ?

  15. #15
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2011
    Messages
    576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 576
    Points : 1 528
    Points
    1 528
    Par défaut
    Citation Envoyé par wax78 Voir le message
    Je ne suis pas dutout d'accord avec toi. La pass N+1 n'a pas besoin de des infos de la pass N. Chaque passe accumule des resultat qui convergeront de plus en plus vers une solution. C'est le principe du path tracing, mais peut etre ne parlons nous pas de la même chose.
    Ah ok, en fait non j'avais mal compris ce dont tu parlais

    Moi je parlais de faire du multipass uniquement pour éviter le timeout. On fait une partie du calul, on sauvegarde l'état et on reprend là où on s'est arrête juste histoire de faire coucou à l'OS en passant. Mais l'algo reste fondamentalement le même en mono ou multi pass.
    La perfection est atteinte, non pas lorsqu’il n’y a plus rien à ajouter, mais lorsqu’il n’y a plus rien à retirer. - Antoine de Saint-Exupéry

  16. #16
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2008
    Messages : 31
    Points : 27
    Points
    27
    Par défaut
    Citation Envoyé par pyros Voir le message
    Il faut que tu fasse un système de multipass comme l'a dit wax78. Tu fait une partie du calcul, tu stock tout ce dont tu as besoin dans un ou plusieurs FBO, et tu recommence le calcul là où tu t'étais arrêté à la pass d'avant et ainsi de suite de manière itérative.
    C'est obligé de travailler avec un FBO ?

    J'ai voulu transformé une image de RGB à BGR.
    J'ai dessiné l'image en RGB puis j'ai lancé ce shader mais sa ne fonctionne pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #version 130
     
    out vec4 color;
     
    void main(void)
    {
        // change RGB en BGR
        color = color.bgra;
    }

  17. #17
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 075
    Points : 7 981
    Points
    7 981
    Par défaut
    Citation Envoyé par Aratox Voir le message
    C'est obligé de travailler avec un FBO ?
    Non je ne pense pas
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  18. #18
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2008
    Messages : 31
    Points : 27
    Points
    27
    Par défaut
    Et au niveau du shader, on fait comment pour récupérer les anciennes données ?

  19. #19
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2011
    Messages
    576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 576
    Points : 1 528
    Points
    1 528
    Par défaut
    Tu bind le fbo de la pass d'avant dans une texture.
    Enfin, plus précisément, tu bind la texture que tu as utilisé dans la fbo de la pass d'avant.

    Pour ton shader, c'est normal qu'il ne marche pas car tu ne lis rien en entrée. Il faut faire quelque chose du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    sampler2D texture;
    void main()
    {
      gl_FragColor = texture2D(texture, gl_TexCoord[0].xy).bgra;
    }
    Dsl, j'ai vraiment du mal à ne plus utiliser gl_FragColor
    La perfection est atteinte, non pas lorsqu’il n’y a plus rien à ajouter, mais lorsqu’il n’y a plus rien à retirer. - Antoine de Saint-Exupéry

  20. #20
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2008
    Messages : 31
    Points : 27
    Points
    27
    Par défaut
    ok donc obligé d'utiliser les textures. Le problème c'est qu'il faut avoir des dimension de puissance de 2... Il faut donc faire aussi du tiling ?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Script de calcul qui plante depuis passage du serveur sur VMware
    Par Compass dans le forum EPM (Hyperion)
    Réponses: 1
    Dernier message: 11/03/2010, 12h21
  2. Mettre à jour mon interface durant de longs calculs
    Par Rodrigue dans le forum C++/CLI
    Réponses: 7
    Dernier message: 16/02/2008, 11h26
  3. Crash pendant un long calcul
    Par Abhorash dans le forum MATLAB
    Réponses: 3
    Dernier message: 27/04/2007, 08h28
  4. temps de calculs extremement long !!
    Par salseropom dans le forum C++
    Réponses: 9
    Dernier message: 19/01/2005, 20h12
  5. calcul melangeant int et long int ?
    Par ThR dans le forum C
    Réponses: 2
    Dernier message: 06/01/2003, 01h13

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