Février 2014 GPU / Xeon Phi Calcul de fonction de corrélation à 2 points sur un grand nombre de galaxies Image : collaboration SDSS Problème : pour effectuer cette mesure sur N galaxies, il faut exécuter N(N-1)/2 calculs devient très vite prohibitif en terme de puissance CPU nécessaire Problème : pour effectuer cette mesure sur N galaxies, il faut exécuter N(N-1)/2 calculs devient très vite prohibitif en terme de puissance CPU nécessaire Le calcul est simple à programmer et naturellement parallélisable bon candidat pour se faire la main sur les GPU et autres accélérateurs graphiques (Xeon Phi par exemple) Sur 1 Milliard de galaxies ! ~ calculs !!! Dominique Boutigny 1
Février 2014 GPU Accès aux machines ccgpu01 et ccgpu02 de la plateforme Dell : R720 - cartes Tesla M2090 – 5 GB de mémoire globale. Connexion Infiniband Catalogue de galaxies simulées pour le Blind Cosmology Challenge de la collaboration DES (Dark Energy Survey) (R. Weshler et al.) 204 fichiers contenant chacun ~7 millions de galaxies Algorithme simple : Calculer un angle (fonction trigo non triviale) pour chaque couple de galaxie sans faire de double comptage et sans calculer l'angle de la galaxie avec elle-même ! 2 boucles imbriquées avec décalage des indices Le résultat est une distribution (histogramme) de l'ensemble des valeurs calculées Relativement simple à porter sur GPU : On copie les coordonnées (RA/DEC) des galaxies dans la mémoire globale du GPU (2x7 millions de valeurs) La deuxième boucle est exécutée en parallèle sur le GPU (1024 threads en //), chaque thread exécutant un calcul (on associe un thread donné à une position dans le tableau contenant les coordonnées) Dominique Boutigny 2
Février 2014 GPU Afin d'optimiser le calcul, il faut impérativement éviter d'avoir à copier des données entre la mémoire du serveur et la mémoire du GPU Il faut gérer l'histogramme au niveau du GPU Mais il y a un piège : L'idée de départ est de créer un tableau pour l'histogramme en mémoire globale mais les threads se "marchent sur les pieds" en écrivant dans la mémoire perte de valeurs Il faut créer un histogramme par thread et les recombiner à la fin. Sur galaxies: Sans GPU : 16h 46' 25'' GPU : 387 '' Gain : ×156 Sur 7.1 millions de galaxies: GPU : ~20h ~ milliards d'appels à une fonction trigonométrique non triviale ! Dominique Boutigny 3
Février 2014 GPU Prochaines étapes sur la plateforme actuelle : Gérer la lecture de plusieurs fichiers (204) Utiliser les 2 GPU disponibles sur une machine Utiliser 2 GPU sur 2 machines Avec un autre matériel: Passer à N GPU Écrire et tester le même algorithme sur des Xeon Phi Prochaines étapes sur la plateforme actuelle : Gérer la lecture de plusieurs fichiers (204) Utiliser les 2 GPU disponibles sur une machine Utiliser 2 GPU sur 2 machines Avec un autre matériel: Passer à N GPU Écrire et tester le même algorithme sur des Xeon Phi Les GPU ne sont pas utilisables partout… loin de là ! Le calcul doit s'y prêter. Mais je suis convaincu qu'il y a des tas d'endroits dans le code LSST où c'est applicable : traitement d'images, simulation, … Les GPU ne sont pas utilisables partout… loin de là ! Le calcul doit s'y prêter. Mais je suis convaincu qu'il y a des tas d'endroits dans le code LSST où c'est applicable : traitement d'images, simulation, … Fait ! Et c'est très simple … Il suffit de lancer le "kernel" alternativement sur les 2 GPU. La synchronisation est gérée par le système. Résultat : Galaxies 1 GPU : 404 s 2 GPU : 204 s Il n'y a donc quasiment pas d'overhead Résultat : Galaxies 1 GPU : 404 s 2 GPU : 204 s Il n'y a donc quasiment pas d'overhead Contribution de Fabio Hernandez pour mener à bien ce projet Code dispo dans github Utilisation de Trello comme outil de suivi / gestion de projet Dominique Boutigny 4
Février 2014 Outil de monitoring mis en place par Fabien Wernli Dominique Boutigny 5