Salut à tous,
J'ai du créer pour mon boulot, un petit programme de calcul de facteur de forme. En gros, c'est un quadruple intégrale. C'est simple à écrire, mais long à calculer.
Dans un but complètement ludique et absolument pas pratique, j'ai modifié mon programme pour le transformer en programme multithread. Le but étant d'apprendre à tirer partit d'un pc double coeur. Ce qui n'est pas très utile à mon programme, mais pas mal pour mon avenir.
Les 2 programmes tournent parfaitement et fournissent les mêmes résultats. C'est au niveau du temps d'execution que je me pose quelques questions.
En les faisant tourner sous des machines différentes, j'ai remarqué 3 choses auquels j'aimerias bien avoir une réponse:
Sur les PC monocore, le programme multithread (MT) met plus de temps à s'éxécuter. (de 10 à 15% plus de temps). Je me l'explique bien, mais si quelqu'un a une iddée pour réduire cette écart je suis preneur.
Sur un p4 avec HT j'obtient le plus mauvais score, avec un écart de 25%, alors qu'il est censé tourné mieux dans ce cas. J'aimerais bein avoir une explication la dessus.
Mon dernier problème et celui qui me fait poser le plus de question est le suivant. Sur un Core Duo j'obtient un score de 168 secondes pour le programme normal et 63 secondes pour le programme MT. Soit un gain de 167% . Je m'attendais bien à un gain, mais certainement pas supérieur à 100%. Ca j'aimerias bien qu'on me l'explique.
Le programme utilise des pthread et est compilé sous devC++. Le tout est écrit en C. Les thread sont implanté dans la 1ere boucle (=1ere intégrale) qui éxécute les 3 autres intégrales, chaque itération étant totalement indépendante des autres (ce qui a rendu la modification MT possible). Le résultat des boucles est sommé dans un variable protégée par un mutex. Je ne met pas mon code source vu qu'il fait 300 lignes, pas la peine de polluer le forum.
Si quelqu'un peut avancer une explication à l'une de ses interrogations (surtout la 3ème) je l'en remercie d'avance.
Partager