UN PROGRAMME QUI UTILISE OPEN_MP POUR TROUVER DES NOMBRE PREMIER.
NairodDorian
Messages postés130Date d'inscriptionlundi 26 juin 2006StatutMembreDernière intervention18 août 2008
-
23 déc. 2006 à 15:45
lynxtyle
Messages postés79Date d'inscriptionsamedi 25 septembre 2004StatutMembreDernière intervention31 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.
lynxtyle
Messages postés79Date d'inscriptionsamedi 25 septembre 2004StatutMembreDernière intervention31 octobre 20112 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és2Date d'inscriptionjeudi 7 avril 2011StatutMembreDernière intervention28 avril 2011 28 avril 2011 à 17:34
pour quoi tu a fais la directive atomic
lynxtyle
Messages postés79Date d'inscriptionsamedi 25 septembre 2004StatutMembreDernière intervention31 octobre 20112 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és1Date d'inscriptionlundi 6 mars 2006StatutMembreDernière intervention24 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és1137Date d'inscriptionlundi 17 novembre 2003StatutMembreDernière intervention23 janvier 201626 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és130Date d'inscriptionlundi 26 juin 2006StatutMembreDernière intervention18 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 ?
29 avril 2011 à 16:31
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 !
28 avril 2011 à 17:34
30 déc. 2007 à 05:46
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)
24 déc. 2006 à 21:29
Un programme qui utilise OPENMP est compatible avec d'autre plateformes UNIX,...
pour plus d'info openmp.org.
23 déc. 2006 à 16:15
Sympa ce code.
A plus.
23 déc. 2006 à 15:45
Quelle est la différence entre la techno OMP et l'utilisation des fonctions MultiThread de l'API Windows ?
Cordialement,