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 :

éffectué un taitement parallèle


Sujet :

Threads & Processus C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mars 2009
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 26
    Par défaut éffectué un taitement parallèle
    Bonjour les amis, et voilà une autre débutante qui a besoin de votre aide. j'ai une méthode dans une classe que je veux quelle s'exécute en parallèle a un nombre prédéfins de fois cette méthode va être déclencher chaque 5mn
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    for (int i= 1; i<=6 ; i++)
    {
    	ant_pkt ant_pkt(sourc, dest , 0, i );
    	int type = ant_pkt.get_type();
    	int t=(unsigned int)time(0);
    	do
    	{
    	
    		printf("debut\n");
    		n=rtable_.calc_next(k, parent, que);
    		wait_on_queue(type, k , n, 1);
    		printf("parcours \n");
    		cross_the_link(k, n);
    		int t_1 = (unsigned int)time(0);
    		t_k_n = (unsigned int)difftime(t_1, t);
    		ant_pkt.delete_memory(n);
    		ant_pkt.add_memory(n,t_k_n);
    		parent=k;
    		k = n;
    	}while (k != dest);
    
    	ant_pkt.affichage_du_memoire();
    	ant_pkt.become_backward_ant();
    	type = ant_pkt.get_type();
    	int initialtt = t_k_n ;
    	for(int i=ant_pkt.get_size_list()-2;i>=0;i--)
    	{
    		update_traffic(ant_pkt, i, initialtt);
    		update_table(ant_pkt,i);
    	}
    }
    Voilà mon code qui s'exécute séquentielle mais ce que je cherche une exécution parallèle. j'ai jamais utilisés les threads et j'ai besoin de quelque guide et du code simple pour implémenter ca. J'utilise visiual studio 2008 sous windows XP. Merci d'avance pour chaque information. Sil vous plait aidez moi.

  2. #2
    Inactif  
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    743
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 743
    Par défaut
    OpenMP: c'est pas ce que je préfère (TBB...), mais c'est simple et efficace.
    N'oublie pas de donner l'option de compilation correspondante à ton compilo (VC2005=/openmp)
    Les gains en vitesse sont là si chaque thread est suffisamment long (typiquement au moins 100 000 instructions)

    Faut écrire qqch du genre devant ta boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #pragma omp parallel for schedule(dynamic,1)
    for (int i= 1; i<=6 ; i++)
    PS: Je suis pas sûr de répondre à ta question. Je sais pas comment tu veux mélanger le multi-threading et le démarrage toutes les 5m,

  3. #3
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2006
    Messages : 507
    Par défaut
    Bonjour,

    Une autre solution est d'utiliser des bibliothèques (Qt, SDL, ...) qui proposent des classes et/ou structures qui gèrent les threads, ou alors d'utiliser directement les fonctions systèmes (voir l'api windows)...

    Cela permet de bien contrôler le calcul parallèle...

    Et un petit conseil dans ton code: évite d'utiliser le même nom de variable pour plusieurs variables différentes et utilisées en même temps...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    for (int i= 1; i<=6 ; i++)
    {
    	// [...] 
    	for(int i=ant_pkt.get_size_list()-2;i>=0;i--)
    	{
    		update_traffic(ant_pkt, i, initialtt);
    		update_table(ant_pkt,i);
    	}
    }
    Es-tu sûr que les "i" de la seconde boucle "for" ont les bonnes valeurs ?
    Quand tu as plusieurs boucles imbriquée, change les noms des indices : il y a 26 lettres dans l'alphabet!!!

  4. #4
    Membre Expert
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Par défaut
    Pour l'avoir testé, je peux attester que boost::tread, une fois passé les premières difficultés du "tout raii" est vraiment simple et robuste.

    En plus, un thread n'étant rien qu'une instanciation de classe, on n'a pas de problèmes de "conflits de threads non terminés" (du moment qu'on fait appel à des mutexes pour la comunication extra-thread).

    Par contre, j'avoue ne jamais l'avoir testé sur windows, l'installation est peut-être plus compliquée dessus.



    bonne chance

  5. #5
    Membre averti
    Inscrit en
    Mars 2009
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 26
    Par défaut
    merci pour votre aide. désolé pour la fautes des boucles intégrés j'ai pas fais attention . Pour la programmation parallèle je trouve que visual studio 2008 intègre openmp. Donc je choisi de travailer avec. Mais ce que je demande si vous savez si openmp implémente des threads simples ou non car déja quelques foncions de cette programmation parallèle sont des threads et merci d'avance

  6. #6
    Membre averti
    Inscrit en
    Mars 2009
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 26
    Par défaut
    Après une bonne lecture du msdn je vois que les api windows sont performant. donc je vais utilisé les api windows pour l'implémentation des threads car la création n'est pas totalement parallèle. En faite pas le même principe.


    Maintenant j'ai implémenté mes threads avec leurs fonctions. Mais je dois gérer le partage de ressource.

    En faite la fonction a traiter par les threads contient des appels a des procedure d'autres classe. Il ya 2 procédure non pas de la même classe qui accède à la même ressource. Une pour consulter et une pour ecrie. Bien sur l'écriture est prioritaire.

    Est ce que c possible de d'implémenter cela et avec quel objet: mutex ou section critique? Pouvez vous m'aider svp c urgent.

Discussions similaires

  1. Gestion du port paralléle sous 2000
    Par kardex dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 05/01/2006, 19h47
  2. ecriture vers le port parallèle
    Par Luther13 dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 19/03/2004, 22h46
  3. Execution d'une procédure en parallèle d'une autre
    Par Nouni dans le forum C++Builder
    Réponses: 3
    Dernier message: 25/02/2004, 07h06
  4. Transaction et traitements parallèles
    Par jfphan dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 02/02/2004, 10h48
  5. Port Parallèle EPP ou ECP, hardware vs software ?
    Par TONIAPEL dans le forum Assembleur
    Réponses: 3
    Dernier message: 21/08/2003, 01h39

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