11.4.2.1 : Granularité des tâches
Pour paralléliser un travail, il faut avant tout le décomposer en un certain nombre de tâches pouvant s'exécuter en parallèle.
Les centres de calculs actuels pouvant exécuter jusqu'à plusieurs millions de tâches en parallèle, il n'est pas viable pour un programmeur de définir celles-ci individuellement. À la place, on fait appel à des méthodes automatisables telles que la décomposition de domaine, qui consiste à découper le jeu de données d'entrée et confier à chaque tâche un sous-ensemble de données noteLes méthodes de parallélisation historique de la Grille sont une forme de décomposition de domaine..
La granularité des tâches, c'est-à-dire la quantité de calcul qu'elles effectuent, est importante. Créer une tâche parallèle (thread ou processus) a toujours un certain coût, et il faut que le temps passé à exécuter la tâche amortisse largement ce coût pour que la parallélisation conduise à un gain net de performance. Par corollaire, l'utilisation d'une machine massivement parallèle pour effectuer un calcul n'a de sens que si le volume de calcul à effectuer est suffisant pour utiliser durablement les capacités de calcul de cette machine. Ceci pose une limite basse sur la taille des tâches parallèles.
Fixer une limite haute sur la taille des tâches peut aussi parfois avoir un sens. Évidemment, dans le cas extrême où les tâches sont si grosses qu'on a moins de tâches que de cœurs processeurs, on ne tire pas pleinement bénéfice du calcul parallèle. Mais par ailleurs, l'utilisation de tâches plus petites que nécessaire, de façon à avoir plusieurs tâches par cœur de calcul, facilite grandement l'équilibrage de charge entre les cœurs de calcul, notion que nous aborderons plus loin.