DOURNAC.ORG
Français  English
 

Parallel computation of Π with Monte-Carlo method : POSIX Threads vs GO-Routines


Coding > Parallel computation of Π with Monte-Carlo method : POSIX Threads vs GO-Routines

 

1.Introduction:

Voici les deux codes (version POSIX et version GO) permettant de calculer, jusqu'à une certaine précision, le nombre π grâce à la méthode Monte-Carlo :



Pour compiler la version POSIX et l'exécuter (premier argument : le nombre de processus et deuxième : le nombre d'itérations) :

$ gcc -lpthread pi_mc_pthread.c -o pi_mc
$ ./pi_mc 10 100000000
# of trials= 100000000 , estimate of pi is 3.14212320
0 second 763061 micro ellapsed

Pour compiler la version GO et l'exécuter :

$ 6g pi_mc.go
$ 6l pi_mc.6
$ ./6.out 10 100000000
Pi Estimation: 3.141473
Elapsed Time: 1.206985 seconds


Veuillez vous assurer à l'exécution de ce code "multithreadé" que le nombre d'itérations soit divisible par le nombre de processsus.

2.Performances:

Le graphique suivant représente les différentes performances du code POSIX (tracé bleu) et du code GO (bleu turquoise). Pour cela, on trace le produit inverse de la précision obtenue sur pi par le temps d'exécution. Cet intervalle dépend lui même du nombre d'itérations et du nombre de process.

Les scripts pour générer les temps d'exécution sont run_chain_posix pour la version POSIX et run_chain_go pour la version GO, puis pour le plot ci-dessous le script Matlab plot_performance_pi.m.

Nous savons déjà que l'estimateur de la valeur de π est d'autant plus précis que l'échantillon est grand, c'est-à-dire que le nombre d'itérations est élevé. Il s'agit donc ici d'évaluer le gain de précision en fonction du temps de calcul. L'identification de la commande d'exécution en abscisse croît avec la taille de l'échantillon. Il y a 4 tranches d'itérations (1 Million, 10 Millions, 100 Millions, 1 Milliard) qui comporte chacune 13 valeurs croissantes du nombre de processus. Nous remarquons ainsi, d'après l'allure générale de l'histogramme, que la précision augmente en moyenne relativement moins vite que le temps d'exécution.

Pour la version POSIX, le meilleur compromis est atteint pour N_itérations=1 Milliard et N_process=40 (Id=46) tandis que la version GO a sa meilleure performance pour N_itérations=10 Millions et N_process=50 (Id=21).

Enfin, d'un point de vue directement lié à l'implémentation des langages C et GO, la version POSIX apporte en moyenne un gain sur le runtime égal à 29.6%, ce qui peut s'expliquer par le fait que le code GO utilise une couche supplémentaire par rapport au langage système de Linux qu'est le C.

ps : join like me the Cosmology@Home project whose aim is to search for the model that best describes our universe

Home | Astronomy | Sciences | Philosophy | Coding | Cv
- dournac.org © 2003 by fab -