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

Threads & Processus C++ Discussion :

Comment paralléliser l'affichage de la matrice WIN API, GDI+


Sujet :

Threads & Processus C++

Mode arborescent

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de athlon64
    Profil pro
    Inscrit en
    Février 2009
    Messages
    243
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 243
    Par défaut Comment paralléliser l'affichage de la matrice WIN API, GDI+
    Bonjour,

    j'ai un programme d'automate cellulaire, que j'aimerais optimiser pour gagner en vitesse d’affiche. Le fonctionnement du programme se définit comme suivant :

    1-Les cellules sont des carrés d'une matrice dont je définie le nombre.

    2-Au démarrage chaque cellule peut prendre deux valeurs possibles(true =vivant, false =morte)

    3-L'état de chaque cellule évolue à l'instant t1 en fonction du nombre de cellules qui l'entourent au temps t.

    4-La matrice évolue ainsi de t(0)->t(n) avec n qui tend vers l'infinie.

    5-Ainsi à l’instant t(n) par exemple, je fige la matrice, je relève les valeurs pour calculer le nouvel état à t(n+1).



    Le programme contient deux boucles de calculs principales.
    -la première est celle qui calcule la valeur que prendra chaque cellule à l'instant suivante.
    -la seconde est celle qui utilise GDI+ (graphics.FillRectangle) pour tracer la couleur de chaque cellule en fonction de la valeur calculée.

    L'affichage est fluide lorsque que j'ai 100*100 par exemple, 10 000 cellules à traiter une par une ça passe.

    quand je passe à 1000*1000, =>1 million de cellules à traiter, l’affichage devient très lente et pourtant j'ai une charge de processeur qui ne dépasse jamais 25% au total et jamais 50% par coeur. Le programme passe la majorité de son temps dans la boucle d'affichage.

    j'ai cherché pas mal de solution sur le net et après plusieurs tests, j'ai gardé openMP qui s'avère de très loin le plus efficace comparé à parrallel_for de la <ppl> et parrallel_for_fixed.

    j'ai ainsi optimisé la première boucle de calcul qui divise la boucle sur 4 threads, ça n'a pas apporté grand chose pratiquement rien car le gros du temps est passé dans la boucle d'affichage. J'ai trouvé aucune solution pour partager le travail entre les 4 coeurs. GDI+ ne supportant pas les threads apparemment.


    Quelqu’un pourrait m'aider pour augmenter la fluidité svp ?

    code coeur de la boucle d'affichage
    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
    for(int colonne=0;colonne<m_nTaille;colonne++)//pour chaque colone de la  ligne choisie
    		{
     
    			if ( m_Cellules[ligne*m_nTaille+colonne] == true)
     
    			{	
    				g.FillRectangle(&CaseVivante, ZonesCellule); //couleur "CaseVivante" pour la cellule vivante
    			}
     
    			else
     
    			{
    				g.FillRectangle(&CaseMorte, ZonesCellule);//couleur "CaseMorte" pour la cellule morte
    			}
    }
    Images attachées Images attachées    

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 15/11/2007, 12h31
  2. [VB6] Comment modifier l'affichage au sein d'un Webbrowser
    Par jlvalentin dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 16/12/2005, 14h06
  3. Réponses: 2
    Dernier message: 17/10/2005, 10h29
  4. [Matrices] Comment calculer le Déterminant d'une matrice 4x4
    Par cyber_N dans le forum Algorithmes et structures de données
    Réponses: 70
    Dernier message: 19/08/2005, 15h47
  5. Comment modifier l'affichage des objets cachés de Windows ?
    Par maximdus dans le forum API, COM et SDKs
    Réponses: 23
    Dernier message: 23/07/2005, 11h45

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