Introduction au Calcul Haute Performance Nicolas Renon, Ingénieur en Calcul Scientifique, Ph. D CICT ( Centre Interuniversitaire de Calcul de Toulouse ) ([email protected]) http://www.calmip.cict.fr ; http://www.cict.fr Master IM2P2 - Calcul Scientifique 19/10/09 Page 1 Plan : • • • Les systèmes HPC – Typologie des systèmes : • Machines Mémoire partagée • Machines à Mémoire Distribuées • Machine NUMA – Exemple : Visite CICT Architectures Processeurs HPC – Processeurs scalaires, superscalaires, vectoriels – Concepts d’optimisation Optimisation de codes – Technique d’optimisation – Compilo, librairies Master IM2P2 - Calcul Scientifique 19/10/09 Page 2 Calcul Intensif et Système HPC Calcul Intensif : Principes des systèmes HPC Hardware et Software Performance Calcul Flottants Flop/s + Mémoire (RAM et espace fichier) Flop : floating operation (mult, add) opération Stockage, I/O sur les nombres à virgule flottantes (nombre réels) ++ Mutualisation, Centralisation 3,14159 -6,8675456342 E+08 Plusieurs Utilisateurs d’un même serveur Partage des ressources cohérent : Règles Utilisation OS performant : Multi-applications, Multi-User Serveur Totalement Dédié au Calcul Applications Scientifiques Calcul uniquement Sauvegarde Espace Fichier / Stockage Accès distant contrainte d’hébergement lourdes : Electricité, (secouru) Refroidissement Poids Sécurité …. Master IM2P2 - Calcul Scientifique 19/10/09 Page 3 Panorama Systèmes HPC UMA Accès Mémoire Uniforme Machine à Mémoire Partagée : •Multiprocesseurs •Un seul espace d’adressage •Mémoire partagée NUMA Accès Mémoire Non Uniforme PROGRAMME Machine à Mémoire Distribuées (Cluster) : NORMA no-remote memory access •Multi-Ordinateurs •Espace d’Adressage Multiple Master IM2P2 - Calcul Scientifique 19/10/09 Page 4 Panorama MIMD UMA NUMA NORMA MPP Multiple Instruction s Multiple Data Uniform Memory Access Non-Uniform Memory Access No-Remote Memory Access Massively Parallel Processor PVP (Cray T90) UMA Central Memory Multiprocessors Single Address space Shared Memory PVP SMP COMA CC-NUMA NCC-NUMA NUMA Parallel Vector Processor Symmetric Multi-Processor Cache Only Memory Architecture Cache-Coherent NUMA Non-Cache Coherent NUMA distributed memory SMP (Intel SHV, SUN E10000, DEC 8400 SGI Power Challenge, IBM R60, etc.) COMA (KSR-1, DDM) CC-NUMA (SGI 3000, SGI 2000, Altix HP Exemplar,Sequent NUMA-Q, Data General) NCC-NUMA (Cray T3E) MIMD Multicomputers Multiple Address spaces NORMA no-remote memory access Cluster (IBM SP2, DEC TruCluster, Microsoft Wolfpack, etc.) loosely coupled “MPP” (Intel TFLOPS, Cray T3E) tightly coupled Master IM2P2 - Calcul Scientifique 19/10/09 Page 5 Mémoire Partagée : Architecture UMA – Coté utilisateur : • Une seule Machine (1 seul OS) - plusieurs processeurs - un seul espace d’adressage mémoire • Programmation : extension programmation monoprocesseur – Coté Machine : SMP Symmetric MultiProcessor • Bus Interconnexion entre la mémoire et les processeurs • Mémoire centrale et les E/S : partagées par tous les processeurs • Proc. accèdent même mémoire centrale Cohérence de Cache – cohérence de cache # processeurs modifient éléments même ligne de cache Register File Shared memory Cache Functional Unit (mult, add) Cache Coherency Unit Register File Cache Processor Functional Unit (mult, add) Cache Coherency Unit Processor OS Master IM2P2 - Calcul Scientifique 19/10/09 Page 6 Cohérence des caches A=1.5E8 Shared memory Bus interconnect A=1.5E8 cache cache cache FPU FPU FPU Master IM2P2 - Calcul Scientifique 19/10/09 Page 7 Cohérence des caches A=1.5E8 Shared memory Bus interconnect A=1.5E8 cache cache cache FPU FPU FPU Master IM2P2 - Calcul Scientifique A=1.5E8 19/10/09 Page 8 Cohérence des caches Shared memory A=1.5E8 Bus interconnect A=1.5E8 cache FPU A=0.6E-2 cache cache FPU FPU A=1.5E8 Les processeurs ont des valeurs différentes de A Master IM2P2 - Calcul Scientifique 19/10/09 Page 9 Cohérence des caches Shared memory A=1.5E8 Bus interconnect ? A=1.5E8 cache FPU A=0.6E-2 cache cache FPU FPU A=1.5E8 ? Les processeurs ont des valeurs différentes de A Intolérable point de vue programmeur Master IM2P2 - Calcul Scientifique 19/10/09 Page 10 Machine UMA - Cohérence des caches – Différents protocoles de cohérence des caches • Invalidation – 1 write invalidation données autres processeurs • Snooping – Transparent pour l’utilisateur – Mais : • Pèse sur la performance de la machine • Le programmeur doit en avoir conscience OpenMP Master IM2P2 - Calcul Scientifique 19/10/09 Page 11 Problèmes des architectures UMA – Accès à la mémoire: – les accès concourants des processeurs à la mémoire partagée créent un goulot d’étranglement Dégradation des performances (temps accès donnée ) – des niveaux de caches (tailles) efficaces permettent d’économiser des références à la mémoire Register File memory Cache Functional Unit (mult, add) Cache Coherency Unit Processor Register File Cache Functional Unit (mult, add) Cache Coherency Unit Processor OS Conséquence : faible nombre de processeurs •Cette difficulté peut être levée avec les architectures à mémoire distribuée : •Ressource mémoire décentralisée Master IM2P2 - Calcul Scientifique 19/10/09 Page 12 Machine mémoire partagée Retour Architecture processeurs Multi-core : •Différents choix d’architectures 2 cores distincts Caches distincts Cache partagé Cohérence des caches 2 bi-core Cohérence des caches/ bi-core Machines à Mémoire Partagée ! 1 bi-core = 2 mono-core ? Nécessité parallèlisation des applications Master IM2P2 - Calcul Scientifique 19/10/09 Page 13 Mémoire Distribuée (NORMA) – Ensemble processeurs mémoire interconnecté par un réseaux • MPP : Massively Parallel Processing : intégration avec couplage/interconnexion étroite, une seule machine • Cluster : interconnexion de machines(SMP) entre elles (switch) Master IM2P2 - Calcul Scientifique 19/10/09 Page 14 Mémoire Distribuée : Cluster Cluster : Point fort • Technologie de masse, beaucoup de processeurs • Beaucoup de « machines » interconnectées • Les nœuds ou machines : plusieurs processeurs M E/S M P E/S M E/S E/S E/S P M M P E/S P Réseau d’interconnexion P P M E/S P Master IM2P2 - Calcul Scientifique 19/10/09 Page 15 M E/S P M Mémoire Distribuée : Architecture multi-ordinateurs (Clusters) – Coté Machine : • Technologie de masse, beaucoup de processeurs • Les processeurs accèdent uniquement à leur propre mémoire locale • réseau Interconnexion entre « ordinateurs » défi technique capacité transfert données (n OS, etc…) Main Register File memory Functional Unit (mult, add) Cache Main Register File memory Functional Unit (mult, add) Cache Processor disk OS 1 Master IM2P2 - Calcul Scientifique Processor disk OS 2 19/10/09 Page 16 Mémoire Distribuée : Architecture multi-ordinateurs (Clusters) – Coté utilisateur : • n Machine différentes (n OS) interconnectées, 1 (ou +) proc. par machine • Programmation parallèle transfert de message (MPI , charge du programmeur) • Outils pour faciliter accès ressources et aux données Main Register File memory Functional Unit (mult, add) Cache Main Register File memory Functional Unit (mult, add) Cache Processor disk OS 1 Master IM2P2 - Calcul Scientifique Processor disk OS 2 19/10/09 Page 17 Architecture à mémoire partagée physiquement distribuée Machine NUMA : Non-Uniform Memory Access • Mixage SMP/cluster • Souplesse d’utilisation et performance • Dépendance « spatiale » par rapport aux ressources utilisées P M P M P M P M Réseau d’interconnexion P M P M M P Master IM2P2 - Calcul Scientifique 19/10/09 Page 18 P M Architecture à mémoire partagée physiquement distribuée – Coté Machine : Non-uniform memory access (NUMA) • • • • La mémoire est globalement adressable mais physiquement distribuées Proc. accèdent mémoire locale et mémoire distante Cohérence de Cache (ccNUMA) Interconnex très performant + topologie complexe (chemin redondants) Accès locaux + rapides accès lointains Register File Main memory Cache Functional Unit (mult, add) Cache Coherency Unit Register File Main memory Cache Processor Functional Unit (mult, add) Cache Coherency Unit Processor OS interconnect Master IM2P2 - Calcul Scientifique 19/10/09 Page 19 Architecture à mémoire partagée physiquement distribuée – Machine NUMA : Coté utilisateur • une seule Machine, 1 seul OS • Accès à un grand nbre de proc. Et beaucoup de mémoire (globalement adressable) • Programmation en mémoire partagée et mémoire distribuée(échange de message) Register File Main memory Cache Functional Unit (mult, add) Cache Coherency Unit Register File Main memory Cache Processor Functional Unit (mult, add) Cache Coherency Unit Processor OS interconnect Master IM2P2 - Calcul Scientifique 19/10/09 Page 20 Actuellement : Nœud de Calcul NUMA Nœud de Calcul 8 cores : NUMA Dual x4 DDR IB (4GB/s each) Master IM2P2 - Calcul Scientifique 19/10/09 Page 21 Interconnexion / réseaux Système à mémoire partagée et distribués Processeurs : commodity, RISC processeur mémoire : barrette standard DRAM Réseau/Interconnexion : liaison entre les processeur et la mémoire (bus, crossbar) entre les machines (cluster) ou des « unité » de calcul (NUMA) : Ethernet Protocole spécifique : infiniband, myrinet, NUMAlink topologie : Anneau, étoile, fat-tree, tore, hypercube Interconnexion : Latence : Combien de temps avant de démarrer un transfert de données ? Ordre de la microseconde Débit (bandwidth): A quel taux les données sont transférées ? Mbytes/sec Topologie : graphe d’interconnexion des unités de calcul Garantie les capacités du réseau à pleine charge 1 Mo/s 1 Megaoctet/s 106 octets/sec 1 Go/s 1 Gigaoctet/s 109 octets/sec 1 To/s 1 Téraoctet/s 1012 octets/s Master IM2P2 - Calcul Scientifique 19/10/09 Page 22 Interconnexion / réseaux Interconnexion : Topologie : Meilleur choix : Chaque processeur connecté à tous les autres : prix irréalisable à grande échelle (10000 procs, etc…) Faire des choix sous contraintes : Repousser les goulots d’étranglements réalisation physique (faisabilité, coûts, etc…) Extensibilité du réseau (combien de procs) Différentes stratégies Cross-bar Master IM2P2 - Calcul Scientifique 19/10/09 Page 23 Interconnexion / réseaux : complexité Notations: # procs = N = 2P diamètre = d (chemin critique entre 2 processeurs , le plus petit des pires chemin possible) # liens = w inf calcul du diamètre pour une topologie en anneau (N=4): sup d p,q P d D( p,q ) ( p,q) P, p = 0, p = 1 {d,d D(0,1)} = {d1;d2 + d3 + d4 } sup = {d2 + d3 + d4 } Topologie Anneau: 0,1 sup = sup = sup = sup 0,1 1,2 2,3 3,0 d4 ( p,q) P, p = 0, p = 2 3 sup = {d1 + d2 }ou{d3 + d4 } 0,2 d3 sup = sup sup 0,2 inf 1,3 1 2 d2 0,1 sup d = {d1 + d2 } = ( p,q ) P d D ( p,q ) d1 0 N 2 Master IM2P2 - Calcul Scientifique 19/10/09 Page 24 Interconnexion / réseaux : complexité Notations: # procs = N = 2P diamètre = d (chemin critique entre 2 processeurs , le plus petit des pires chemin possible) # liens = w inf Anneau: Grille 2D : Tore 2D : d= N ,w = N 2 ( N ) 1 1 1 d = 2 N 2 1,w = 2 N 2 N 2 1 1 2 sup d p,q P d D( p,q ) d = N ,w = 2 N 1 N 2 ,( N ) 1 N 2 ,( N ) Master IM2P2 - Calcul Scientifique 19/10/09 Page 25 Interconnexion / réseaux comparaison: p= N=2 4 16 Anneau grille2D Tore2DEnhanced d 8 6 4 P 6 64 8 256 16 10 1024 64 w 16 24 32 d 32 14 8 256 w 64 240 128 128 30 16 Master IM2P2 - Calcul Scientifique 1024 256 480 512 512 62 32 1024 1984 2048 19/10/09 Page 26 Interconnexion / réseaux : complexité topologie Hypercube 3D, 4D, 8D Master IM2P2 - Calcul Scientifique 19/10/09 Page 27 Interconnexion / réseaux : complexité Fat-tree « mirrored » Master IM2P2 - Calcul Scientifique 19/10/09 Page 28 Interconnexion / réseaux : complexité Réseaux actuels (sur machines parallèles) : Atténuation des effets « spaciaux » : Peu de différences de coût (en temps) entre source/destination Développement algorithmique moins contraint par le hardware Master IM2P2 - Calcul Scientifique 19/10/09 Page 29 Interconnexion / réseaux : implémentation Contexte Ssi (Machine ccNUMA) : 1 seule image OS Crossbar : « Routage gravé » BUS machine Unité de Calcul Master IM2P2 - Calcul Scientifique 19/10/09 Page 30 Interconnexion / réseaux : implémentation Contexte cluster : n machine n image OS Defi technique : Protocole TCP/IP Dialogue OS à OS Switch x ports Cable réseaux RJ45 Machine (nœud) de Calcul Master IM2P2 - Calcul Scientifique 19/10/09 Page 31 Interconnexion / réseaux : mise en oeuvre Contexte cluster : block élémentaires à n nœuds de calcul (128,256 cores) Block élémentaire => topologie optimale on interconnecte les blocks Master IM2P2 - Calcul Scientifique 19/10/09 Page 32 Interconnexion / réseaux : mise en oeuvre Contexte cluster : on interconnecte les blocks Master IM2P2 - Calcul Scientifique 19/10/09 Page 33 Interconnexion / réseaux : mise en oeuvre Contexte cluster : on interconnecte les blocks 352 nœuds ( 8 cores/nœuds 36 Go /nœuds) ; 2816 cores Nehalem EP Quad-core - 2,8 Ghz technologie réseaux : infiniband 88 switchs Infiniband Stockage : 250 To Master IM2P2 - Calcul Scientifique 19/10/09 Page 34 Interconnexion / réseaux : protocoles Différents Réseaux / Protocoles d’interconnexion Source : Journées JoSy, Groupe Calcul CNRS, 13/09/2007 Lyon Master IM2P2 - Calcul Scientifique 19/10/09 Page 35 Interconnexion / réseaux TOP 500 Master IM2P2 - Calcul Scientifique 19/10/09 Page 36 Calcul Haute Performance : TOP 500 List Les plus grands systèmes de calcul actuellement : classement TOP 500 Juin 2008 Benchmark : Linpack (kw) Puissance Centrale nucléaire de 40 MW à 1450 MW Master IM2P2 - Calcul Scientifique 19/10/09 Page 37 Plan : • • • Les systèmes HPC – Typologie des systèmes : • Machines Mémoire partagée • Machines à Mémoire Distribuées • Machine NUMA – Exemples Architectures Processeurs HPC – Processeurs scalaires, superscalaires, vectoriels – Concepts d’optimisation Optimisation de codes – Technique d’optimisation – Compilo, librairies Master IM2P2 - Calcul Scientifique 19/10/09 Page 38 Architecture Processeurs : MIMD Processeurs Généralistes () Jeu d’instruction complexe : multimedia, add, mult,… Spécialisé Entiers Processeurs HPC () Jeu d’instruction simple : Mult., Add, Div., Sub. Spécialisé Flottants 64 bit 32 bit Exemple : Pentium IV Exemple : Itanium II 3,2 GHz Cache 500 ko 6,4 Gflop/s peak 1,5 GHz Cache 6 Mo 6 Gflop/s peak Linpack 0,7 Linpack 5,4 Gflop/s Gflop/s Temps de restitution 8 fois + rapide! Fondeurs : Intel (Itanium), AMD (Opteron), IBM (Power), SUN (UltraSparc) , NEC (Processeurs Vectoriels) Master IM2P2 - Calcul Scientifique 19/10/09 Page 39 Architecture Processeurs HPC Définition : cycle •Fréquence d’horloge = nombre d’impulsions par seconde •200 Mhz 200 Millions de cycles par seconde •Restitution d’une opération n cycles avec n 1 Spécificités processeur HPC: •Instruction Level Parallelism (ILP) : •Pipeline •multiple Functional unit (FPU) •Memoire Hierarchique •Accès mémoire rapide •Différents niveaux de cache L1, L2, L3 •Exécution Spéculative •Branch prediction •Prefetching Master IM2P2 - Calcul Scientifique 19/10/09 Page 40 Architecture Processeurs HPC Exemple schéma Architecture Proc. Superscalaire: Itanium Master IM2P2 - Calcul Scientifique 19/10/09 Page 41 Proc. Scalaire : Pentium 4 IA32 Master IM2P2 - Calcul Scientifique 19/10/09 Page 42 Architecture Processeurs HPC Objectif Pipeline 1 cycle = 1 résultat •Vision très schématique A1 = B1 + C1 load exec write 3 phases 1 phase/cycle Pipeline : exemple •3 Opérations indépendantes A1 = B1 + C1 A2 = B2 + C2 A3 = B3 + C3 Master IM2P2 - Calcul Scientifique 19/10/09 Page 43 Architecture Processeurs HPC Objectif Pipeline 1 cycle = 1 résultat A1 = B1 + C1 A2 = B2 + C2 A3 = B3 + C3 •Opérations indépendantes load Cycle 1 exec Load B1,C1 Cycle 2 Add B1,C1 Store in A1 Cycle 3 Cycle 4 write Load B2,C2 Add B2,C2 Résultats des 3 opérations : 9 cycles Store in A2 Load B3,C3 Cycle 8 Cycle 9 Cycles (Time) Add B3,C3 Store in A3 •Ressources « idle » Master IM2P2 - Calcul Scientifique 19/10/09 Page 44 Architecture Processeurs HPC Objectif Pipeline 1 cycle = 1 résultat A1 = B1 + C1 A2 = B2 + C2 A3 = B3 + C3 •Opérations indépendantes exec load Résultats des 3 opérations : 9 cycles Pipelining : Latence : 3 cycles 1 res/cycle write Cycle 1 Load B1,C1 Cycle 2 Load B2,C2 Add B1,C1 Cycle 3 Load B3,C3 Add B2,C2 Store in A1 Add B3,C3 Store in A2 Cycle 4 Store in A3 Cycle 5 Cycles (Time) Opérations indépendantes Exhiber le maximum d’opérations indépendantes alimenter Pipiline Master IM2P2 - Calcul Scientifique 19/10/09 Page 45 Architecture Processeurs HPC Plusieurs niveaux de pipeline : •Beaucoup d’opération atomiques (dépend micor-architecture, jeu instruction) : A1 = B1 + C1 load instruc. fetch decode instruc. exec exec write Mem Store ou load Write back Master IM2P2 - Calcul Scientifique 19/10/09 Page 46 Architecture Processeurs HPC longueur pipeline : Master IM2P2 - Calcul Scientifique 19/10/09 Page 47 Architecture Processeurs HPC Alimenter le processeur : Mémoire Hiérarchique Temps •Unité de Calcul « travaille » sur données dans les registres •Registre : taille très petite Mo Hit ? load B1 A1 = B1 + C1 yes no = miss •Cache ? load C1 •Coût n cycles Unité de Calcul « attend » n cycles Master IM2P2 - Calcul Scientifique 19/10/09 Page 48 Architecture Processeurs Plusieurs Niveaux de Cache : exemple processeur Itanium2 ® d ’INTEL ® Débits et Latences 1 cycle = 0,6 ns 2 cycles 256 ko 1.5-6 Mo-9 Mo 6.4 Go/s 32 Go/s L3U cache 16 Go/s 32 Go/s 12 cycles L2U cache 128 Integer Registers 128 FP Registers 16 Go/s L1D cache 16 ko 1 ko 1 ko 5 cycles 16Rd / 6Wr 32 Go/s 16 Go/s 5+1 cycles 12+1cycles Master IM2P2 - Calcul Scientifique Altix™: 145+ ns 19/10/09 Page 49 Architecture Processeurs Effet taille de cache : Master IM2P2 - Calcul Scientifique 19/10/09 Page 50 Architecture Processeurs HPC Exécution Spéculative : Alimenter le Pipeline If (cond1) then a1 = b1 + c1 … else a1 = b1 * c1 … End if « Casser » dépendances •Dépendances : •Branch prediction Cond1 a1 = b1 + c1,… •On « parie » Cond1 vraie •On calcule a1 = b1 + c1,.… •On vérifie plus tard …. Master IM2P2 - Calcul Scientifique 19/10/09 Page 51 Architecture Processeurs HPC Exécution Spéculative : Alimenter le Pipeline •Prefetching •Charger 1 instruction ET voisins mémoire • On remplit les registres Master IM2P2 - Calcul Scientifique 19/10/09 Page 52 Architecture Processeurs HPC Concepts : ILP, Pipeline, speculation : Mie en œuvre pour différentes micro-architectures (jeux d’instructions machine scalaire) x86 32 bit : Pentium (IA_32), Athlon AMD CISC : Complex instruction Set Computer Prix, mais 32 bit x86 : Xeon, Opteron (AMD) bon rapport prix/performance 32 et/ou 64 bit Pour le HPC RISC : Power6 Reduce Instruction Set Computer Puissance VLIW : Itanium Intel Bande passante mémoire Master IM2P2 - Calcul Scientifique 19/10/09 Page 53 Architecture Processeurs HPC Différentes approches : x86 vs. EPIC (Explicit Parallel Instruction Computing) Master IM2P2 - Calcul Scientifique 19/10/09 Page 54 Architecture Processeurs HPC Tendance Actuelle : processeurs multi-cœur (core) •Fondeurs : Intel, AMD, IBM, SUN(Sparc) Cache Cache Cache core core core Réduction taille gravure (45 nm) 1 processeurs mono-core 1 processeurs ( ou socket) multi-core (multi = 2, 4, 8 ) Plus de puissance BRUTE (2, 4, 8 ) Plus de mémoire Cache / core Meilleur ratio flop/watt, flop/m2 Même niveau fréquence, même concept architectural Adaptation carte mère débit vers la RAM Master IM2P2 - Calcul Scientifique 19/10/09 Page 55 Architecture Processeurs HPC TOP 500 Master IM2P2 - Calcul Scientifique 19/10/09 Page 56 TOP 500 : evolution processeurs Master IM2P2 - Calcul Scientifique 19/10/09 Page 57 Architecture Processeurs : Vectoriel Processeur Vectoriel opération sur vecteurs (non plus sur scalaire) : Single instruction multiple data (SIMD) Potentiellement très très puissant adaptation du code : meteo, Onera,etc… très très très cher NEC Peak Gflop Debit mémoire 100 Gflop/s 4TB/s TOP 500 Approche/ principe(SIMD) utilisé dans les architecture scalaire : X86 (32bit) SSE : Streaming SIMD Extension Altivec Superscalaire (2 FPU) Master IM2P2 - Calcul Scientifique 19/10/09 Page 58 Accélérer les processeurs Accélérateurs GP-GPU : General Purpose Graphic process Unit Adaptation des cartes graphiques Précision, compilateurs, langages (CUDA), etc… Stream processing (data centric process) Flop intensif (Double Precision ?) parallèlisme de données localité des données Futur : Intégration dans les processeurs GP-GPU Peak Gflop Debit mémoire Tesla (Nvidia) 500 Gflop/s 80GB/s Accélérateurs FPGA : Processeur reconfigurables (CRAY, SGI) CELL : 9 cores : 1 cpu + 8 SPE IBM Roadrunner Master IM2P2 - Calcul Scientifique 19/10/09 Page 59 Architecture Processeurs HPC • Comment on calcule le peak de perf. : – – Peak = Freq. * (Nbre opération par cycle) Nbre Opération par cycle : • • – Multicore : • – Combien de FPU ?(scalaire, super scalaire) Vectoriel Somme puissance core Exemple (itanium) • Fréquence : 1.5 Ghz, • Puissance crête : 6 Gflops/s : 1500 MHz * 2 madd/cycle 6 GFLOP/s Fréquence Processeurs Vectoriels (NEC) Peak Gflop Debit mémoire Byte/flop 100 Gflop/s 4TB/s 40 GP-GPU (Nvidia) 600 Mhz 500 Gflop/s 80 Gb/s 0,16 Itanium mono-core 1,5 Ghz 6 Gflop/s 6,4 Gb/s 1,06 Xeon Quad-Core 3 Ghz 40 Gflop 9,7 Gb/s 0,24 Xeon « NHM » 2,8Ghz 38Gflop 32 Gb/s 0,84 Power6 Bi-core 4,7 Ghz 36 Gflop ? Master IM2P2 - Calcul Scientifique 19/10/09 Page 60 Calcul Haute Performance : TOP 500 List Les plus grands systèmes de calcul actuellement : classement TOP 500 Juin 2008 Benchmark : Linpack (kw) Puissance Centrale nucléaire de 40 MW à 1450 MW Master IM2P2 - Calcul Scientifique 19/10/09 Page 61 Plan : • • • Les systèmes HPC – Typologie des systèmes : • Machines Mémoire partagée • Machines à Mémoire Distribuées • Machine NUMA – Exemples Architectures Processeurs HPC – Processeurs scalaires, superscalaires, vectoriels – Concepts d’optimisation Optimisation de codes – Technique d’optimisation – Compilo, librairies Master IM2P2 - Calcul Scientifique 19/10/09 Page 62 Optimisation de Codes Constat : efficacité des applications Ce qu’on observe : 10% du peak de performance processeur certaines applications font mieux…et d’autres beaucoup moins bien ! Des raisons avancées : instructions par cycles Architecture actuelle: 4 opérations par cycle (potentiel) Application (réalité): 1,2 -1,4 opérations restituées par cycle mémoire Comment optimiser au niveau des sources du code Master IM2P2 - Calcul Scientifique 19/10/09 Page 63 Optimisation de Codes Concepts Optimisation •tirer le meilleur de l’architecture processeur •Unrolling : Dérouler les boucles Pipeline et ILP •Blocking : Mémoire hiérarchique Alimenter processeurs •Compilateur « Doper » le code avec les librairies scientifiques , , IR; u, v, b IR n ; A IR nm , B IR mn , A IR nn u u Av + u C AB + C Au = b Au = u A = LU Master IM2P2 - Calcul Scientifique 19/10/09 Page 64 Optimisation de Codes Concept : Unrolling •Produit Matrice : C , A, B nn ; n = 500 C = A B •Option Compilation : -O1 le compilo traduit le pgm tel quel •Processeur Itanium 6Gflop/s Peak do i = 1, m do j = 1, n do k = 1, m A11 A12 A13 A21 A22 A23 A31 A32 A33 B11 B12 B13 B21 B22 B23 B31 B32 B33 = C11 C12 C13 C21 C22 C23 C31 C32 C33 c(i,j) = c(i,j) + a(i,k) * b(k,j) end do end do end do 347 Mflop/s Master IM2P2 - Calcul Scientifique 19/10/09 Page 65 Optimisation de Codes Concept : Unrolling •Produit Matrice : C = A B C , A, B n n ; n = 500 •Option Compilation : -O1 le compilo traduit le pgm tel quel do i = 1, m do j = 1, n do k = 1, m c(i,j) = c(i,j) + a(i,k) * b(k,j) end do end do end do 347 Mflop/s Unrolling do i = 1, m do j = 1, n do k = 1, m,8 s0= a(i,k) * b(k,j) s1= a(i,k+1) * b(k+1,j) s2= a(i,k+2) * b(k+2,j) s3= a(i,k+3) * b(k+3,j) s4= a(i,k+4) * b(k+4,j) s5= a(i,k+5) * b(k+5,j) s6= a(i,k+6) * b(k+6,j) s7= a(i,k+7) * b(k+7,j) c(i,j)=c(i,j)+s0+s1+s2+s3 end do end do end do itération s 454 Mflop/s (Gain 30%) Unrolling Tire bénéfice du pipeline et ILP Niveau Unrolling optim. : dépend architecture processeurs Master IM2P2 - Calcul Scientifique Cycles (Time) 19/10/09 Page 66 Optimisation de Codes Concept : Unrolling C = A B C , A, B nn ; n = 500 •Option Compilation (v8) : -O1 le compilo traduit le pgm tel quel do i = 1, m do j = 1, n do k = 1, m c(i,j) = c(i,j) + a(i,k) * b(k,j) end do end do end do do i = 1, m do j = 1, n do k = 1, m-4,4 s0= a(i,k) * b(k,j) s1= a(i,k+1) * b(k+1,j) s2= a(i,k+2) * b(k+2,j) s3= a(i,k+3) * b(k+3,j) c(i,j)=c(i,j)+s0+s1+s2+s3 end do end do end do do i = 1, m do j = 1, n do k = 1, m,8 s0= a(i,k) * b(k,j) s1= a(i,k+1) * b(k+1,j) s2= a(i,k+2) * b(k+2,j) s3= a(i,k+3) * b(k+3,j) s4= a(i,k+4) * b(k+4,j) s5= a(i,k+5) * b(k+5,j) s6= a(i,k+6) * b(k+6,j) s7= a(i,k+7) * b(k+7,j) c(i,j)=c(i,j)+s0+s1+s2+s3 end do end do end do 347 Mflop/s 396 Mflop/s Master IM2P2 - Calcul Scientifique 454 Mflop/s 19/10/09 Page 67 Optimisation de Codes Concept : Unrolling •Niveau Unrolling optimal : ? •dépend architecture processeurs (profondeur pipeline) •Pipeline vs. accès donnée Master IM2P2 - Calcul Scientifique 19/10/09 Page 68 Optimisation de Codes Concept : Blocking •Produit Matrice : n n C = A B C , A, B ; n = 1000 •Option Compilation : -O1 le compilo traduit le pgm tel quel •Processeur Itanium 6Gflop/s Peak do i = 1, m do j = 1, n do k = 1, m A11 A12 A13 A21 A22 A23 A31 A32 A33 B11 B12 B13 B21 B22 B23 B31 B32 B33 = C11 C12 C13 C21 C22 C23 C31 C32 C33 c(i,j) = c(i,j) + a(i,k) * b(k,j) end do end do end do 116 Mflop/s Master IM2P2 - Calcul Scientifique 19/10/09 Page 69 Optimisation de Codes Exemple : Blocking •Produit Matrice : C , A, B nn ; n = 1000 C = A B •Option Compilation : -O1 le compilo traduit le pgm tel quel • Taille des blocks : B1=50;B2=50;B3=50 B A j i Block B1=50;B2=50;B3=50 do i = 1, m,B1 do j = 1, n,B2 do k = 1, m,B3 do i1=i,min(i+B1-1,m) do j1 =j,min(j+B2-1,n) do k1=k,min(k+B3-1,m) c(i1,j1)=c(i1,j1)+a(i1,k1)*b(k1,j1) enddo end do end do enddo end do end do Master IM2P2 - Calcul Scientifique 19/10/09 Page 70 Optimisation de Codes Exemple : Blocking •Produit Matrice : C = A B C , A, B nn ; n = 1000 •Option Compilation : -O1 le compilo traduit le pgm tel quel B A Gain 300% j •Blocking : 379 Mflop/s i Block • Taille des blocks : B1=50;B2=50;B3=50 Master IM2P2 - Calcul Scientifique 19/10/09 Page 71 Optimisation de Codes Exemple : Blocking Temps Mo Blocking Tire bénéfice mémoire hierarchique Master IM2P2 - Calcul Scientifique 19/10/09 Page 72 Optimisation de Codes Exemple : Multiplication de Matrice C = A B C , A, B nn ; n = 1000 do i = 1, m do j = 1, n do k = 1, m c(i,j) = c(i,j) + a(i,k) * b(k,j) end do end do end do •En poussant le compilateur : •Opt= -O1 •Opt= -O2 Unrolling Pipelining ILP •Opt= -O3 Unrolling (+ agressif -O2) Pipelining (+ agressif -O2) ILP Modifs. Boucles Prefetching (Speculation) Master IM2P2 - Calcul Scientifique 19/10/09 Page 73 Optimisation de Codes Exemple : Multiplication de Matrice C , A, B nn ; n = 1000 C = A B •En poussant le compilateur : •Opt= -O1 116 Mflop •Opt= -O2 Unrolling Pipelining ILP •Opt= -O3 Unrolling (+ agressif -O2) Pipelining (+ agressif -O2) ILP Modifs. Boucles Prefetching (Speculation) 147 Mflop 4,2 Gflop/s Peak Itanium : 6 Gflop/s Master IM2P2 - Calcul Scientifique 19/10/09 Page 74 Optimisation de Codes Conclusions Compilateurs : •Compilateur : moins mauvais des optimisateurs de codes, mais ne fait pas tout •Bien coder pour faciliter le travail Compilo •Option -O3 sur les hot spots •Option –O3 pas forcement meilleur que -O2 Exécution Spéculative • Utiliser les librairies scientifiques •Les langages • procedural : •Fortran ,C do i = 1, m do j = 1, n •Pgm Objet : if (j==1) then • C++ …. endif end do end do Master IM2P2 - Calcul Scientifique 19/10/09 Page 75 Optimisation de Codes Langage ( C ) et Alignement mémoire : •On parcourt par ligne : n=5000; for (i=0;i<n;i++) { for (j=0;j<n;j++) { c[i][j]=i+j; } } 94 Mflop : •Compilation O1 •On parcourt par colonne : n=5000; for (j=0;j<n;j++) { for (i=0;i<n;i++) { c[i][j]=i+j; } } 34 Mflop : Master IM2P2 - Calcul Scientifique 19/10/09 Page 76 Optimisation de Codes Langage (Fortran) et Alignement mémoire : •On parcourt par ligne : n=5000 do j = 1, n do i = 1, n •Compilation O1 •On parcourt par colonne : n=5000 do i = 1, n do j = 1, n c(i,j) = real(i+j,kind=8); end do end do c(i,j) = real(i+j,kind=8); end do end do 36 Mflop 98 Mflop Master IM2P2 - Calcul Scientifique 19/10/09 Page 77 Optimisation de Codes : Librairies Librairies Scientifiques : Exemple routine DGEMM •DGEMM (Librairie BLAS: Basic Linear Algebra Subprogram) •D=Double, GE=General, MM=MatrixMultiplication C = A B + C =1 =0 C , A, B nn n = 5000 program prod_mat implicit none integer, parameter :: n=5000 real(kind=8), dimension(n,n) :: A,B,C …. … !C=A*B (C=1*A*B+0*C) call DGEMM('N','N',n,n,n,1.D0,A,n,B,n,0.D0,C,n) …. end program prod_mat Master IM2P2 - Calcul Scientifique 19/10/09 Page 78 Optimisation de Codes : Librairies Librairies Scientifiques : Exemple routine DGEMM C = A B + C •DGEMM (Librairie BLAS: Basic Linear Algebra Subprogram) •D=Double, GE=General, MM=MatrixMultiplication … !C=A*B =1 =0 C , A, B nn n = 5000 program prod_mat implicit none integer, parameter :: n=5000 real(kind=8), dimension(n,n) :: A,B,C …. … !C=A*B (C=1*A*B+0*C) call DGEMM('N','N',n,n,n,1.D0,A,n,B,n,0.D0,C,n) …. do i = 1, m do j = 1, n do k = 1, m C(i,j) = C(i,j) + A(i,k) * B(k,j) end do end do end do …. end program prod_mat 3 boucles Imbriquées (-O2) : 44 minutes !! DGEMM: 47 secondes!!! Master IM2P2 - Calcul Scientifique 19/10/09 Page 79 Optimisation de Codes : Librairies Librairies Scientifiques Parallélisées : Exemple routine DGEMM •Linkage avec version librairie Parallèle (MultiThreadé OpenMP) program prod_mat implicit none integer, parameter :: n=5000 real(kind=8), dimension(n,n) :: a,b,c …. … !C=A*B call DGEMM('N','N',m,m,n,1.D0,a,m,b,n,0.D0,c,m) …. On ne touche pas aux sources du code !! N=10000 Seq 2procs. 4procs. 8procs 16 procs 32 procs Temps sec. 365 181 95 54 34 38 Et avec les accélérateurs ? Master IM2P2 - Calcul Scientifique 19/10/09 Page 80 Optimisation de Codes : Librairies Exemple : Multiplication de Matrice •Opt= -O2 Unrolling Pipelining ILP •Opt= -O3 Unrolling Pipelining ILP Modifs. Boucles Prefetching (Speculation) 147 Mflop 4,2 Gflop/s •DGEMM Unrolling Blocking + -O3 5,2 Gflop/s Peak Itanium = 6 Gflop/s Master IM2P2 - Calcul Scientifique 19/10/09 Page 81 Optimisation de Codes librairies scientifiques (LIBRES!!): catalogue très riche •Librairies : •Algébre Linéaire •Solveur Directs, Itératif…. •FFT •…. •Librairies déjà Parallèlisées : •MultiTâche •Echange de Message (MPI) http://www.netlib.org/ , , IR; u, v, b IR n ; A IR nm , B IR mn , A IR nn u u Av + u C AB + C Au = b Au = u A = LU •Solveurs : •Solveur Direct parallèle (décomposition LU) : SuperLU, MUMPS •Solveur Itératif (Gradient Conjugué) : Petsc Master IM2P2 - Calcul Scientifique 19/10/09 Page 82 Optimisation de Codes Conclusion Optimisation de codes •Optimiser le Séquentiel •« Bien » coder, au sens compilo •Compilation, Architecture Processeur. •Analyser le code outil analyse section suivante •Librairies Scientifiques •Ultra optimisées •Parallèlisées •accélérées •Parallélisation •Multitâche : OpenMP •Echange de message : MPI Master IM2P2 - Calcul Scientifique 19/10/09 Page 83 Outils de développement (http://www.calmip.cict.fr/spip/rubrique.php?id_rubrique=34) Comment analyser un code Code Performance Temps •Temps restitution code : •Mesurer le temps de restitution %time ./a.out •flop/s ? (vs. peak proc.) : • Mesurer la perf de l’application •real 1m32.029s temps de restitution •user 1m30.177s temps effectif CPU •sys 0m0.736s temps système •Analyse fine code // •Où passe-t-on du temps dans le code ? : •Temps routines •Temps par lignes Master IM2P2 - Calcul Scientifique 19/10/09 Page 84 Outils de développement Profiling : Où passe-t-on du temps dans le code % histx -f -l -o out_histx ./a.out % iprep < out_histx.a.out.29591 > prof.out % cat prof.out Temps en micro sec. Functions sorted by count Nom routine ========= ====== == ==== Count Self % Cum. % Name -------------------- ------- ------- -------------------381 72.989 72.989 libscs.so:__scsl_dgemm_hoistc_ 122 23.372 96.360 a.out:MAIN__ [test_dgemm.f90:9] 11 2.107 98.467 libscs.so:__scsl_dgecpy_at_ 8 1.533 100.000 libscs.so:__scsl_dgemm1_ Source lines sorted by count ====== ===== ====== == ==== Count Self % Cum. % Name -------------------- ------- ------- -------------------41 32.283 32.283 [test_dgemm.f90:50] (a.out) 37 29.134 61.417 [test_dgemm.f90:44] (a.out) 27 21.260 82.677 [test_dgemm.f90:56] (a.out) 9 7.087 89.764 [test_dgemm.f90:57] (a.out) 7 5.512 95.276 [test_dgemm.f90:45] (a.out) 6 4.724 100.000 [test_dgemm.f90:51] (a.out) Master IM2P2 - Calcul Scientifique Fichier:ligne 19/10/09 Page 85 Outils de développement Outil mesure de performance • Exemple : utilisation du cache L3 et des debits des accès en mémoire % lipfpm -e FP_OPS_RETIRED -e L3_READS.DATA_READ.ALL -e L3_READS.DATA_READ.MISS ./a.out lipfpm summary ====== ======= Retired FP Operations...................................... 152499228205 L3 Reads -- L3 Load References ........................... 2499734811 L3 Reads -- L3 Load Misses ............................... 1712387197 CPU Cycles................................................. 348636126093 Average MFLOP/s............................................ 656.12 Average data read MB/s requested by L3..................... 817.303 (Retired FP Operations/ CPU Cycles)*Freq = flop/s Master IM2P2 - Calcul Scientifique 19/10/09 Page 86