UN PROGRAMME QUI UTILISE OPEN_MP POUR TROUVER DES NOMBRE PREMIER.

Messages postés
130
Date d'inscription
lundi 26 juin 2006
Statut
Membre
Dernière intervention
18 août 2008
- - Dernière réponse : 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

Afficher la suite 
lynxtyle
Messages postés
79
Date d'inscription
samedi 25 septembre 2004
Statut
Membre
Dernière intervention
31 octobre 2011
2 -
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
-
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 -
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
-
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
17 -
Apparemment le thread se crée et se ferme tout seul.
Sympa ce code.
A plus.