Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1633 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Threads simple et portables ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Threads simple et portables ?

n°1623709
T'CHATTE
Posté le 15-10-2007 à 11:19:25  profilanswer
 

EDIT : Pour ceux qui cherchent comment marchent les threads de Boost => http://www.ddj.com/cpp/184401518

 


Bonjour,

 

j'ai fait un programme en C++ qui génère plein de configurations de points qui respectent des potentiels donnés (en gros) mais comme je ne suis que physicien et que je code avec mes pieds, mon prog met a peu près 3j a s'exécuter  :whistle:
Donc je me dis qu'un peu de parallélisation pourrait lui faire du bien mais je n'ai jamais fait ca. La question que je me pose est donc : quelle bibliothèque utiliser pour faire ca??? J'aimerai quelque chose de simple a mettre en œuvre et si possible portable (je code sous winXP mais le serveur sur lequel je veux le lancer au final tourne avec Unix).

 

Donc voila, j'aimerai avoir votre avis :)

 

Merci d'avance :jap:


Message édité par T'CHATTE le 16-10-2007 à 15:32:47
mood
Publicité
Posté le 15-10-2007 à 11:19:25  profilanswer
 

n°1623716
Taz
bisounours-codeur
Posté le 15-10-2007 à 11:24:10  profilanswer
 

Si t'es un scientifique, peut être faudrait-il argumenter ta théorie comme quoi la parallélisation améliorerait tes performances...
 
Utilise un profiler pour trouver ce qui est lent. Ensuite, c'est possible de réfléchir à comment améliorer les performances.
 
Paralléliser des calculs scientifiques, c'est très difficile à cause de problèmes de dépendances (alpha, beta, etc) et y a beaucoup de théorie derrière pour bien réussir ce changement.

n°1623725
T'CHATTE
Posté le 15-10-2007 à 11:33:28  profilanswer
 

Oui j'y ai un peu réfléchi et comme pour chaque potentiel testé je génère 5 configurations, je pensai simplement faire 5 threads qui génèrent chacun une configuration ... après le traitement des configurations est assez court donc je peux le laisser comme ca sans problème.
Je pense que ca peut marcher comme ca car pour générer une config il suffit de lire quelques variables pour connaitre l'état initial et le potentiel a tester et ensuite il n'y a aucun conflit en écriture car tout est indépendant. Donc je pense que c'est assez simple a faire quand on connait dans ce cas là .... mais manque de pot je ne connais pas :D

n°1623734
Joel F
Real men use unique_ptr
Posté le 15-10-2007 à 11:40:43  profilanswer
 

c'est du Number Crunching quoi, :)

 

pour de strheads portables : BOOST::Thread

Message cité 1 fois
Message édité par Joel F le 15-10-2007 à 11:40:56
n°1623744
Taz
bisounours-codeur
Posté le 15-10-2007 à 11:47:52  profilanswer
 

T'CHATTE a écrit :

Oui j'y ai un peu réfléchi et comme pour chaque potentiel testé je génère 5 configurations, je pensai simplement faire 5 threads qui génèrent chacun une configuration ... après le traitement des configurations est assez court donc je peux le laisser comme ca sans problème.
Je pense que ca peut marcher comme ca car pour générer une config il suffit de lire quelques variables pour connaitre l'état initial et le potentiel a tester et ensuite il n'y a aucun conflit en écriture car tout est indépendant. Donc je pense que c'est assez simple a faire quand on connait dans ce cas là .... mais manque de pot je ne connais pas :D


lance plusieurs fois ton programme ?

n°1623765
T'CHATTE
Posté le 15-10-2007 à 12:05:26  profilanswer
 

Joel F a écrit :

c'est du Number Crunching quoi, :)

 

pour de strheads portables : BOOST::Thread

 

Heuuu .... peut-etre  :whistle:
Je suis déjà tombé sur boost au fil de mes recherches et ca avait l'air pas mal ... si tu as un lien avec un joli tuto ou une jolie doc je suis preneur :)

 

Merci bien :jap:

 
Taz a écrit :


lance plusieurs fois ton programme ?

 

Je suis pas sur que ce soit la meilleure solution :D
Parce que le truc c est que je génère mes 5 config, ensuite je les test par rapport à une config de référence et si elles conviennent j'en déduis que ce potentiel est "bon". Mais si il n'est pas bon je le modifie et je recommence. Donc je préfère que ce soit automatique plutôt que lancer le prog plusieurs fois puis lancer un autre prog pour tester les config puis modifier le potentiel, etc ....


Message édité par T'CHATTE le 15-10-2007 à 12:42:12
n°1623803
BenO
Profil: Chercheur
Posté le 15-10-2007 à 13:00:00  profilanswer
 

un script Shell / Python / Autre peut faire office de "glue" :x

