ok, j'avais etudié ca aussi, et il me semblait que ca me compliquerait la tache a cause des données partagées.. mais je garde ca sous le coude !!
ok, j'avais etudié ca aussi, et il me semblait que ca me compliquerait la tache a cause des données partagées.. mais je garde ca sous le coude !!
Si tu as une mémoire partagée, MPI n'est pas le meilleur choix.
Une question a propo des threads
J'ai récemment voulu partager un calcul simple sur mes 2 processeurs.
Le résultat etait beaucoup plus lent. Visiblement de temps d'initialisation et gestion des thread prenait plus de temp que le calcul lui meme. Comment savoir au juste la durée minimum des tache a partager ?
disons que je pourrais "temporiser" la communication entre les thread, mais vu qu'une des principales optimisations de l'algo que j'ai decouverte repose sur la comparaison de l'element courant avec le resultat deja obtenu, je ne sais pas quel impact ca aurait sur les perfs. vu que le cluster auquel je vais avoir acces devrait disposer d'une memoire partagé entres tous les nodes, je ne vais pas avoir a me poser de questions
uriotcea> c'est une question interressante, je ne sais pas non plus combien "coute" la creation d'un thread.. je me suis debrouillé pour creer n threads une fois pour toute au debut, et ils piochent tous dans la meme pile de travail, a laquelle ils ajoutent egalement des elements. ca demande quelques acrobaties, mais ca a l'air de marcher pas mal.... vu que j'en bouffe depuis qq jours, tu peux ouvrir un post la dessus, je pourrais voir si mes nouvelles connaissances peuvent t'aider !
chez moi, ca se compte en jours (record de calcul achevé a 8 jours, d'ou l'interet de partager ca au max)Envoyé par uriotcea
c'est vrai que si ton calcul est rapide, la gestion des threads, meme si elle est en temps quasi constant, va te bouffer des perfs.. au dela de plusieurs heures de calcul je pense que ca devient interressant, en dessous c'est du souci pour rien, sauf si c'est facile a distribuer !
Si tu as beaucoups de memoire partagé, as-tu pensé a regarder du coté de openMP qui est dédié au calcul en mémoire partagé
oui, j'avais regardé aussi. mais comme je le disait, je pense que le mieux dans mon cas c'est les outils du type Mosix : en fait, ceux ci ne necessite pas de programmation specifique, ils ditribuent simplement et de facon transparente les threads sur tous les ordis, donc pour peux qu'une appli soit en multithread, il n'y a rien de particulier a faire !
Il y a des chances pour qu'une partie non négligeable du temps soit passée à synchroniser les threads, c'est à dire à attendre. As-tu regardé le taux d'occupation de tes processeurs pendant ton calcul ?Envoyé par uriotcea
Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.
Pour du multithread, OpenMP peut être très bien.
Il y a longtemps eu un débat pour savoir ce qui était mieux entre OpenMP (multithread) et MPI (multiprocess).
Visual C++ supporte OpenMP, mais je crois bien que c'est enlevé dans l'édition Express...
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Effectivement, la version Express ne supporte pas openMP, c'est dommage.Envoyé par Médinoc
je m'y perds un peu.. je pensais que openmp etait designé surtout pour du calcul ditribué.. meme si du coup ca marche en local, ca n'est peut etre pas aussi adapté que du "simple" multithread ?? perso je suis basé sur boost, c'est simple et ca marche..
Tu peux m'en dire un peu plus sur BOOST. Je ne connait absolument pas.
Merci d'avance
en fait, j'en avais deja pas mal entendu parler avant, mais je ne m'etais (a tort) jamais penché dessus : c'est en fait une collection de librairie standardisée (ie : avec une interface similiaire et coherente), un peu comme la STL (d'ailleurs, boost se presente comme une sorte d'extension, voire un remplacement de la stl). j'en avais surtout entendu parler pour sa gestion des "pointeurs intelligent", mais elle offre beaucoup d'autre possibilité, donc du multithreading apparemment tres sur et bien foutu.. et tres agreable a utiliser, en trois coups de cuillere a pot, j'avais deja un truc correct.
l'autre avantage est que boost est portable (windows, linux, mac).
bien evidemment, tu n'est pas obligé d'installer toutes les librairies, elles sont en partie independante. tu trouveras une liste des possibilités ici :
http://boost.org/libs/libraries.htm
Boost n'est pas un remplacement. C'est un ensemble de bibliothèques qui étendent la SL (non, je n'ai pas mis de T). Cf la FAQ.
Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...
Envoyé par jobherzt
Et elle ne remplace ... rien du tout
A la limite, elle offre de nouvelles alternatives dans des cas très précis, mais c'est tout.
Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...
d'ou l'emploi du terme "voire", qui me semble adapté dans ce cas
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager