Programmation parallèle CPU/GPU NOVASYS Ingénierie Clément HERMITE
Plan Introduction CPU MPI OpenMP Architectures Hybrides GPU Mesure et analyse de performance Conclusion
Introduction
CPU
MPI – Message Passing Interface 1/2 Bibliothèque de fonctions ( C, C++, Fortran …) Permet d'exploiter des ordinateurs distants ou multiprocesseur par passage de messages. Portable. Routines de la librairie : « MPI_ »
MPI – Message Passing Interface 2/2 #include<mpi.h> #define TAG 99 main(int argc, char **argv) { char msg[20]; int my_rank; MPI_Status status; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &my_rank); if (my_rank == 0) { /*-- process 0 --*/ strcpy(msg, "Hello world!\n"); MPI_Send(msg, strlen(msg)+1, MPI_CHAR, 1, TAG, MPI_COMM_WORLD); } else { MPI_Recv(msg, 20, MPI_CHAR, 0, TAG, MPI_COMM_WORLD, &status); printf("Je recois : %s\n", msg); } MPI_Finalize();
(Open Multi-Processing) OpenMP 1/2 (Open Multi-Processing) Nécessite une machine multiprocesseurs à mémoire partagée. Déclaration des zones parallèles avec des #pragma. Utilise le modèle d’exécution parallèle « fork_join » . Mise en œuvre relativement facile.
OpenMP 2/2 #include <omp.h> main(){ int i, t[100]; Avec 4 threads: le premier calcule les t[i] de 0 à 24, le second de 25 à 49, le troisième de 50 à 74 et Le quatrième de 75 à 99. #include <omp.h> main(){ int i, t[100]; #pragma omp parallel for for (i=0; i<100 ; i++){ t[i]=i; } Variable d’environnement : export OMP_NUM_THREADS=4 Au cours de l’exécution: omp_set_num_threads(4) #pragma omp parallel num_threads(4)
OpenMP vs MPI MPI : la gestion des communications est à la charge de l'utilisateur. OpenMP : la gestion des communications est à la charge du compilateur. MPI et OpenMP sont complémentaires.
Architectures Hybrides
Cell Processeur multi-cœurs hétérogène. 1 cœur principal (PPE) 8 cœurs spécifiques (SPE)
Cell Abandonné en 2009 Processeur multi-cœurs hétérogène. 1 cœur principal (PPE) 8 cœurs spécifiques (SPE) Abandonné en 2009
Larrabee Processeur graphique Composé de dizaines de cœurs. Dérivés de processeurs Pentium 64-bits Multithreading Utilise le jeu d'instruction x86.
Larrabee Abandonné en décembre 2009 Processeur graphique Composé de dizaines de cœurs. Dérivés de processeurs Pentium 64-bits Multithreading Utilise le jeu d'instruction x86. Abandonné en décembre 2009
Unité graphique de calcul GPU Unité graphique de calcul
General-Purpose Processing on Graphics Processing Units GPGPU 3/3 General-Purpose Processing on Graphics Processing Units Calcul générique sur processeur graphique.
CPU vs. GPU 1/3
CPU vs. GPU 2/3 GPU : multiplication des unités de traitement CPU : complexification des unités de contrôle augmentation régulière de la mémoire cache embarquée
CPU vs. GPU 3/3
Nvidia
Cuda Compute Unified Device Architecture. Pilote (ForceWare) Runtime Bibliothèques: CuBLAS et CuFFt. C, le C++ et le Fortran
Architecture Fermi Prise en charge du langage de programmation C++ (CUDA C++) Espace d'adresses unifié pour le support complet de C++ Apparition de caches Cache configurable (L1-Mémoire partagée) Compatible IEEE 754-2008 (précision 32 et 64 bits) Exécution simultanée des kernels Support intégral ECC (codes de correction d'erreurs) Changement de contexte rapide Instructions atomiques 10 fois plus rapides
Autres technologies
Ati Stream Brook Brook+ Close to Metal Ati Stream Développée par AMD Concurrent de CUDA
OpenCL Standard ouvert Langage commun à toutes les architectures CPU, GPU, Cell etc … Apple, AMD, Intel, Nvidia et Sony
Mesure et analyse de permformance
Outils de mesure Mesure externe Mesure interne time total > user + system Mesure interne time() nombre de sec depuis 01/01/1970 clock() compte les clics d’horloge gettimeofday() appel system le plus précis
Expression des performances Accélération (Speed up)
Expression des performances Efficacité L'utilisateur s'intéresse surtout à l'accélération obtenue (Speed up). L'acheteur de la machine s'intéresse beaucoup à l'efficacité. Le développeur s'intéresse aux deux.
Expression des performances Loi d'Amdahl Speed up max
Expression des performances
Conclusion