n°1623809
Joel F
Real men use unique_ptr
Posté le 15-10-2007 à 13:09:00  profilanswer
 

http://boost.org/doc/html/thread.html
 
Pour les exemples, telecharge boost et regarde dans le repertoire sample. Si tu as du mal demande ;)

n°1623811
Taz
bisounours-codeur
Posté le 15-10-2007 à 13:11:28  profilanswer
 

J'en reviens quand même au "je code avec mes pieds" : se lancer dans les threads quand on y connaît moins que rien ce n'est pas forcément la première des solutions alors qu'il y a certainement des optimisations juteuses à faire

n°1623821
T'CHATTE
Posté le 15-10-2007 à 13:24:05  profilanswer
 

Merci Joel :)
 
Taz => il me semble déjà avoir optimisé pas mal de chose simplement au niveau de l'algorithme ... et vu le mécanisme du programme les threads apporteraient vraiment quelque chose. Et puis j'ai les pieds habiles ^__^
Enfin bref je vais essayer .... et puis si j'y arrive pas je vous demanderai :p
 
Merci à tous :jap:

mood
Publicité
Posté le 15-10-2007 à 13:24:05  profilanswer
 

n°1623827
Taz
bisounours-codeur
Posté le 15-10-2007 à 13:37:07  profilanswer
 

T'CHATTE a écrit :

Merci Joel :)
 
Taz => il me semble déjà avoir optimisé pas mal de chose simplement au niveau de l'algorithme ... et vu le mécanisme du programme les threads apporteraient vraiment quelque chose. Et puis j'ai les pieds habiles ^__^
Enfin bref je vais essayer .... et puis si j'y arrive pas je vous demanderai :p
 
Merci à tous :jap:


On n'a que trop vu de gens bien intentionnés implémenter un algo N^2 en N^3...

n°1623988
T'CHATTE
Posté le 15-10-2007 à 15:26:55  profilanswer
 

Taz a écrit :


On n'a que trop vu de gens bien intentionnés implémenter un algo N^2 en N^3...


 
c'est a dire?

n°1623994
BenO
Profil: Chercheur
Posté le 15-10-2007 à 15:29:33  profilanswer
 

http://fr.wikipedia.org/wiki/Compl [...] orithmique
 
un algo "complexe"  koa ^^
 

n°1624114
T'CHATTE
Posté le 15-10-2007 à 17:52:50  profilanswer
 

ah ok :)
Donc qui du coup serait encore plus long a s'exécuter parce que les threads sont mal fichus?
Ben je vais essayer de ne pas tomber dans le piège :)

n°1624117
BenO
Profil: Chercheur
Posté le 15-10-2007 à 17:59:25  profilanswer
 

c'est indépendant des threads :x

n°1624144
Ace17
Posté le 15-10-2007 à 19:23:13  profilanswer
 

T'CHATTE a écrit :

ah ok :)
Donc qui du coup serait encore plus long a s'exécuter parce que les threads sont mal fichus?
Ben je vais essayer de ne pas tomber dans le piège :)


Ca n'a rien a voir avec les threads. C'est une majoration du nombre d'operations en fonction de certaines donnees d'entree.  
Ce que veut te dire Taz c'est que tres souvent il suffit de modifier l'algorithme pour gagner carrement un ordre de grandeur en temps d'execution. Ca ne sert a rien de paralleliser un algorithme dont la complexite est en N^2.

n°1624173
Joel F
Real men use unique_ptr
Posté le 15-10-2007 à 20:08:40  profilanswer
 

ouais sauf si c'est l'algo optimal pour le problème quoi [:dawa]

n°1624175
Ace17
Posté le 15-10-2007 à 20:16:45  profilanswer
 

Joel F a écrit :

ouais sauf si c'est l'algo optimal pour le problème quoi [:dawa]

... et qu'on connait deja la taille du probleme a traiter ... car dans l'absolu ca n'a pas de sens de chercher a diviser par une constante un truc quadratique...

n°1624178
T'CHATTE
Posté le 15-10-2007 à 20:26:19  profilanswer
 

Je suis pas sur de comprendre ce que vous racontez mais bon :D
Bref, honnêtement je pense que l'algo est déjà pas trop mal optimisé dans sa version séquentielle et que vu que je fais 5 fois la même chose a chaque itération je pense que la parallélisation est plus que pertinente :)
 
En tout cas il me semble avoir trouvé (attention les yeux, je doute que ce soit très propre :whistle: ).... j'appelle la fonction (qui elle même appelle la fameuse fonction que je fais 5 fois par itération)
 
void appel_metro1(const vector<commerce2> config_occupation_init,vector<commerce> config1,const vector<commerce> coo,const vector<commerce> config_init,const long double potentiel[],const int iter,long double grconfig1[]){
    metropolis(coo,config_init,config_occupation_init,potentiel,iter,config1,grconfig1);
}
 
