Introduction à la programmation GPU. P. Fortin UPMC / LIP6 ANR TaMaDi 27/10/2010



Documents pareils
Introduction à CUDA.

Initiation au HPC - Généralités

. Plan du cours. . Architecture: Fermi ( ), Kepler (12-?)

Introduction au calcul parallèle avec OpenCL

Architecture des ordinateurs

Calcul multi GPU et optimisation combinatoire

Une bibliothèque de templates pour CUDA

Architecture des calculateurs

Segmentation d'images à l'aide d'agents sociaux : applications GPU

Contrôle Non Destructif : Implantation d'algorithmes sur GPU et multi-coeurs. Gilles Rougeron CEA/LIST Département Imagerie Simulation et Contrôle

Introduction à la programmation des GPUs

Limitations of the Playstation 3 for High Performance Cluster Computing

Architecture des Ordinateurs. Partie II:

Catalogue des stages Ercom 2013

Hiérarchie matériel dans le monde informatique. Architecture d ordinateur : introduction. Hiérarchie matériel dans le monde informatique

M2-Images. Rendu Temps Réel - OpenGL 4 et compute shaders. J.C. Iehl. December 18, 2013

Eléments d architecture des machines parallèles et distribuées

Leçon 1 : Les principaux composants d un ordinateur

Systèmes et traitement parallèles

Info0804. Cours 6. Optimisation combinatoire : Applications et compléments

Rapport de stage Master 2

Quantification d incertitude et Tendances en HPC

Exécution des instructions machine

Choix d'un serveur. Choix 1 : HP ProLiant DL380 G7 Base - Xeon E GHz

Fonctionnement et performance des processeurs

Sur un ordinateur portable ou un All-in-One tactile, la plupart des éléments mentionnés précédemment sont regroupés. 10) 11)

INF6500 : Structures des ordinateurs. Sylvain Martel - INF6500 1

Potentiels de la technologie FPGA dans la conception des systèmes. Avantages des FPGAs pour la conception de systèmes optimisés

Les environnements de calcul distribué

Programmation C. Apprendre à développer des programmes simples dans le langage C

Introduction à l architecture des ordinateurs. Adrien Lebre Décembre 2007

Programmation parallèle et ordonnancement de tâches par vol de travail. Thierry Gautier MOAIS, INRIA, Grenoble

Chapitre 4 : Les mémoires

Infrastructures Parallèles de Calcul

Contribution à la conception à base de composants logiciels d applications scientifiques parallèles.

Génération de code binaire pour application multimedia : une approche au vol

T. Gasc 1,2,3, F. De Vuyst 1, R. Motte 3, M. Peybernes 4, R. Poncet 5

MODULE I1. Plan. Introduction. Introduction. Historique. Historique avant R&T 1ère année. Sylvain MERCHEZ

Tests de performance du matériel

Structure de base d un ordinateur

Base de l'informatique. Généralité et Architecture Le système d'exploitation Les logiciels Le réseau et l'extérieur (WEB)

HP 600PD TWR i G 4.0G 39 PC

Systèmes Multi-Agents et GPGPU : état des lieux et directions pour l avenir

Outil d aide au choix Serveurs Lot 4 Marché Groupement de Recherche

Machine virtuelle W4M- Galaxy : Guide d'installation

Master première année. Mention : Statistiques et Traitement de Données «STD» Rapport de stage

Introduction à la Programmation Parallèle: MPI

Une méthode de conception de systèmes sur puce

État de l art des simulations multi-agents sur GPU

Rappels d architecture

SERVEUR LYNX CALLEO DATACENTER 2460

Exécutif temps réel Pierre-Yves Duval (cppm)

Calcul scientifique précis et efficace sur le processeur CELL

Serveur Lynx CALLEO Application 2240S Fiches Technique

Java à Murex: un retour d'expérience. Jean-Pierre DACHER & Craig MORRISON

ESXi: Occupation RAM avec VM_Windows et VM_Linux. R. Babel, A. Ouadahi April 10, 2011

Serveur Lynx CALLEO Application 2240 Fiches Technique

AutoForm plus R6 : Besoins systèmes

Vers du matériel libre

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Caractéristiques principales:

Exigences système Edition & Imprimeries de labeur

La carte à puce. Jean-Philippe Babau

Comme chaque ligne de cache a 1024 bits. Le nombre de lignes de cache contenu dans chaque ensemble est:

Fiche produit Fujitsu CELSIUS C620 Station de travail

Exigences système Commercial & Digital Printing

CH.3 SYSTÈMES D'EXPLOITATION

Une dérivation du paradigme de réécriture de multiensembles pour l'architecture de processeur graphique GPU

Pré-requis installation

Informatique Générale

Matériel & Logiciels (Hardware & Software)

Séminaire RGE REIMS 17 février 2011

THEME 1 : L ORDINATEUR ET SON ENVIRONNEMENT. Objectifs

Equipements et Logiciels destinés aux universités/instituts de la liste 2 (voir Annexe)

Protection des données avec les solutions de stockage NETGEAR

Robot WIFIBOT Lab V3. 4 roues motrices

Single User. Guide d Installation

Architecture ordinateur. Organisation mémoire et Entrées/Sorties

Infrastructure de calcul du CRRI

Certificat Informatique et internet Niveau 1 TD D1. Domaine 1 : Travailler dans un environnement numérique évolutif. 1. Généralités : Filière

SIGAMM/CRIMSON COMMISSION UTILISATEUR du 05/12/2014

Canvas 3D et WebGL. Louis Giraud et Laetitia Montagny. 9 Avril Université Lyon 1

Nouvelle génération, plus performante

Chapitre V : La gestion de la mémoire. Hiérarchie de mémoires Objectifs Méthodes d'allocation Simulation de mémoire virtuelle Le mapping

Pré-requis installation

UE Programmation Impérative Licence 2ème Année

Pré-requis installation

Architecture des ordinateurs Introduction à l informatique

La technologie Java Card TM

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

Rapport 2014 et demande pour Portage de Méso-NH sur Machines Massivement Parallèles du GENCI Projet 2015 : GENCI GEN1605 & CALMIP-P0121

Version janvier Manuel d'utilisation. Adaptateur Ethernet rapide 10/100 USB 2.0

Conception des systèmes répartis

Transcription:

Introduction à la programmation GPU P. Fortin UPMC / LIP6 ANR TaMaDi 27/10/2010

Les processeurs graphiques (GPU) GPU : Graphics Processing Unit GPGPU : General Purpose computation on Graphics Processing Unit (ou GPU Computing) Architectures massivement parallèles conçues pour décharger le CPU des traitements graphiques Introduction progressive des nombres flottants, de la simple et de la double précision, du respect de la norme IEEE et des fonctions mathématiques élémentaires (cos, sin, sqrt...) Architecture «manycore» 2

Comparaison CPU GPU : performance crête (CUDA Programming Guide 2.3) 3

Comparaison GPU GPU : bande passante mémoire (CUDA Programming Guide 2.3) 4

Architecture des GPU Réduction de la place prise par les caches et par les unités de contrôle de l'exécution Augmentation des unités de calcul (CUDA Programming Guide 2.3) 5

Architecture des GPU (2) 1 Multiprocesseur (MP) contient 8 Scalar Processor (SP) «coeurs» Exemple Tesla C1060 : 30 Multiprocesseurs 240 «coeurs» @ 1296 MHz Ou : 30 coeurs 8 way SIMD Performance crête Simple précision : 933 Gflop/s Double précision : 78 Gflop/s Mémoire globale (Device Mem) : 4 Go Bande passante mémoire : 102 Go/s Bande passante CPU GPU (bus PCI Express 2.0 16x) : 8 Go/s Mémoire partagée : 16 Ko (CUDA Programming Guide 2.3) 6

Architecture des GPU (3) Exemple Fermi C2050 : 14 Multiprocesseurs avec 32 SP chacun 448 SP («coeurs») @ 1.15 GHz Ou : 14 coeurs 32 way SIMD Performance crête : Simple précision : 1,03 Tflop/s Double précision : 515 Gflop/s Mémoire globale (Device Mem) : 3 Go Bande passante mémoire : 144 Go/s Cache L1 (configurable : de 16Ko à 48 Ko complète mémoire partagée) + cache L2 (768 Ko) Protection mémoire ECC (CUDA Programming Guide 2.3) 7

Programmation des GPU NVIDIA : CUDA Code C/C++ séquentiel sur CPU et code parallèle CUDA (C/C++ avec extensions CUDA) sur GPU Grille 2D de blocs 3D de threads Chaque bloc de threads est placé sur 1 des multiprocesseurs Les threads du blocs s'exécutent sur les SP du multiprocesseur Programmation «thread centrée» (CUDA Programming Guide 2.3) 8

Exemple : produit matriciel (d'après CUDA 3.1 Best Practices Guide) global void sharedabmultiply(float *a, float* b, float *c, int N){ } shared float atile[16][16], btile[16][16]; int row = blockidx.y * blockdim.y + threadidx.y; int col = blockidx.x * blockdim.x + threadidx.x; float sum = 0.0f; atile[threadidx.y][threadidx.x]= a[row*16+threadidx.x]; btile[threadidx.y][threadidx.x] = b[threadidx.y*n+col]; syncthreads(); for (int i = 0; i < 16; i++) { } sum += atile[threadidx.y][i]* btile[i][threadidx.x]; c[row*n+col] = sum ; 9

Programmation des GPU Architecture SIMT (Single Instruction, Multiple Thread) Threads scalaires masque l'exécution SIMD (mais celle ci doit être prise en compte pour obtenir de meilleures performances) Exécution synchrone par warp de 32 threads Eviter tout branchement divergent entre les threads d'un même warp! ( predication sur Fermi) Distribution déterministe des warps sur les blocs de threads Nombre maximum de warps par multiprocesseur : 48 (Fermi), soit 48 x 32 (threads) x 14 (multiprocesseurs) = 21504 threads Ordonnancement des threads sans surcoût (nombreux registres : 32768 par multiprocesseur sur C2050) recouvrement des accès mémoires en «surchargeant» le multiprocesseur de threads mais : taille de la mémoire partagée limitée, et attention au register spilling 10

Programmation des GPU (2) Hiérarchie mémoire exposée : mémoire partagée user managed cache Et aussi : mémoire constante et mémoire de textures Coalesced memory accesses : regroupement de plusieurs accès mémoire (depuis la mémoire globale) en 1 seule opération Sur Fermi C2050 : 1 ligne de cache = 128 octets 1 coalesced memory access si les 32 threads d'1 warp accèdent à 32 floats alignés (128 byte aligned) en mémoire globale Opérations atomiques (ex : atomicadd() ) Sur Fermi : exécution concurrente de plusieurs kernels Avec CUDA 3.1 : jusqu'à 16 kernels exécutés en même temps 11

Tuning de code CUDA (d'après F. Bodin) 1) Déterminer le nombre de threads par bloc degré de vectorisation 2) Etudier les «coalesced memory accesses» 3) Déterminer le nombre de blocs dans la grille 4) Prendre en compte la mémoire partagée 5) Minimiser le nombre de registres 12

Bibliothèques optimisées CUBLAS (extension de l'interface BLAS pour spécifier indépendamment les transferts CPU GPU) : Produit matriciel réel simple précision (SGEMM) : sur C1060 = 374 Gflop/s max environ sur C2050 (version de MAGMA) = 645 Gflop/s (63% de la performance crête) limité par bande passant mémoire: memory bound (computation bound sur CPU) Et aussi pour LAPACK : MAGMA et CULA CUFFT 13

Autres langages de programmation des GPU AMD : Brook+ (haut niveau, stream computing), CAL, CTM (Close To The Metal, bas niveau) GPU AMD : instructions vectorielles AMD = AMD+ATI AMD Fusion (2011) : CPU+GPU=APU (Accelerated Processing Unit) OpenGL (Open Graphics Library) OpenCL (Open Compute Library) Portable sur tous les GPU (et aussi multicoeurs, Cell...) Instructions vectorielles (GPU ATI, SSE...) Actuellement supporté par Apple (Mac OS X v10.6), NVIDIA, AMD ATI CUDA conserve certaines spécificités (ex : Page Locked Host Memory pour accélérer les transferts mémoire CPU GPU) 14

Points forts et points faibles Bande passante mémoire GPU meilleure que bande passante mémoire CPU Programmation relativement aisée (CUDA) Respect norme IEEE 754 (simple et double) sur les GPU les plus récents Exploitation directe des nouveaux GPU (mais attention aux optimisations spécifiques à un GPU...) Requiert un parallélisme de données massif : milliers de threads + 32 way SIMD : régularité des calculs entre threads Requiert des applications avec une forte intensité de calcul Optimisation avancée du code non triviale Faible bande passante du bus PCI ( goulet d'étranglement) Pas de partage des ressources matérielles (mémoire partagée, registres...) 15