390 likes | 507 Views
Processeurs de streaming IRISA. Eric Darve. 13 D écembre 2006. TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: A A A A A A. Plan de l’expos é. Calcul scientifique avec processeurs de cartes graphiques Calcul scientifique le processeur Cell.
E N D
Processeurs de streamingIRISA Eric Darve 13 Décembre 2006 TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AAAAAA
Plan de l’exposé • Calcul scientifique avec processeurs de cartes graphiques • Calcul scientifique le processeur Cell
L’écart de performance entre processeurs conventionnels et de streaming s’accroît
Les lois de la physique limitent la vitesse des processeurs conventionnels • Deux facteurs limitants: • La vitesse des processeurs a atteint un plateau • La bande passante entre la mémoire et le processeur est insuffisante • 27 cycles pour le cache L2 • 100-1000s pour la mémoire centrale
Les performances peuvent être augmentées de manière spectaculaire à l’aide du streaming Bande passante Gb/s Cache Séquentiel Aléatoire
Sur Nvidia, le calcul est exécuté par un grand nombre de threads 128 processeurs de calcul Un groupe de 16 processeurs partage un espace mémoire de 16 KB.
Le processeur de vertex est programmable • Processeur de vertex: transformation de l’espace réel à l’espace de l’image. Processeur de vertex programmable La chaine graphique
L’étape suivante produit des pre-pixels ou fragments • Rastérisation: convertit les primitives géométriques en « pixels » ou fragments.
Le processeur de pixel est habituellement utilisé pour le calcul scientifique Processeur de pixel programmable • Ce processeur calcule la couleur de chaque pixel. • La couleur est parfois calculée à l’aide d’une texture.
Le calcul de streaming définit des opérations en bloc à l’aide de streams et noyaux • Stream: c’est une collection de données sur lesquelles un calcul similaire doit être effectué • Exemple: nœuds de maillage, particules, éléments… • Permet un parallélisme de données • Noyaux: c’est une fonction qui est exécutée pour chaque élément du stream • Exemple: différences finies, forces… • Le noyau définie une dépendance limitée entre éléments du stream. • Un calcul arithmétique intensif est encouragé.
La streaming consiste à exécuter des opérations en bloc et en parallèle Le calcul est exécuté en même temps que les données sont transférées Ceci est possible parce que le langage de programmation spécifie précisément la dépendance entre les données. Calcul 1 Ecrit sortie 0 Lit entrée 2 Calcul 2 Ecrit sortie 1 Temps Lit entrée 3 Calcul 3 Ecrit sortie 2 Lit entrée 4
Plusieurs langages de programmation peuvent être utilisés: Brook, CTM, CUDA • Brook: développé à Stanford par Buck et Hanrahan • Le code source est accessible; simple mais efficace • Indépendant de la carte et du pilote • CTM: développé par ATI • Bas niveau; difficile à utiliser • Haute performance • Bientôt intégré à Brook • CUDA: développé Buck à Nvidia • Le successeur de Brook • Adapté pour tenir compte de l’architecture
Brook utilise des compilateurs et librairies existants Sans Brook, programmer une GPU est une tache complexe Le programme est compilé avec C++ Le code parallèle est transformé en code pour le shader Le code pour le shader est compilé avec CG de NVIDIA OpenGL ou DirectX sont utilisés pour charger et lancer le code sur la carte graphique Ils sont également utilisés pour transférer les données sous forme de textures. GPU Textures Shaders CPU OpenGL/DirectX Données Code CG (Nvidia) compilateur pour le shader Code parallèle
La syntaxe d’un noyau en Brook ressemble au C • Le noyau foo est implicitement executé en parallèle pour tous les éléments du stream a en input. • Aucune dépendance entre éléments n’est autorisé. kernel void foo (float a<>, float b<>, out float results<>) { result = a + b; } float a<100>; float b<100>; float c<100>; foo(a,b,c); for (i=0; i<100; i++) c[i] = a[i]+b[i];
Différents types d’argument sont possibles • Types d’arguments: • Input/output • Gather • Itérateurs • Paramètres constants • Variables de réduction (somme, produit, max, min…) kernel void foo (…, float array[]) { a = array[i]; } kernel void foo (…, iter float n<>) { a = n + b; } kernel void foo (…, float c) { a = c + b; } reduce void sum (float a<>, reduce float r<>) { r += a; } kernel void foo (float a<>, float b<>, out float result<>) { result = a + b; }
Le stockage des données dans la mémoire de texture suit la topologie d’une image • Les tableaux 1D sont stockés sous la forme de tableaux 2D. • Une transformation des indices est nécessaire.
Les tableaux 3D sont transformés de la même façon • Tableaux 2D: trivial • Tableaux 3D: stockés avec un indice 2D
La performance maximale est atteinte pour les algorithmes « intensifs » Cache Séquentiel Nvidia 8800 GTX
Modèle constitutif pour un calcul par élément fini en mécanique du solide : explosion d’une boîte Calcul des contraintes étant donné les déformations Le matériau est modélisé par un modèle élastique non-linéaire: neo-hookéen (caoutchouc, pneus…) Hardware: ATI X800. L’accélération serait bien supérieure avec la dernière génération de cartes. Performance de la GPU/ Pentium Facteur de 14 Collaboration avec Adrian Lew
Une GPU est 70 fois plus rapide qu’une CPU pour le problème à N-corps • Stratégies pour utiliser la GPU de façon optimale: • Code vectoriel • Déroulage de boucles • Sorties de pixel multiples • Distribution des donnéespour optimiser le cache • Algorithme présent: N2 • Directions futures: • Algorithmes de complexité linéaire (Barnes-Hut, méthode multipôle…) • Grappes de GPUs Résultats sur ATI X1900XTX
Le code de dynamique moléculaire Gromacs a été sélectionné pour ses performances • L’algorithme est relativement « simple ». • Les équations de Newton sont intégrées à l’aide d’un intégrateur symplectique du second ordre: Störmer/Verlet. • Le coût de calcul principal est le calcul des forces interatomiques.
Init Forces Send data to GPU Thermostat/Pressure coupling Gromacs sur les GPUs Do neighbor search Y Read data from GPU If neighbor search N N If done Y Position and velocity update Finish Constraints
Implémentation des contraintes dans Gromacs • Les contraintes sont utilisées pour bloquer certains degrés de liberté comme les liaisons chimiques. • Ceci permet d’augmenter le pas de temps. • Deux approches sont possibles: • SETTLE: exact mais applicable à un triplet d’atomes seulement, e.g. molécules d’eau. Facilement programmable. • SHAKE: algorithme général, basé sur une itération sur les liaisons chimiques, en les corrigeant les unes après les autres à chaque passe.
Shake a été implémenté en utilisant l’algorithme des couleurs • Le calcul en parallèle ne permet pas à un atome d’apparaître plus d’une fois dans une liste. On crée donc plusieurs listes. • Par exemple, les liaisons de même couleur peuvent être modifiées en parallèle : 5 5 1 2 3 4 1 2 3 4 6 7 6 Les nombres correspondent au numéro de la liaison 8 7
Gromacs sur GPUs a été installé sur Folding@Home • Problème à N-corps étendu pour simuler des protéines • Liaisons chimiques, contraintes, intégration en temps, thermostat… • Intégré dans Folding@Home, un système de calcul distribué à travers le monde pour replier des protéines • 200,000 CPUs actives • En termes de performance:1 GPU = 62 Windows
Plan de l’exposé • Calcul scientifique avec processeurs de cartes graphiques • Calcul scientifique le processeur Cell
Le processeur Cell a une architecture streaming • Un processeur pour le calcul scientifique… et la PlayStation 3. • 8 processeurs de calcul, chacun avec une mémoire locale de 256 kB • Le transfert de données entre la mémoire centrale et chaque processeur est géré par l’utilisateur
Power Processor Element • PPE a un système opérationnel et contrôle toutes les tâches • Architecture 64-bit Power • 32KB L1 and 512KB L2
Synergistic Processor Element • SPE est l’unité qui fait les calculs • Dual issue, jusqu’à 16-way 128-bit SIMD • Ressources dédiées: 128 128-bit RF, 256KB Local Store • Moteur DMA dédié: jusqu’à 16 requêtes simultanées
Element Interconnect Bus • EIB data ring pour communication interne • 96B/cycle bande passante maximum • Jusqu’à 100 requêtes simultanées
PPU SPU L’utilisateur contrôle le transfert du code et des données spu_main() computeOnSPU() Has SPE threadbeen created? Has context info.arrived? Create thread Fortran code Gather context info. Create DMA lists & issue DMA get() Transmit context info Kernels Issue DMA put() Have all SPEs finished? Transmit “done” signal Return
Résultats préliminaires • Stanford a accès au hardware (deux serveurs Cell Blade). • Le processeur PPU (PowerPC) est très lent: ralentissement par 10x comparé à un Pentium 4 3.6GHz. Cell doit être utilisé comme un co-processeur pour des applications complexes. • La mémoire doit être alignée pour les transferts; un problème majeur pour les gros codes avec beaucoup de tableaux. • La vectorisation est compliquée: les données doivent être alignées. • Un buffering compliqué doit être utilisé pour réduire le trafic mémoire. • La taille du code et des données dans le local store est crucial.
Un code de dynamique des fluides a été porté sur Cell • Différences finies Schéma d’ordre 3 • Solution stationnaire • Euler avec flot compressible • Pas de temps local basé sur le rayon spectral • RANS • Code multi-bloc structuré • Méthode multi-grille
La technique du buffer circulaire est utilisée • SUmb est un code multi-bloc; chaque bloc est subdivisé à nouveau pour le local store. • Le choix de la taille des blocs est crucial • Les transferts DMA pour charger les blocs sont complexes (alignement pour le DMA et la vectorisation). • Buffering circulaire utilisé pour réduire le trafic mémoire. • Le code a été vectorisé. Communication Calcul Buffering circulaire Buffering double classique
Les résultats sont encourageants mais l’implémentation est très difficile • Time(%) kernel name • 11.54 inviscidflux_ • 9.15 computenewstate_ • 7.46 dissflowscalarnopreczeta_ • 7.41 dissflowscalarnopreceta_ • 7.37 dissflowscalarnoprecxi_ • 6.99 multiplybyradiusnopreceta_ • 6.92 multiplybyradiusnoprecxi_ • 6.67 multiplybyradiusnopreczeta_ • 5.2 penaltyterms_ • 4.59 dissipation_mp_dissipationxi_4th_ • 4.36 firstderivatives_mp_diffxi_1st_ • 3.11 timestep_ • 2.62 firstderivatives_mp_diffeta_1st_ • 2.44 dissipation_mp_dissipationzeta_4th_ • 2.42 firstderivatives_mp_diffzeta_1st_ • 2.41 dissipation_mp_dissipationeta_4th_ • 2.07 sumresiduals_ • 1.86 executerkstage_ • 1.69 computeetot_ • 1.64 timederivativeandmgforceterms_ • 0.59 rungekuttasmoother_ • … • Performance mesurée: • 0.65 GFlops avec un P4 3.6GHz • 0.06 GFlops avec le PPU Cell • 5.7 GFlops avec 8 SPUs 2.4GHz • = 9x accélération • Avec le processeur de production: • 6.9 GFlops avec 8 SPUs 3.2GHz • = 12x accélération • Les performances peuvent être améliorées si le code est réécrit entièrement pour le Cell. Porté (sauf penaltyterms et computenewstate) 91% 95%
Conclusion • Utilisation des nouveaux processeurs de streaming pour le calcul scientifique • Cartes graphiques Nvidia et ATI • Processeur Cell • Applications: dynamique moléculaire et mécanique des fluides • Autres sujets de recherche: • Méthodes numériques pour la dynamique moléculaire • Méthode multipôle • Ecoulements de Stokes avec particules qui sédimentent • Micro-canaux et électro-osmose