DOURNAC.ORG
Français  English
Accueil
Astronomie
Sciences
Philosophie
Informatique
Cv

Informatique > Boucles parallèles - Calcul de $\pi$ avec la méthode Monte-Carlo : POSIX vs GO


1.Introduction :

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

  •    pi_mc_pthread.c

  •    pi_mc.go

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
# Estimation is 3.14212320
# Number of trials = 100000000
# Elapsed Time: 0 seconds 763061 micro ellapsed

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

\$ go bluild pi_mc.go
\$ ./pi_mc 10 100000000
# Estimation is 3.141473
# Number of trials = 100000000
# Elapsed Time: 1 seconds 206985 micro ellapsed

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 (palette magenta) et du code GO (niveaux de gris). Pour cela, on trace le logarithme du 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 (taille de la boucle en abscisse) et du nombre de process (qui s'échelonne de $2^0=1$ à $2^{12}$ par pas de $2$).

Le script pour générer les temps d'exécution est run_benchmark_pi avec comme paramètre 'posix' pour la version POSIX et 'go' pour la version GO. Le plot ci-dessous est obtenu avec le script Matlab plot_benchmark_pi.m.

Nous savons déjà que l'estimateur de la valeur de $\pi$ 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. Les rectangles horizontaux correspondent à la moyenne des performances obtenues dans les deux versions et pour chacune des 4 tailles de boucles. Nous remarquons ainsi, d'après la valeur de ces moyennes, que la précision augmente relativement moins vite que le temps d'exécution.

Pour la version POSIX, le meilleur compromis est atteint pour N_itérations = 1MB et N_process = 64 tandis que la version GO a sa meilleure performance pour N_itérations = 1MB et N_process = 8.

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 à 33.91%, 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 : contribuez comme moi au projet Cosmology@Home dont le but est d'affiner le modèle décrivant le mieux notre Univers.

    Accueil | Astronomie | Sciences | Philosophie | Informatique | Cv    
- dournac.org © 2003 by fab -

Haut de Page