UN PROGRAMME QUI UTILISE OPEN_MP POUR TROUVER DES NOMBRE PREMIER.

NairodDorian Messages postés 130 Date d'inscription lundi 26 juin 2006 Statut Membre Dernière intervention 18 août 2008 - 23 déc. 2006 à 15:45
lynxtyle Messages postés 79 Date d'inscription samedi 25 septembre 2004 Statut Membre Dernière intervention 31 octobre 2011 - 29 avril 2011 à 16:31
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/40808-un-programme-qui-utilise-open-mp-pour-trouver-des-nombre-premier

lynxtyle Messages postés 79 Date d'inscription samedi 25 septembre 2004 Statut Membre Dernière intervention 31 octobre 2011 2
29 avril 2011 à 16:31
cette source date d'il y a un bail et je n'ai pas trop le temps de la relire mais si je ne me trompe pas, afin d'accélèrer la recherche il divise par tout les premiers trouvé (plutôt que par tout les impair...), donc la directive atomic à pour but d'attendre que chaque thread apporte les derniers premiers trouvé (sinon si un thread prennait trop de retard il se pourrait qu'un thread avec beaucoup d'avance retourne un premier alors qu'il ne l'ait pas car divisible par le premier en court de calcul sur le thread lent...)

tu vas me dire : mais il y a très peut de chance que ça arrive... je te répondrais imagine le cas suivant : tu utilise open_mp sur une grappe, l'un des ordinateurs de la grappe tombe en panne, dans ce cas avec la directive atomic le calculateur s'arrête (tu rajoute un timeout pour relancer les calculs raté sur le reste de la grappe et tu évite ainsi une énorme erreur qui peu couter cher à ton travail de recherche^^)

ici tu ne perd théoriquement pas grand chose en vitesse de calcul car le nombre total de calcul de chaque thread est équivalant donc ils finissent tous un peu près en même temps...

voilà j'espère que ça répond à ta question...


PS : aujourd'hui open_mp est un peu "dépassé" par les calculateurs GPU (cf. NVidia CUDA, ATI Stream et dans la ligné des opens : OpenCL qui va gérer les thread CPU et GPU)
OpenCL intégre d'ailleur OpenMP et à l'avantage d'être compatible avec les cartes NVidia et ATI. Avec la programmation GPU on arrive à des monstres de supercalculateurs pas si cher que ça !
hassansaib Messages postés 2 Date d'inscription jeudi 7 avril 2011 Statut Membre Dernière intervention 28 avril 2011
28 avril 2011 à 17:34
pour quoi tu a fais la directive atomic
lynxtyle Messages postés 79 Date d'inscription samedi 25 septembre 2004 Statut Membre Dernière intervention 31 octobre 2011 2
30 déc. 2007 à 05:46
vous êtes un peu à côté : c'est pas du multithread à proprement parler... mais du Symmetric MultiProcessing c'est à dire du multithread mais symétrique (pour généraliser tout les thread font le même calcul au même moment mais sur une zone mémoire différente... donc qu'un thread par coeur maxi...)
La différence avec du multithread que procure l'API Windows? un gain plus qu'important de vitesse et une certaine facilité à programmer sur une grappe... rien que ça! Par contre il ne peut pas être utilisé dans bon nombre de cas de multithread : inutile d'espérer l'utiliser pour programmer un serveur multithread... c'est juste bon pour du calcul scientifique... et encore ces calculs doivent répondre à quelques exigences!

Pour finir je dis bravo à SuntzuMaster pour cette source car je dois dire qu'il y a peu de personne qui maîtrise le SMP

Sinon juste un petite remarque : utilise plutot "clock()" (que tu peux pourquoi pas divisé par "CLOCKS_PER_SEC" pour avoir le résultat en seconde) afin de donner le temps processuce d'exécution du programme (l'avantage c'est que tu prend en compte les temps d'allocation etc... ce qui permet d'être plus juste sur le temps réel d'exécution et surtout ça fait des variables en mémoire en moins... je sais je suis un rapia^^)

Enfin pour ce qui souhaite approfondir leur connaissances en SMP intêressez vous en plus de OPENMP à MPI (qui aurai était ici encore plus puissant)
SuntzuMaster Messages postés 1 Date d'inscription lundi 6 mars 2006 Statut Membre Dernière intervention 24 décembre 2006
24 déc. 2006 à 21:29
OPENMP est une techno qui permet d'utiliser des threads sana avoir a connaitre L'API Windows.
Un programme qui utilise OPENMP est compatible avec d'autre plateformes UNIX,...
pour plus d'info openmp.org.
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
23 déc. 2006 à 16:15
Apparemment le thread se crée et se ferme tout seul.
Sympa ce code.
A plus.
NairodDorian Messages postés 130 Date d'inscription lundi 26 juin 2006 Statut Membre Dernière intervention 18 août 2008
23 déc. 2006 à 15:45
Bonjour,

Quelle est la différence entre la techno OMP et l'utilisation des fonctions MultiThread de l'API Windows ?

Cordialement,
Rejoignez-nous