National audienceL'un des aspects les plus difficiles, lors du découpage d’une application en graphe de tâches, est de choisir la granularité de ce découpage, qui va typiquement de pair avec la taille des blocs utilisés pour partitionner les données du problème. Les granularités trop petites ne permettent pas d’exploiter efficacement les accélérateurs de type GPU, qui ont besoin de mettre en œuvre un parallélisme massif pour "tourner à plein régime". À l'inverse, les processeurs traditionnels exhibent souvent des performances optimales à des granularités beaucoup plus fines. Le choix du découpage est donc non seulement difficile, mais il a en outre une influence sur la quantité de parallélisme disponible dans le système : trop de petites tâches risque d’inonder le système en introduisant un surcoût inutile, alors que peu de grosses tâches risque d’aboutir à un déficit de parallélisme. Fixer un découpage manuellement demande donc de nombreux tâtonnements avant de trouver le bon compromis.L’objectif de ce travail de recherche est d’introduire dans StarPU la notion de tâches divisibles, c’est-à-dire de tâches que le support d’exécution pourra décider (ou non) de redécouper en plusieurs sous-tâches `a l’exécution, en fonction de différents critères tels que la quantité de parallélisme que l’on souhaite générer, l'opportunité d’exploiter certains types d’unités de calcul à un moment donné, etc. Une grande partie du travail consistera à étudier comment gérer efficacement une partition non uniforme des données (pour autoriser la coexistence de sous-données de différentes granularités) ainsi qu’une gestion des dépendances entre tâches s’adaptant à des raffinements locaux du graphe de tâches