La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Développement sur ALTIX

Présentations similaires


Présentation au sujet: "Développement sur ALTIX"— Transcription de la présentation:

1 Développement sur ALTIX
Thomas VARLET Charles ROGE Philippe THIERRY 31/03/2017 SGI Proprietary

2 PLAN : Introduction à l'ALTIX Développement sur ALTIX
Introduction à l'architecture des systèmes HPC Présentation hardware de l'ALTIX Présentation software de l'ALTIX Développement sur ALTIX Utilisation des ALTIX Comprendre les performances sur ALTIX Ressources et documentation SGI Proprietary 3/31/2017

3 no-remote memory access
Panorama MIMD Multiple Instruction s Multiple Data UMA Uniform Memory Access NUMA Non-Uniform Memory Access NORMA No-Remote Memory Access MPP Massively Parallel Processor PVP (Cray T90) UMA Central Memory SMP (Intel SHV, SUN E10000, DEC 8400 SGI Power Challenge, IBM R60, etc.) Multiprocessors Single Address space Shared Memory COMA (KSR-1, DDM) CC-NUMA (SGI 3000, SGI 2000, Altix HP Exemplar,Sequent NUMA-Q, Data General) PVP Parallel Vector Processor SMP Symmetric Multi-Processor COMA Cache Only Memory Architecture CC-NUMA Cache-Coherent NUMA NCC-NUMA Non-Cache Coherent NUMA NUMA distributed memory NCC-NUMA (Cray T3E) MIMD Cluster (IBM SP2, DEC TruCluster, Microsoft Wolfpack, etc.) loosely coupled NORMA no-remote memory access Multicomputers Multiple Address spaces “MPP” (Intel TFLOPS, Cray T3E) tightly coupled SGI Proprietary 3/31/2017

4 memory Architecture UMA Cache Functional Unit (mult, add) Coherency
le protocole de cohérence de cache intervient lorsque plusieurs processeurs modifient des éléments de la même ligne de cache. la mémoire centrale et les E/S sont partagées par tous les processeurs Le modèle de programmation est une extension du modèle de programmation monoprocesseur bus d’interconnexion entre la mémoire et les processeurs faible nombre de processeurs memory Cache Register File Functional Unit (mult, add) Coherency Processor SGI Proprietary 3/31/2017

5 Problèmes des architectures UMA
Accès à la mémoire: des niveaux de caches efficaces permettent d’économiser des références à la mémoire pour les autres (non cachés), les accès concourants des processeurs à la mémoire partagée créent un goulot d’étranglement Cette difficulté peut être levée avec les architectures à mémoire distribuée memory Cache Register File Functional Unit (mult, add) Coherency Processor SGI Proprietary 3/31/2017

6 Réseau d’interconnexion
Mémoire distribuée Technologie de masse la bande passante globale mémoire-processeur est proportionnelle au nombre de processeurs en général adressage local adressage global (SGI) modèles d’exécution : SIMD, MIMD, SPMD 2 paradigmes de communications : mémoire partagé : OpenMP (si adressage global) mémoire distribué : MPI P M E/S Réseau d’interconnexion Les noeuds individuels peuvent contenir plusieurs processeurs connectés entre eux par la même technologie que le réseau. SGI Proprietary 3/31/2017

7 Architecture multi-ordinateurs
Les accès aux mémoires locales et les I/Os sont indépendantes les transferts de données sur le réseau d’interconnexion sont lents La programmation parallèle est basée sur le passage de messages. Les processeurs exécutent des instructions d’envoi et de réception de messages pour communiquer entre eux. Main memory Cache Register File Functional Unit (mult, add) Processor SGI Proprietary 3/31/2017

8 Architecture à mémoire partagée distribuée
Pour chaque processeur,les accès à la mémoire locale sont indépendants La mémoire totale est globalement adressable (point de vue du programmeur ) Non-uniform memory access (NUMA): Les accès locaux sont plus rapides que les accès lointains (peu sensible sur SGI3000/SGIAltix) Les modèles de programmation en mémoire partagée sont utilisables la distribution des données est conseillée pour améliorer les performances (prise en compte de l ’architecture à mémoire distribuée) Main memory Cache Register File Functional Unit (mult, add) Processor Coherency interconnect SGI Proprietary 3/31/2017

9 PLAN : Introduction à l'ALTIX Développement sur ALTIX
Introduction à l'architecture des systèmes HPC Présentation hardware de l'ALTIX Présentation software de l'ALTIX Développement sur ALTIX Utilisation des ALTIX Comprendre les performances sur ALTIX Ressources et documentation SGI Proprietary 3/31/2017

10 Le processeurs Itanium2 ® d ’INTEL ®
Architecture Itanium2 : Troisième génération Itanium (Madison) EPIC: Explicit Parallel Instruction Computing Fréquence : 1.5 Ghz Puissance crête : 6 Gflops/s 1500 MHz * 2 madd/cycle  6 GFLOPS Intel Itanium2 : L1I: 16kB ; 64o/line ; 4 way L1D WT: 16ko ; 1/- cycle ; 64o/line ; 4 way ; (2ld&2st)/cycle L2U WB: 256ko ; 5/6cycle; 128o/line; 8 way; (4ldf) | (2ldf[p]&2stf) L3U WB: 6Mo; 12/13cycle ; 128o/line ; 6/12 way ; 48Go/s Memory Front Side Bus (FSB) : 128o/line ; 6.4 Go/s SGI Proprietary 3/31/2017