avec  
 
 
        boost::thread_group threads;
        threads.create_thread(boost::bind(&appel_metro1,config_occupation_init,config1,coo,config_init,potentiel,iter,grconfig1));
.
.
(je l'appelle autant de fois que j'en ai besoin)
.
.
threads.join_all();
 
et hop :)
En tout cas ca compile et ca se lance ... je dois juste vérifier que les résultats sont cohérents :)
 
Merci beaucoup a vous pour votre aide :jap:

n°1624179
Ace17
Posté le 15-10-2007 à 20:35:28  profilanswer
 

Question debile : c'est quoi la machine sur laquelle ton programme va tourner au final ?

n°1624181
T'CHATTE
Posté le 15-10-2007 à 20:41:34  profilanswer
 

un serveur du CNRS

n°1624182
T'CHATTE
Posté le 15-10-2007 à 20:47:53  profilanswer
 

a moi pour une question débile :)
Quand j'appelle ma fonction metropolis comme je l'ai fait, les variables locales de cette fonction sont bien clairement séparées pour chaque thread ou non?


Message édité par T'CHATTE le 15-10-2007 à 21:30:31
n°1624193
Dumbledore
Posté le 15-10-2007 à 21:05:21  profilanswer
 

Tant que tu ne passe ni pointeur, ni références, les variables sont dupliquées. Aucun problème pour le thread donc.

n°1624199
T'CHATTE
Posté le 15-10-2007 à 21:09:18  profilanswer
 

ok merci :)

n°1624406
Taz
bisounours-codeur
Posté le 16-10-2007 à 10:18:18  profilanswer
 

Joel F a écrit :

ouais sauf si c'est l'algo optimal pour le problème quoi [:dawa]


l'algo peut-être, l'implémentation...

n°1624420
Taz
bisounours-codeur
Posté le 16-10-2007 à 10:29:21  profilanswer
 

en caricaturant:

Code :
  1. for (i = 0; i < strlen(s); i++) {
  2.   s[i] = toupper(s[i]);
  3. }


 
une mauvaise implé avec de mauvaises structures de données, c'est vite fait de tout péter. Genre tu as un liste et tu n'arrêtes pas d'ajouter en fin, etc

n°1624755
T'CHATTE
Posté le 16-10-2007 à 15:03:07  profilanswer
 

Hello !
 
Bon tout marche nickel alors je vous reremercie encore :)
Et j'ai une dernière petite question : comment on peut faire pour que les cout<<..... que j'ai dans la fonction appelée par mes threads restent dans le bon ordre? Ca ne me dérange pas pour ce programme là parce que de toute façon j'ai juste besoin d'écrire le résultat final dans un fichier ... mais c'est par curiosité.

n°1624757
BenO
Profil: Chercheur
Posté le 16-10-2007 à 15:05:27  profilanswer
 

dans le bon ordre ? :x
cout fait par tes threads ? ^^

n°1624778
T'CHATTE
Posté le 16-10-2007 à 15:21:26  profilanswer
 

oui j'ai des cout dans les threads pour surveiller un peu ce qu'il fabrique ... ca allait bien quand je faisais qu'une chose a la fois mais là 5 d'un coup ca affiche un peu n'importe quoi :D
Enfin ca reste compréhensible mais c'est moche.
Donc bref je me posai la question :)
Mais la réponse est peut être simplement : pas de cout dans les threads? Ca paraitrait logique d'ailleurs ^^

n°1624781
T'CHATTE
Posté le 16-10-2007 à 15:23:39  profilanswer
 

ah et au fait un truc beaucoup plus embêtant .... comment je compile ce truc sur Unix ? :whistle:
J'utilise la commande g++ d'habitude mais là il faudrait que je lui dise ou est boost (ce que je ne sais pas encore d'ailleurs) et je sais pas faire. Si quelqu'un connait ca ... :)


Message édité par T'CHATTE le 16-10-2007 à 17:18:41
n°1624808
Taz
bisounours-codeur
Posté le 16-10-2007 à 16:00:58  profilanswer
 

-I/usr/include... -L/usr/lib/... -lboost_...

n°1624836
T'CHATTE
Posté le 16-10-2007 à 16:51:42  profilanswer
 

Ok j'essairai ca :)
 
Merci beaucoup!

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Threads simple et portables ?

 

Sujets relatifs
Requête très simple, mais ?Une solution simple contre le spam ?
[Résolu] Problème programme simple[resolu] Pb programme simple en Ruby
simple script a corriger de la part d'un grand debutantCréer un flux streaming trés simple son+vidéo deja sur le net
apparament simple(ordonner)erreur dans un programme simple (resolu)
Problème avec un script simpleproblème d'accès variable entre deux threads
Plus de sujets relatifs à : Threads simple et portables ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR