Combien de noeuds pour paralléliser mes simulations ?

Si vous faites des simulations statistiques lourdes, vous devez ou devriez bénéficier de la parallélisation des ordinateurs multi-coeurs. Un quadri-coeur peut exécuter environ quatre fois plus vite (sauf saturation de la bande passante RAM) les simulations qu’un mono-coeur. Les outils de parallélisation tels que le package R « parallel » permettent de choisir le nombre de noeuds d’exécution. Quelle valeur choisir ?

La réponse est simple : choisissez autant de noeuds que votre processeur n’a de threads, ce qui est habituellement égal au double du nombre de coeurs. Vous pouvez éventuellement en mettre un ou deux de moins si vous voulez continuer à utiliser votre PC avec confort.

Exemple : processeur 4 coeurs et 8 threads.

Si vous utilisez quatre noeuds, vous gagnerez en performance d’un facteur quatre.

Si vous utilisez cinq noeuds, vous gagnerez en performance d’un facteur 4,2 environ par rapport à un seul noeud. Et vous gagnerez environ 0,2 unité de performance par noeud supplémentaire jusqu’à 8 noeuds. Avec 8 noeuds vous aurez un calcul 4+0.2×4=4.8 fois plus rapide qu’avec un seul noeud. Au delà, vous perdrez un peu en performance.

Limites de la règle n=threads

Parfois on peut gagner à mettre moins d’unité de calcul que ça, pour ne pas saturer la bande passante de la RAM lorsque les algorithmes travaillent sur de grandes quantité de données à la fois. Il est rare que vous ayez intérêt à en mettre moins que de coeurs.

Si on accède intensément à un disque dur, alors les accès alternés peuvent être très lent, à cause du temps d’accès long, et il peut être préférable de ne lancer qu’un seul noeud. Ce phénomène est moindre avec les Solid State Drives (SSD).

Pourquoi ?

Un coeur est un ensemble d’unités de calcul arithmétique et flottantes regroupés pour exécuter du code. Lorsqu’on utilise un coeur simplement, les unités de calcul ne sont pas saturées 100% du temps car certains calculs dépendent des précédents. Par exemple, si on calcule (5+3)×(2+8+4), on doit réaliser trois additions avant de réaliser la multiplication. Pendant que les unités de calcul d’addition sont utilisées, l’unité de multiplication est susceptible d’être au repos. Si on utilise deux threads sur le même coeur, un deuxième fil d’exécution est susceptible de saisir cette opportunité pour faire une multiplication dont elle a besoin à ce moment là. Néanmoins, avec deux threads sur un même coeur, ce dernier est presque en permanence à saturation et on ne gagne qu’environ 20% par rapport à une exécution séquentielle des simulations sur un seul thread.

Les détails sont plus complexes mais nécessitent de maîtriser l’architecture interne d’un PC. Une unité de calcul est plus ou moins spécialisée (p.e. Unité Arithmétique et Logique ou ALU en anglais).

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *