![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEigGGbVmOmjQHc-sUiZeVBUeSTuL4AK_nGT4lnQ5_P56_eUCxXnBvrIWLJ3wgSfXOf5Bl5Svwk4zefhgQDU_MI68Sh-4Aqwk0Q1IP-4480i9UZTULd0t-qo5ao3RSAlPPD3xlLH-xetyNPH/s200/mmm.png)
Loi de Brooks : Ajouter des développeurs à un projet en retard ne fait que le retarder.
Quand on travaille dans un environnement multiprocesseurs il faut garder à l’esprit cette histoire car pour des raisons similaires ajouter 2 processeurs à 2 processeurs ne divise pas forcement le temps de calcul par deux. Le gain de temps peut varier suivant l’organisation du code (ce qui est contrôlable) mais aussi suivant les données (c’est moins facile à anticiper).
Communication : C’est la clef du problème. Scinder un programme résolvant une tâche complexe en plusieurs petits programmes s’exécutant chacun sur un processeur indépendant sous-entend un minimum de communication entre ses petits programmes. Les ressources consommées par cette communication s’ajoutent aux ressources strictement requises par la tâche principale. Pour certains problèmes les communications deviennent si complexes que l’on dédit des processeurs à la gestion des communications. Il faudra trouver un équilibre entre la granularité de répartition de la charge et le cout des communications induites.
Il existe une métrique simple pour vérifier l’efficacité de la parallélisation d’une tache :
Soit ‘T1’ le temps réel pris pour résoudre le problème avec 1 processeur.
Soit ‘Tn’ le temps réel pris pour résoudre le problème avec ‘n’ processeurs.
Le temps théorique avec n processeurs est Tn’ = (T1/n).
En pratique on a cette relation : T1 > T2 > … > Tn > Tn’ > 0
Le rapport (Tn’/Tn) = T1 / (n * Tn) donne l’efficacité de la parallélisation dans son ensemble (hardware + software).
Exemple 1::
T1=60s, n=10 processeurs, T10=7, T10’ = 60/10 = 6s
Efficacité = 6/8 = 0.86
Exemple 2:
T1=60s, n=20 processeurs, T20=4, T20’ = 60/20 = 3s
Efficacité = 4/5 = 0.80
L’augmentation (10 ==> 20) de 100% du nombre de processeurs a permis de diminuer le temps de calcul (7s ==> 4s) de ~43% mais l’efficacité a chuté de ~6%.
Bien sur une efficacité de 1 (100%) n'est possible que s'il y a strictement aucun 'overhead' dû à la parallèlisation du traitement et donc aucune communication entre les n process.
Notes: Ici j’ai pris comme mesure le temps de calcul, mais on peut utiliser d’autres paramètres comme la consommation électrique, la mémoire etc…