StarPU Tutorial - ComPAS - 2013

Introduction

Conférence ComPAS à Grenoble, Janvier 2013.

Résumé

Les GPGPUs sont de plus en plus utilisés pour paralléliser massivement des codes de calcul. Même si, sur des problèmes précis, on arrive à obtenir de très bonnes performances, il reste difficile de programmer efficacement de façon transparente ces nouveaux supports d’exécution parallèle.

Ce tutoriel, organisé sur une journée, présentera d’abord l’architecture et les bases théoriques permettant d’obtenir de bonnes performances sur les GPGPU. Puis, deux environnements de programmation (StarPU et XKaapi) pour utiliser ce matériel de manière efficace et relativement transparente seront présentés plus en détail.

Le tutorial commencera par une présentation succincte des architectures matérielles ciblées (GPU) et leurs environnements de programmation dédiés (Cuda/OpenCL). La connaissance préalable de ces outils est vivement conseillée pour suivre ce tutorial.

Puis, le tutorial introduira des notions plus théoriques. Programmer des applications parallèles revient à sélectionner quelles tâches doivent être allouées aux GPUs et à déterminer l’ordre d’exécution. Nous rappellerons les fondements utiles de la théorie de l’ordonnancement pour concevoir et analyser des politiques et nous détaillerons les différentes solutions envisageables pour ordonnancer sur des supports mixtes.

Le reste du tutorial, plus pratique, sera l’occasion de découvrir et de prendre en main les environnements StarPU et XKaapi. Ces environnements sont là pour prendre en charge et simplifier des parties purement techniques (chargement de noyaux, transferts de données) mais surtout pour faire de l’ordonnancement de tâches entre CPU et GPU. Ainsi, l’application peut espérer un placement de ses tâches relativement performant quelque soit le nombre de GPU et CPU à sa disposition. L’ordonnancement sera réalisé en prenant en charge de manière transparente les mouvements et la cohérence de données entre la mémoire des différentes unités de calcul.

StarPU et XKaapi utilisent tous les deux des tâches avec dépendances. Pour chaque tâche, une ou plusieurs implémentations CPU et/ou GPU peuvent être définies. Ces environnements sont proches mais se distinguent par les caractéristiques de leur ordonnanceur et par leur interface de programmation.

StarPU obtient la description du graphe de tâche de l’application en utilisant les directives fournies par l’extension GCC, ou directement l’API bas-niveau C. Il est également possible d’exécuter le graphe de tâches de manière distribuée sur différents noeuds de calcul en définissant une distribution des données. Ce tutorial présentera plus en détail les directives de programmation fournies par l’extension GCC, ainsi que l’intégration du modèle de tâches de StarPU avec MPI.

XKaapi obtient la description du graphe de tâche de l’application de manière dynamique grâce à des directives de compilation ou à l’utilisation d’une API C/C++/Fortran. Pour illustrer le vol de taches à grain fin et le placement sur les processeurs de calcul (CPU/GPU) réalisé par XKaapi, nous utiliserons dans ce tutoriel l’interface C++ pour l’implémentation d’algorithmes d’algèbre linéaire.

Supports et Exercices

Les supports du tutoriel sont disponible au format pdf.

Durant la durée du tutoriel, des comptes sur PlaFRIM/DiHPES seront mis à disposition des personnes présentes. Deux ensembles d’exercices sont disponibles:

Pour utiliser la plateforme PlaFRIM/DiHPES, les instructions sont ici.

Pour utiliser une autre machine, il sera nécessaire d’y installer StarPU. Pour ceci, vous pouvez récupérer la dernière version officielle de StarPU ici.

StarPU se compile et s’installe à la manière classique des autotools: configure, make et make install. Pour utiliser les directives de programmation, vous aurez besoin d’une version récente du compilateur gcc. En appelant configure, vous verrez à la fin un résumé, des options présentes, comme par exemple:

StarPU Extensions:
       MPI enabled:                                 yes
       MPI test suite:                              yes
       FFT Support:                                 yes
       GCC plug-in:                                 yes
       GCC plug-in test suite (requires GNU Guile): yes

Les fichiers zip des exercices fournis avec ce tutoriel contiennent un fichier README expliquant comment compiler et exécuter les exemples.