Master 2013 2014
psar
Programmation haut-niveau des architectures hybrides CPU-GPU


Site :Trac-Programmation haut-niveau des architectures hybrides CPU-GPU
Encadrant : FORTIN, Pierre (Pierre.Fortin@lip6.fr) SAID, Issam (Issam.Said@lip6.fr)


Description

Nombre d’étudiants demandé : 2

Description générale :

En géophysique moderne, les méthodes d’imagerie sismique reposent souvent sur la méthode des différences finies pour la modélisation de la propagation des ondes dans le sous-sol. Ce type d’algorithme, relativement simple, est parfaitement adapté aux architectures massivement parallèles et est un très bon sujet d’étude pour le calcul haute performance.

Dans le cadre d’un projet de recherche avec la société TOTAL, nous nous intéressons à l’accélération de certains modèles de propagation d’ondes sur la nouvelle architecture APU (Accelerated Processing Unit, ou Fusion) de la société AMD. Cette architecture permet d’associer sur une même puce un processeur CPU et un processeur GPU (Graphics Processing Unit). Ceci permet au CPU et au GPU d’accéder à une même mémoire physique, et d’éviter ainsi les transferts de données via le bus PCI qui pénalisent les performances de nombreuses applications sur GPU : les toutes dernières consoles de jeux (Sony PlayStation 4 et Microsoft Xbox One) sont ainsi basées sur ces nouveaux APU.

Il existe deux paradigmes principaux pour la programmation des GPU :
- une programmation "bas-niveau" (langages OpenCL et CUDA) qui permet d’obtenir des performances maximales, au prix d’un important effort de développement ;
- une programmation "haut-niveau" via des directives de compilation (#pragma en C/C++, voir par exemple OpenACC ou la dernière version d’OpenMP) qui permet de réduire considérablement les temps de développement, et de procéder de façon incrémentale, mais implique parfois des baisses de performance.

Nous avons déjà développé un code optimisé pour ces APU grâce à un langage bas-niveau (OpenCL). Nous souhaiterions désormais comparer cette approche avec l’utilisation de directives de compilation.

Travail à effectuer :

A partir de notre code d’imagerie sismique en C/C++ (stencils de différences finies pour la propagation des ondes), vous devrez utiliser ces directives de compilation afin d’exploiter au mieux la puissance de calcul de ces nouvelles architectures APU.

Plus précisément, après une prise en main de ce paradigme de programmation haut-niveau, vous devrez déployer le code fourni sur APU à l’aide de directives de compilation : on utilisera pour cela l’implémentation OpenACC de la société CAPS-Entreprise qui permet d’exploiter pleinement les APU. Les performances de ce code seront alors comparées à notre code optimisé en OpenCL.

Diverses améliorations pourront alors être envisagées pour s’approcher au mieux des performances du code OpenCL : on prendra d’abord en compte le placement des données afin de tirer parti de la mémoire des APU, puis on pourra s’intéresser à l’optimisation des noyaux de calcul (toujours via des directives de compilation, comme les directives HMPPCG développées par CAPS Entreprise).

Aucune connaissance préalable des GPU et de leur programmation n’est nécessaire.

Bibliographie

Fusion APU (AMD) : http://www.amd.com/us/products/tech...

Fusion APU (Wikipedia) : http://en.wikipedia.org/wiki/AMD_Ac...

OpenACC : http://www.openacc-standard.org/

CAPS Entreprise : http://www.caps-entreprise.com/