11 Le processeurs Itanium2 ® d ’INTEL ®
Debits et latences : 128 FP Registers 1 ko 128 Integer L1D cache 16 ko L2U cache 256 ko L3U cache 1.5-6 Mo 32 Go/s 16 Go/s 6.4 Go/s 2 cycles 5 cycles 12 cycles 5+1 cycles 12+1cycles 16Rd / 6Wr Altix™: 145+ ns SGI Proprietary 3/31/2017

12 Gamme de serveurs Altix
Altix™ 3700 Bx2 Configuration Supercomputer et SuperCluster : 16p – 256p (supercluster = 2048p) 1.5GHz / 4.0MB, 1.6GHz / 6.0MB & 1.6GHz / 9.0MB Intel Madison 9M Extensible à 2048P via NUMAlink™ en configuration superclusters Mémoire partagé : jusqu’à 3To par SSI 12.8GB/s dual plane fat tree avec des routeur NUMAlink 4 Altix® 3700 Configuration Supercomputer et SuperCluster 4-256 processeur par systèmes 1.3GHz / 3.0Mo & 1.5GHz / 6.0Mo Intel® Itanium®2 Extensible à 512P via NUMAlink™ en configuration superclusters Mémoire partagé : jusqu’à 2To 6.4Go/sec dual plane fat tree  12.8GB/sec avec des routeurs NUMAlink™ 4 Serveur Departmental/workgroup Jusqu’a Q1 - FY04 : 1-16 processeurs par nœud 1.0GHz / 1.5Mo, 1.3GHz / 3.0Mo, 1.4GHz / 3Mo & 1.5GHz / 6.0Mo A partir de Q2 - FY04 : 1p – 16p (Router-less) et 32p avec Router 1.5GHz / 4.0MB, 1.6GHz / 6.0MB & 1.6GHz / 9.0MB Intel Madison 9M Configurations Global Shared Memory : jusqu’a to 192Go (ou 384Go avec un/des routeurs) Altix® 350 SGI Proprietary 3/31/2017

13 SGI ALTIX™ 3000 : NUMAFLEX Itanium® 2 C-brick CPU et mémoires
M-brick Mémoire R-brick Interconnection routeur IX-brick Module de Base I/O PX-brick Extension PCI-X D-brick2 Extension Disque SGI Proprietary 3/31/2017

14 8.51–10.2Go/sec de bande passante mémoire
SGI ALTIX™ 3000 : la C-brick 16 x PC2100 ou PC2700 DDR SDRAM 8à16Go de mémoire par nœud 8.51–10.2Go/sec de bande passante mémoire SHUB 4 processeurs Intel® Itanium® 2 2 processeurs par 6.4Go/sec frontside bus 4–32Go de mémoire par C-brick contrôleur mémoire : SHUB –10.2Go/sec bande passante mémoire 6.4GB/sec bande passante d ’interconnexion agrégé 4.8GB/sec bande passante I/O agrégé SGI Proprietary 3/31/2017

15 SGI ALTIX™ 3000 : Infrastructure NUMAlink™
Troisième génération d'interconnexion à basse latence et haute bande passante Configuration dual plan (Altix 3700) : double la bande passante des NUMAlink-3 afin d ’exploiter la bande passante mémoire du SHUB 2 x 3.2Go/sec de bande passante entre les C-brick La latence a été amélioré en passant de l ’ Origin® 2000 à l ’ Origin 3000 37% de diminution dans la latence entre liens La latence routeur à routeur NUMAlink™ 3 est de 45ns SGI Proprietary 3/31/2017

16 SGI ALTIX™ 3000 : Topologie Une Altix 3700 : Jusqu’a 256 cpu en SSI
16 cpu : étoile à 2 plan interconnectés 32 cpu : hypercube à 2 plans 2D 64 cpu : hypercube 2D à 2 plans 128cpu : fat tree péigné par 4 en miroire SGI Proprietary 3/31/2017

17 Altix 3700 @ CALMIP Altix 3700 : 68 cpu @ 1.5 Ghz SGI Proprietary
3/31/2017

18 Différences entre Origin 2000 et Altix 3700
vs Nœud hardware Origin 2000 Input/Output on every node: 2x800 MB/s R1x000 processor L2 Cache 1-4-8 MB HUB Memory Interface I/O Interface Proc Interface Link Interface Directory SDRAM CrayLink duplex connection MHz, 2x800 MB/s) to other nodes Main Memory SDRAM MHz=800MB/s) Nœud hardware Altix 3700 SHUB SHUB SGI Proprietary 3/31/2017

19 PLAN : Introduction à l'ALTIX Développement sur ALTIX
Introduction à l'architecture des systèmes HPC Présentation hardware de l'ALTIX Présentation software de l'ALTIX Développement sur ALTIX Utilisation des ALTIX Comprendre les performances sur ALTIX Ressources et documentation SGI Proprietary 3/31/2017

20 Altix : Présentation Software
SGI Altix : Présentation Software Système d’exploitation : Linux 64 bits basé sur une RHEL Advance Server + SGI Propack (xfs, Numatools, XSCSI, XVM, PCP, O(1), MPT, SCSL, maj kernel, … ) : Propack 2.4 = RHEL AS 2.1 (+kernel ) + glibc linux threads + ... Propack 3.0 = RHEL AS 3.0 (+kernel ) + glibc Native Posix Threads + ... Environnement de développement (cf plus loin): Compilateurs : Intel (C, C++, F90), mais aussi Gnu (C, C++, f77) Deboggage : GDB, IDB, DDD Librairies Scientifiques : SGI SCSL, Intel MKL Parallélisme : MPI et SHMEM : SGI MPT OpenMP : compilateurs Intels Analyse de performance : PCP, Pfmon, SGI histx ,Intel Vtune, ... Administration et Gestion des ressources : Administration : outils Red Hat Exploitation : Numatools Monitoring systemes : SGI PCP + outils Linux Traitement par lots : PBS Pro, LSF, ... SGI Proprietary 3/31/2017

21 SGI ALTIX™ : point de vue utilisateur
Sur un système : un seul OS : utilisation optimale de ces ressources. les ressources sont partagées : mémoires, disques, réseau La mémoire : physiquement : distribué, elle n'est donc pas contigue logiquement : un seul espace d'adressage Altix : jusqu ’a 192Go adressable par un seul processus Altix 3000 : jusqu ’a 2To adressable par un seul processus Entre plusieurs systèmes : partage des systèmes de fichier XFS : CXFS (si cluster de plusieurs machines), NFS Programmation parallèle : type mémoire distribué (MPI, SHMEM) type mémoire partagé (threads, OpenMP) type mixte (MPI+OpenMP) SGI Proprietary 3/31/2017

22 PLAN : Introduction à l'ALTIX Développement sur ALTIX :
Les compilateurs Debbuging Bibliothèques optimisés sur ALTIX Utilisation des ALTIX Comprendre les performances sur ALTIX Ressources et documentation SGI Proprietary 3/31/2017

23 “Modules” Outils de gestion dynamique de l’environnement des utilisateurs : Sur Origin (IRIX/MIPS) et sur Altix (Linux/Itanium) Positionne, puis de supprime les variables d ’environnement nécessaire pour utiliser un « logiciel » permet de gérer sur un même système plusieurs versions d ’un même outils p.ex. : compilateurs Intel / Gnu bibliothèques SCSL, MPT, MKL initialise les variables d ’environnement : PATH, MANPATH LD_LIBRARY_PATH, LIBRARY_PATH pour tous les utilisateurs d ’un ou plusieurs systèmes, un utilisateur peut créer ses modules, SGI Proprietary 3/31/2017

24 Utilisation de “module”
Initialisation de l’environnement (dans le “.cshrc” par exemple) : % source /opt/modules/default/init/[le_shell] (où [le_shell] = csh, sh, bash, …. ) % module load modules (man pages de modules) Commandes utiles : % module avail : affiche la liste des modules disponibles % module list : affiche la liste des modules chargés % module load module_name : charge un module (positionne les variables d’env.) % module unload module_name : “décharge” un module (« dépositionne » les variables d’env.) Exemple : % module avail intel-compilers scsl-1.4.1rel mkl intel-fc-8/ mpt modules intel-cc-8/ mpt totalview % module load mpt-1.10; echo $LD_LIBRARY_PATH /sw/com/scsl/1.4.1rel/lib:/sw/sdev/mpt-ia64/1.10/lib % module unload mpt-1.10; echo $LD_LIBRARY_PATH /sw/com/scsl/1.4.1rel/lib SGI Proprietary 3/31/2017

25 Les compilateurs Compilateur GNU :
gcc, g77, g++ Compilateur Intel® sur Linux pour Itanium2 Positionnement de l’environnement : Utilisation de module : module load [nom_module] Source des fichiers d’initialisation : [install_comp]/bin/[nom_comp]vars.{sh|csh} Version : 7.1 efc: compilateur Fortran95 ecc: compilateur C/C++ Version : 8.0 ifort : compilateur Fortran95 icc : compilateur C/C++ Version : 8.1 icc : compilateur C icpc : compilateur C++ SGI Proprietary 3/31/2017

26 Compilateur Intel ® : les bases
Vérification de la validité numérique désactiver les optimisations spécifiques : «-O0» : pas d ’optimisation «-g» : pour debuging, «-mp» : limite les optimisations sur les flottants et maintient la précision déclarée, «-IPF_fltacc» : désactive les optimisations qui affectent la précision des opérations flottantes, «-r» «-i» : taille des réels, entiers, booléen «-r{4|8}» et «-i{2|4|8}» «-CB -traceback» : notifie au runtime les dépassements de tableaux/chaînes de caractères avec des infos (fichier srce + num. ligne) Lecture/écriture de fichiers non formatés big/little-endian Avant l’exécution : setenv F_UFMTENDIAN big:[#unit] little:[#unit] A la compilation (8.x):   convert [big_endian|little_endian]  SGI Proprietary 3/31/2017

27 Compilateur Intel ® : Pousser le compilateur
Options : -O0 : pas d’optimisation -O1 : optimisations qui minimisent la taille -O2 : default, inlining, un peu de loop pipelining (SWP) -O3 : plus SWP + prefetching + loop reorg -ip[o] : interprocedural optimisation (un/plusieurs fichier) -fast :  “-O3 -ipo -static” (version 8.0) -prof_gen puis -prof_use : Profile guided optimisation compile avec « -prof_gen »  run (création de fichiers de profil)  compile avec « -prof_use » -fno-alias/-fno-fnalias : pas d ’aliasing de pointeurs (programme/fonction) -ftz : forcer les sous-dépassements à zéro pour éviter les trappes du système SGI Proprietary 3/31/2017

28 Autres options utiles :
Compilateur Intel ® Autres options utiles : Crée un rapport d ’optimisation :  -opt_report  prise en compte des directives OpenMP™ :  -openmp Parallélisations automatique :  -parallel  Mode verbose :  -v  Pour le Fortran : -free / -fixed : sources au format libre / fixé -extend_source [72|80|132] : précision du format -safe_cray_ptr : pas d ’aliasing pour les pointeurs Cray™ -auto : toutes les variables locales sont « automatic  » (-auto_scalar est le défaut); -stack_temps (v7.x) : alloue les tableaux temporaire dans la « stack » Pour le Fortran (V8.0) : -fpe0 : mise à zéro automatique des underflows et crée un core à l'apparition de tout autre Floating Point Exception SGI Proprietary 3/31/2017

29 Différence entre Origin 2000 et Altix 3700
vs Différence entre l’ordre des octets en mémoire : Origin = « big Endian » / Altix = « little Endian » SGI Proprietary 3/31/2017

30 PLAN : Introduction à l'ALTIX Développement sur ALTIX :
Les compilateurs Debbuging Bibliothèques optimisés sur ALTIX Utilisation des ALTIX Comprendre les performances sur ALTIX Ressources et documentation SGI Proprietary 3/31/2017

31 Debugging En standard : Fonctionne aussi :
« gdb » debugger GNU pour C, C++ et Fortran95 C et C++ : « -g » Fortran : « -g » et « -O0 » « idb » debugger Intel C, C++, f77, F90 ni multi-processeurs, ni multi-threads « ddd » DataDisplayDebuger ( GUI pour debugger a base de ligne de commande supporte gdb et idb Fonctionne aussi : « TotalView » « DDT » SGI Proprietary 3/31/2017

32 Debugging de code (trucs et astuces)
Compilation (8.x) avec « -traceback », arbre d’appel quand erreur sévère Exploitation du fichier « core » : % idb [exécutable] [core_file], puis « where » (arbre d’appel) Job MPI : Vérifications des arguments des appels MPI (!! pour debugger seulement !!) : % setenv MPI_CHECK_ARGS Si le job reçoit un signal « core-dump » : Affichage d’un arbre d’appel Variable d’environnement (cf man mpi): Réglage du comportement quand signal core-dump : % setenv MPI_COREDUMP [NONE,FIRST,ALL,INHIBIT] Debugger % setenv MPI_COREDUMP_DEBUGGER Utilisation de idb / gdb : Debugger séquentiels, % setenv MPI_SLAVE_DEBUG_ATTACH [rang_MPI] affichage de la commande pour attacher le debugger avec le processus MPI Utilisation de Totalview / DDT : % totalview mpirun -a -np 4 a.out SGI Proprietary 3/31/2017

33 Problèmes de corruptions de la heap
Programmes qui utilisent les fonctions malloc/ free Variables d’environnement : MALLOC_CHECK_ “MALLOC_CHECK_=1” : affichage de message de diag. “MALLOC_CHECK_=2” : abort Bibliothèque : Electric Fence compilation : «-lefence », livré en standard avec RedHat accès en dehors des zones allouées par malloc accès à une zone mémoire retournée au système par un appel à free(). détection des problèmes d'alignement. SGI Proprietary 3/31/2017

34 PLAN : Introduction à l'ALTIX Développement sur ALTIX :
Les compilateurs Debbuging Bibliothèques optimisés sur ALTIX Utilisation des ALTIX Comprendre les performances sur ALTIX Ressources et documentation SGI Proprietary 3/31/2017

35 Librairies scientifiques
Intel® Math Kernel Library (MKL V7.0) : Utilisation : lib. static « -lmkl_ipf » et lib. dyn. « -lmkl » BLAS : BLAS1, BLAS2 , BLAS3 et opération basique sur des vecteurs creux, LAPACK, ScaLAPACK, (“-lmkl[_ipf] -lmkl_lapack –lguide -lpthreads“) FFTs (Fast Fourier Transforms), DFTs (Discrete Fourier Transforms), VSL (Vector Statistical Library ) : ensemble de générateurs de nombre aléatoires Vector Math Library (VML) : fonctions mathématiques sur des vecteurs : puissance, trigonométriques, exponentiel, etc... PARDISO Direct Sparse Solver : (“-lmkl[_ipf]  -lmkl_solver –lguide -lpthreads“) Solveur pour des systèmes linéaire creux, symétrique/asymétrique (thread-safe), Basé sur le solveur PARDISO (Parallel Direct Solver) de l’ Université de Basel, En partie parallélisé en OpenMP (BLAS3, DFTs, FFTs, solveurs, qqs LAPACKS ) SGI Proprietary 3/31/2017

36 Librairies scientifiques
SGI Scientifique Computing Software Library (SCSL V1.5) utilisation : édition de lien : « -lscs », « -lscs_i8 » et « -lsdsm » (SCALAPACK) Traitement du signal : FFT opérations de filtrage linéaire (convolution, correlation) Fonctions BLAS : BLAS1, BLAS2 , BLAS3 LAPACK, ScaLAPACK Solveur pour des matrices creuses : Solveur direct pour résolution de systèmes linéaires creux symétrique et non symétrique, double precision et complex. plusieurs types possible de renumérotation “in-core” et “out-of-core” parallélisé en OpenMP « -lscs_mp », « -lscs_i8_mp » et « -lsdsm_mp » (SCALAPACK) SGI Proprietary 3/31/2017

37 Message Passing Toolkit (MPT 1.10)
Message Passing Interface : SGI MPI est une versions optimisé pour Altix de MPI, Conformité complète au standard MPI 1.2 Conformité partielle au standard MPI 2 Parallel I/O One sided put/get model messaging MPI_Comm_spawn/MPI_Comm_spawn_multiple MPI_Alloc_mem/MPI_Free_mem Transfer handles Replacements for deprecated MPI-1 functions Generalized Requests utilisation : edition de lien : « -lmpi » (pr C++ : « -lmpi++ » ) Latence 170 nanosecondes Débit : 1.5 Go/s SHMEM : Logically Shared, Distributed Memory (SHMEM) SHMEM data passing «  one-sided communication  », un processus écrit/lit des données dans la mémoire d ’un autre processeur sans que ce dernier intervienne directement, SGI Proprietary 3/31/2017

38 PLAN : Introduction à l'ALTIX Développement sur ALTIX
Utilisation des ALTIX Lancement des jobs Outils NUMA Tunning Comprendre les performances sur ALTIX Ressources et documentation SGI Proprietary 3/31/2017

39 Configuration du système : hinv
Utilisation : Usage: /usr/bin/hinv [-v] [-c class ] [-b [BrickID] ] Class are: serial processor otherscsi scsi memory io9 otherpci ethernet Par exemple : profit.engr.sgi.com {576}-> hinv Sorry only root user can get scsi information from /dev/xscsi/pci /target0/lun0/ds 0 P-Brick 4 R-Brick 8 C-Brick MHz Itanium 2 Rev. 7 Processor MHz Itanium 2 Rev. 6 Processor Main memory size: Gb IO9 Controller Card (Silicon Graphics, Inc.) (rev 69). on pci QLogic Dual Channel Ultra3 SCSI (Rev 6) on pci Disk Drive: unit 1 on SCSI controller pci Disk Drive: unit 2 on SCSI controller pci BROADCOM Corporation NetXtreme BCM5701 Gigabit Ethernet (rev 21). on pci SCSI storage controller: QLogic Corp. QLA2200 (rev 5). pci Disk Drive: unit 34 lun 0 on SCSI controller pci Disk Drive: unit 35 lun 0 on SCSI controller pci …. SGI Proprietary 3/31/2017

40 Configuration du système : “/proc”
« uname -a » : Linux bigbang sgi240rp _10094 #1 SMP Fri Aug 6 16:01:54 PDT 2004 ia64 unknown « /proc/cpuinfo » : info. sur les processeurs, « /proc/meminfo » : info. général sur la mémoire du système, « /proc/discontig » : utilisation de la mémoire en page par nœuds, profit : more /proc/discontig node total free « /proc/pal/cpu0/cache_info » : structure cache L1, L2, et L3, « /proc/version » : information sur le kernel % more /proc/version Linux version sgi240rp _10094 (gcc version (Red Hat Linux )) #1 SMP Fri Aug 6 16:01:54 PDT 2004 Version kernel Version ProPack + patch SGI Proprietary 3/31/2017

41 Configuration du système : “/proc”
« /proc/mounts » : information sur les systèmes de fichiers montés « /proc/modules » : module du kernel « topology » : profit.engr.sgi.com {628}-> more /proc/modules vtune_drv sgi212r2smp (unused) arsess nls_iso (autoclean) nls_cp (autoclean) qlfc_mod xpnet (unused) xpmem numatools xpc (unused) xp [xpnet xpmem xpc] xvm-standalone The nodes are: node 0 is /dev/hw/module/004c05/slab/0/node ... The routers are: /dev/hw/module/004r14/slab/0/router The topology is defined by: /dev/hw/module/004c05/slab/0/node/link/1 is /dev/hw/module/004c05/slab/1/node /dev/hw/module/004c05/slab/0/node/xtalk/0/link -> /dev/hw/module/004c05/slab/0/IXbrick /dev/hw/module/004r14/slab/0/router/1 -> /dev/hw/module/004r24/slab/0/router profit.engr.sgi.com {582}-> topology Machine profit.engr.sgi.com has: 32 cpu's 16 memory nodes 4 routers The cpus are: cpu 0 is /dev/hw/module/004c05/slab/0/node/cpubus/0/a cpu 1 is /dev/hw/module/004c05/slab/0/node/cpubus/0/c ... SGI Proprietary 3/31/2017

42 Lancement des jobs Un seul OS qui gére jusqu ’a 256 cpu et 2 To de mémoire : simplicité d ’utilisation ! utilisations d ’outils Numa pour optimiser le temps d exécution en charge Séquentiels : ./a _seq.exe temps du job : « time » MPI : mpirun -np [NB_MPI] ./a_mpi.exe statistiques MPI : « setenv MPI_VERBOSE on » OpenMP : nombre de threads OpenMP : setenv OMP_NUM_THREADS [NB_OMP] ./a_omp.exe SGI Proprietary 3/31/2017

43 PLAN : Introduction à l'ALTIX Développement sur ALTIX
Utilisation des ALTIX Lancement des jobs Outils NUMA Tunning Comprendre les performances sur ALTIX Ressources et documentation SGI Proprietary 3/31/2017

44 Numatools : cpuset Le «cpuset» fait référence à un mécanisme dynamique qui permet de créer un groupe de processeurs puis de lancer des applications dans ce groupe. Néanmoins toutes les ressources de la machine sont disponibles aux processus de ce groupe et les ressources attribuées à ce groupe sont accessibles par les autres selon des paramètres d’étanchéité du «cpuset» Les ressources internes au «cpuset» sont allouées préférentiellement par les processus lancés dans les «cpuset», mais elles peuvent déborder du «cpuset» jusqu’aux capacités complètes de la machine. SGI Proprietary 3/31/2017

45 Allocation prioritairement aux ressources internes du Cpuset.
Numatools : cpuset Les ressources de la machine sont accessibles selon des facteurs d’étanchéité définis par l’utilisateur: cette étanchéité à une notion de sens (comme le GORE-TEX) extérieur vers intérieur : On peut autoriser les processus extérieurs à consommer des ressources du cpuset ATTENTION : sur Altix la notion de cpuset EXCLUSIF n ’est pas encore implémenté ! intérieur vers l’extérieur : on peut consommer des ressources externes au cpuset avant de le saturer Allocation prioritairement aux ressources internes du Cpuset. Néanmoins, accès à toutes les ressources de la machine: mémoire, disques, cache fichiers,réseau, périphériques. SGI Proprietary 3/31/2017

46 Numatools : cpuset Usage :
Partition software, plus ou moins perméable, dynamique Pas de reconfiguration de la machine, il peut être créé ou détruit à la volée Pas de perturbation entre les jobs sur une machine Garantie des ressources CPU et mémoire : Créer des sous-groupes de processeurs pour des usages dédiés, Utilisation avec un système de batch pour garantir les ressources SGI Proprietary 3/31/2017

47 Exemple de partitionement d’une machine 32 cpus
Numatools : cpuset Exemple de partitionement d’une machine 32 cpus Cpuset vert Cpuset bleu P9 P11 P13 P15 P25 P27 P29 P31 P8 P10 P12 P14 P24 P26 P28 P30 Réseau numalinks P1 P3 P5 P7 P17 P19 P21 P23 Cpuset orange P0 P2 P4 P6 P16 P18 P20 P22 SGI Proprietary 3/31/2017

48 Cpuset : exemple Fichier de description : % cat /var/cpuset/pool_nd2
MEMORY_LOCAL CPU 2-3 Définir les utilisateurs habilités à lancer des jobs dans ce container Root crée le cpuset : % cpuset -q name -c -f pool_nd2 L’utilisateur autorisé soumet son job dans le cpuset : % cpuset -q name -A command Liste des cpusets disponibles à un instant t : %cpuset -Q Suppression du cpuset par Root : % cpuset -q name -d SGI Proprietary 3/31/2017

49 Numatools : dlook Pour un processus:
dlook [-a] [-c] [-h] [-l] [-o outfile] [-s secs] command [command-args] dlook [-a] [-c] [-h] [-l] [-o outfile] [-s secs] pid Pour un processus: informations sur la répartition mémoire Pour chaque page de l’espace d’adressage : L’objet au quel appartient la page : fichier, SYSV, mémoire partagé,drivers, … Le type de page : Random acess memory (RAM), FETCHOP, IOSPACE Si la page est de type RAM : Attribut (SHARED, DIRTY, …), Le nœud où est localisé la page, Adresse physique de la page Utilisation du CPU. Temps elapsed, temps system du processus. SGI Proprietary 3/31/2017

50 Numatools : dlook SGI Proprietary 3/31/2017 dlook 4702
Peek: sleep Pid: 4702 Thu Aug 22 10:45: Cputime by cpu (in seconds): user system TOTAL cpu Process memory map: r-xp : /lib/ld so [ c000] 11 pages on node 1 MEMORY|SHARED c000 rw-p :00 0 [ c000] 3 pages on node 0 MEMORY|DIRTY ... r-xp : /lib/libc so [ ] 15 pages on node 1 MEMORY|SHARED [ ] pages on node 2 MEMORY|SHARED mpirun -np 2 dlook -o dlook.out ft.C.2 Contents of dlook.out: _______________________________________________________________________________ Exit: ft.C.2 Pid: 2306 Fri Aug 30 14:33: Process memory map: [ ] 1 page on node 21 MEMORY|DIRTY [ c000] 2 pages on node 12 MEMORY|DIRTY|SHARED rw-p :00 0 [ ] 3 pages on node 12 MEMORY|DIRTY|SHARED Pid: 2310 Fri Aug 30 14:33: Process memory map: [ ] 1 page on node 25 MEMORY|DIRTY [ ] 1 page on node 25 MEMORY|DIRTY SGI Proprietary 3/31/2017

51 Permet de contrôler les placements des processus sur les processeurs
Numatools : dplace Permet de contrôler les placements des processus sur les processeurs dplace [-c cpu_numbers]  liste des CPU (« -c0 », « -c2-4 » ou « -c1,4-8,3 » ) [-s skip_count]  nombre de processus a passer avant le placement [-n process_name]  spécification du nom des processus a placer [-x skip_mask]  (bitmask) pour ne pas placer certains processus (PP2.4) N=6 : 1er thread sur le 1er CPU, pas pour 2nd et 3ème, etc… [-p placement_file]  pas encore implémenté, command [command-args]  commande le scheduling et le placements mémoire sont déterminés en fonction des arguments de « dplace » : Si possible : allocation de la mémoire sur le nœuds (physique) Le processus est fixé sur le nœud désigné, Le placement explicite sur des CPU n’est pas obligatoire SGI Proprietary 3/31/2017

52 Numatools : dplace dplace avec des programme séquentiels :
dplace -c 63 ./a.out dplace avec des programme MPI : mpirun -np 64 /usr/bin/dplace -s1 -c /a.out mpirun -a arrayname hosta -np 32 dplace -s1 -c32-63 : \ hostb -np 32 dplace -s1 -c0-31 a.out dplace avec des programmes OpenMP : ProPack 2.4 dplace -x6 -c4-7 ./prog dplace -x6 ./prog1 & ProPack 3.0 dplace -x2 -c4-7 ./prog dplace -x2 ./prog1 & prog master PLACE (0) Pthreads monitor SKIP (1) OMP monitor SKIP (1) prog slave PLACE (0) prog slave PLACE (0) …. 0112 = 610 Plus de “pthread monitor” SGI Proprietary 3/31/2017

53 PLAN : Introduction à l'ALTIX Développement sur ALTIX
Utilisation des ALTIX Lancement des jobs (séquentiel, MPI, OpenMP) Outils NUMA (dlook, dplace, cpuset, ...) Tunning (séquentiel, parallèle) Comprendre les performances sur ALTIX Ressources et documentation SGI Proprietary 3/31/2017

54 Les outils de profiling
Où passe t-on du temps ??? « time » : temps user, elapsed, system « gprof »: code source compile avec “-p”, execution de l’application, compte-rendu d'exécution pour les programmes C ou Fortran « ja » « histx »  Profil de code + exploitation des compteurs de l’Itanium Vtune : Outil Intel de monitoring de code, SGI Proprietary 3/31/2017

55 Tunning MPI Placements NUMA : Single copy :
« setenv MPI_DSM_CPU_LIST …. » Exemple 1 : setenv MPI_DSM_CPULIST 4,5 mpirun -np 2 a.out Exemple 2 : setenv MPI_DSM_CPULIST 32-63:0-31 mpirun -a arrayname hosta, hostb -np 32 a.out « setenv MPI_DSM_MUSTRUN » (MPT1.9 = MPI_DSM_DISTRIBUTE) Distribution des processus sur le système ou dans le CPUSET dplace, cpuset, ... Single copy : pour des applications sensibles à la bande passante, utilisation du module xpmem pour mapper de la mémoire entre processus, « setenv MPI_BUFFER_MAX 2000 » SGI Proprietary 3/31/2017

56 Tunning MPI Eliminer les « retries » : SHMEM : « -lsma »
Les communications point à point sont bufferisées Si les stat. MPI donnent un grand nombre de « retries » : Attente d’entrée de buffers, MPI_BUFS_PER_PROC, MPI_BUFS_PER_HOSTS, MPI_MSGS_PER_HOSTS. SHMEM : « -lsma » inter-partition (depuis MPT 1.8) éliminer l’overhead du aux appels MPI Bande-passante, Inter-Partitions : Utilisation du driver XPMEM SGI Proprietary 3/31/2017

57 Tunning OpenMP KMP_STACKSIZE:
La Bibliothèque “run-time library” est libguide, développé par KAI construit sur linuxthreads, linké automatiquement par le compilateur Autres flags: Affiche des diagnostics avec -openmp_report[0|1|2] 0: pas de diagnostics 1: boucles, regions, et sections parallélisé avec sucés (default) 2: affiche d ’autres informations sur les autres constructions OpenMP -openmp_profile Edition de lien avec des « runtimes » qui supporte les composantes OpenMP de VTune™ Variables d ’environnement : KMP_STACKSIZE: stack privée des threads ( le défaut est de 4 Mo sur Itanium) KMP_LIBRARY: mode d exécution « runtime » serial – exécution mono-processeur. throughput – (défaut) pour environnement multi-utilisateur, libère le processeurs pour d ’autres processus quand la threads OpenMP est en attente (équivalent sur IRIX : _DSM_WAIT=YIELD) turnaround – les threads ne libère pas le processeurs quand elles sont en attente de travail (équivalent sur IRIX : _DSM_WAIT=SPIN) SGI Proprietary 3/31/2017

58 PLAN : Introduction à l'ALTIX Développement sur ALTIX
Utilisation des ALTIX Comprendre les performances sur ALTIX Observer le comportement de la machine Observer le comportement du code Ressources et documentation SGI Proprietary 3/31/2017

59 Performance Co-Pilot Architecture client/serveur pour un contrôle centralisé de calcul distribué, Possibilité de surveiller plusieurs hôtes. Données temps réelles et historiques. Monitoring automatisé des performances. Composantes : Collecteur : Collecte des données de performance, Moniteur : archivage + visualisation des données, Données récupérées Instrumentation Hardware, Noyau de l’OS Librairies Service layers, daemons, etc. Applications  % pmchart -h [host] visualisation de compteur du système  % pmgcluster [host] / pmgsys visualisation rapide de la charge du système SGI Proprietary 3/31/2017

60 PLAN : Introduction à l'ALTIX Développement sur ALTIX
Utilisation des ALTIX Comprendre les performances sur ALTIX Observer le comportement de la machine Observer le comportement du code Ressources et documentation SGI Proprietary 3/31/2017

61 lipfpm (Linux IPF Performance Monitor)
lipfpm permet d'obtenir les valeurs des compteurs de l’Itanium pour l'exécution d’une application utilisation du cache L2 et le Mflop : lipfpm -e FP_OPS_RETIRED -e L2_MISSES -e L2_REFERENCES $COMMANDE lipfpm summary ====== ======= Retired FP Operations L2 Misses Requests Made To L CPU Cycles Percentage of L2 misses Average MFLOP/s Average MB/s requested by L 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 $COMMANDE Retired FP Operations L3 Reads -- L3 Load References L3 Reads -- L3 Load Misses CPU Cycles Average MFLOP/s Average data read MB/s requested by L SGI Proprietary 3/31/2017

62 histx : HISTogram eXecution
histx (SGI) permet de comprendre : où est passé le temps, où sont générés les événements de performances. Compiler le code avec -g Mode « instruction pointer » : <count>: <library>:<function> [<file>:<line>] Par ligne : « -l » : <count>: [<file>:<line>] (library) Mode « callstack » : <count> <N> <library1>:<function1> [<file1>:<line1>] ... <libraryN>:<functionN> [<fileN>:<lineN>] Rapport séparé pour chaque pthread, thread OpenMP, ou processus MPI. SGI Proprietary 3/31/2017

63 histx : HowTo Mode : IP Sampling Mode : IP Sampling + info par ligne
format : <count>: <library>:<function> [<file>:<line>] histx -f -o ${OUT_FILE}_ip $COMMANDE Mode : IP Sampling + info par ligne format :<count>: [<file>:<line>] (library) histx -l -f -o ${OUT_FILE}_ip_l $COMMANDE Exploitation des fichiers iprep ${OUT_FILE}_ip > ${OUT_FILE}_ip_report Mode : Callstack format :< count> <N> <library1>:<function1> [<file1>:<line1>] <library2>:<function2> [<file2>:<line2>] … <libraryN>:<functionN> [<fileN>:<lineN>] histx -o ${OUT_FILE}_callstack -s callstack10 $COMMANDE csrep ${OUT_FILE}_callstack > ${OUT_FILE}_callstack_report SGI Proprietary 3/31/2017

64 Histx : Exemple % histx -f -l -o out_histx ./a.out
% iprep < out_histx.a.out > prof.out Count Self% Cum.% Name a.out:prod_mat_trans_ [libmat-art.f:659] a.out:prod_mat_ [libmat-art.f:630] libmpi.so:MPI_SGI_shared_progress a.out:comp_mat_ligne_ [libmat-art.f:350] libmpi.so:MPI_SGI_request_test SGI Proprietary 3/31/2017

65 Différence entre Origin 2000 et Altix 3700
vs Benchmark Notes Origin 300 Mhz Origin200 @ 500 Mhz Altix 3700 @ 1.5Ghz Crête (en Mflops) Puissance flottante max. 600 (2fp*300) 1000 (2fp*500) 6000 (4fp*300) Linpack 1kx1k (en Mflops) 80 % de la crête 545 914 5400 Specint2000_base Moyenne sur des codes de calcul avec des nombres entiers 254 397 1243 Specfp2000_base Moyenne sur des codes de calcul avec des nombres flottants 269 362 2080 STREAM (TRIAD) (en Mo/s) Bande passante du dernier niveau de cache vers la mémoire a(i) = b(i) + q*c(i) 388 429 3810 SGI Proprietary 3/31/2017

66 PLAN : Introduction à l'ALTIX Développement sur ALTIX
Utilisation des ALTIX Comprendre les performances sur ALTIX Ressources et documentation SGI Proprietary 3/31/2017

67 Pour en savoir plus … man pages : Documents PDF :
efc, ecc, ... mpi, scsl, ... pfmon, histx, ... cpuset, dplace, ... Documents PDF : Documentation sur les compilateurs dans le répertoire d’installation. Site SGI, Techpubs : « Linux® Application Tuning Guide  » Document Numéro : « Message Passing Toolkit (MPT) User's Guide  » Document Numéro : Site Intel : « Scientific Computing on Itanium®-based Systems  » Intel Press « Introduction to Microarchitectural Optimization for Itanium® 2 Processors  » Document Numéro : Web de clients SGI : CALMIP : NASA NAS : Texas A&M Supercomputing Facility : Equipes SGI … SGI Proprietary 3/31/2017


Télécharger ppt "Développement sur ALTIX"

Présentations similaires


Annonces Google