– Ajouter le vol de travail : quand la pile locale d’un thread est vide, il va vérifier chez
les autres s’il y a encore du travail et en « vole » le cas échéant.
– Évaluer le gain de performance apporté par cette méthode.
6 Continuations
Il ne faut pas confondre la notion de pile de travail d’un thread utilisée ci-dessus,
qui est une liste de tâches à réaliser, avec la notion de pile processeur du thread, qui est
la zone mémoire où un thread stocke ses données locales et les variables locales des
fonctions qu’il exécute.
Or, lorsque un thread T exécute une tâche t1 qui elle-même génère une autre tâche t2,
si t1 doit attendre la fin de t2 pour réaliser un traitement, t1 consomme des ressources
mémoire dans la pile processeur du thread T car précisémment, t1 ne peut terminer tant
que t2 n’est pas terminée.
Dans le cas de l’algorithme quicksort, le problème ne se pose pas étant donné que la
tâche mère réalise l’intégralité de son traitement avant sa ou ses tâches filles. En revanche
pour un algorithme tel que le calcul naïf de la suite de Fibonacci, une tâche mère doit
attendre la fin de l’exécution de ses tâches filles pour calculer la somme de leur résultats.
Si de nombreuses tâches se retrouvent ainsi en attente, le volume de ressources mémoire
ainsi bloquées sur la pile processeur de T peut devenir considérable, et même induire
un débordement de celle-ci.
Pour éviter ce phénomène, on peut recourir au concept de continuation. Une conti-
nuation est une tâche qui se substitue à la tâche mère d’un couple de tâche mere/tâche
fille et qui sera exécutée après la fin de la (ou des) tâche(s) fille(s). La tâche mère ainsi de-
barassée de sa responsabilité peut libérer ses ressources allouées sur la pile processeur
sans attendre la fin de la tâche fille et retourner immédiatement.
Ce mécanisme est notamment disponible avec la bibliothèque de multithreading
“Intel Threading Building Blocks” (TBB). En vous inspirant de la description de ce mé-
canisme appelé Continuation Passing en TBB et décrit dans le document tutoriel de TBB
à la section 10, implémentez et testez ce mécanisme sur l’algorithme naïf de Fibonacci.
4