Développement sur ALTIX

Slides:



Advertisements
Présentations similaires
Mais vous comprenez qu’il s’agit d’une « tromperie ».
Advertisements

Le micro-ordinateur.
Le Nom L’adjectif Le verbe Objectif: Orthogram
ORTHOGRAM PM 3 ou 4 Ecrire: « a » ou « à » Référentiel page 6
LES NOMBRES PREMIERS ET COMPOSÉS
Module Systèmes d’exploitation
Module 5 : Implémentation de l'impression
Distance inter-locuteur
TECHNOLOGIE DES ORDINATEURS
1 Plus loin dans lutilisation de Windows Vista ©Yves Roger Cornil - 2 août
Les numéros 70 –
Les numéros
Cours MIAGE « Architectures Orientées Services » Henry Boccon-Gibod 1 Architectures Orientées Services Composants de Service Exemple pratique de développement.
Présentation de l’Architecture Windows NT
Silicon Graphics, Inc. Présenté par : 02/03/2005 SGI Proprietary Développement sur ALTIX Thomas VARLET Yannick KUNEGEL
Bibliothèques Scientifiques
17-21 Octobre 2005 Formation Continue - CNRS Laurence Viry Analyse et Optimisation de code Analyse de performance.
Introduction à la logique
LICENCE MIAGE Introduction Programmation Orientée Objet JAVA philippe
LES TRIANGLES 1. Définitions 2. Constructions 3. Propriétés.
ESIEE Paris © Denis BUREAU I N Initiation à la programmation avec le langage Java.
Architecture de machines La mémoire
Architecture de machines La mémoire
Les Réseaux (Informatiques)
1 7 Langues niveaux débutant à avancé. 2 Allemand.
Interface Homme Machine IHM Pro
1 5 octobre 2011 / paw Présentation du 7 octobre 2011.
La méthodologie………………………………………………………….. p3 Les résultats
Trainer: ELHAJIZ Adil LPI certified
ARCHITECTURE GLOBALE CAPTAGE Traitement DES des données GRANDEURS
Page 1 Introduction à ATEasy 3.0 Page 2 Quest ce quATEasy 3.0? n Ensemble de développement très simple demploi n Conçu pour développer des bancs de test.
Gestion des Périphériques
Le soccer & les turbans Sondage mené par lAssociation détudes canadiennes 14 juin 2013.
Olivier DERUELLE Erwan FOUYER Maxime JOUIN Rodolphe LOUE
Synchronisation et communication entre processus
Présentation générale
Serveurs Partagés Oracle
1 Guide de lenseignant-concepteur Vincent Riff 27 mai 2003.
Architecture des Ordinateurs
Virtual Local Area Network
Titre : Implémentation des éléments finis sous Matlab
Configuration de Windows Server 2008 Active Directory
Projet poker 1/56. Introduction Présentation de léquipe Cadre du projet Enjeux Choix du sujet 2.
F Copyright © Oracle Corporation, Tous droits réservés. Créer des programmes avec Procedure Builder.
LES NOMBRES PREMIERS ET COMPOSÉS
5.1 URDL22005 Systèmes dexploitation Threads Vue dEnsemble Modèles de Multithreading Problèmes des Threads Pthreads Threads Windows XP Threads Linux Threads.
Les chiffres & les nombres
Les systèmes multiprocesseurs Ph. Sèvre le 19/12/08.
Programmation concurrente
CSI2520, Hiver 2007 Python Un langage de programmation par scripting et plus…
Année universitaire Réalisé par: Dr. Aymen Ayari Cours Réseaux étendus LATRI 3 1.
Titre : Implémentation des éléments finis en Matlab
MAGIE Réalisé par Mons. RITTER J-P Le 24 octobre 2004.
1 INETOP
Développement sur ALTIX
Aire d’une figure par encadrement
NORMALISATION DES LANGAGES DE PROGRAMMATION des Automates Programmables Industriels CEI
MAGIE Réalisé par Mons. RITTER J-P Le 24 octobre 2004.
1/65 微距摄影 美丽的微距摄影 Encore une belle leçon de Macrophotographies venant du Soleil Levant Louis.
Programmation Système et Réseau (sous Linux)
Gérer la sécurité des mots de passe et les ressources
1 Mise en œuvre d'un outil d'aide au développement d'une JVM modulaire pour système embarqué Rodolphe Loué Projet SOLIDOR.
Module 8 : Surveillance des performances de SQL Server
KRIKORIAN Pierre HILMI Brahim
SYSTÈME D’EXPLOITATION I
1 École des Mines de Saint-Etienne. 158, cours Fauriel Saint-Etienne Cedex 2. Tél Fax Jean-Jacques Girardot
Classe 1 CSI2572 Autres modificateurs de déclaration de variables: & volatile & register & static & auto & extern & const volatile Indique au compilateur.
Interface de communication pour les réseaux InfiniBand
Chapitre 12 Surveillance des ressources et des performances Module S41.
Transcription de la présentation:

Développement sur ALTIX Thomas VARLET (tvarlet@sgi.com) Charles ROGE (croge@sgi.com) Philippe THIERRY (pthierry@sgi.com) 31/03/2017 SGI Proprietary

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

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

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

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

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

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

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

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

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

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

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

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

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 8.51–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

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

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

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

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 (2x23@400 MHz, 2x800 MB/s) to other nodes Main Memory SDRAM (144@50 MHz=800MB/s) Nœud hardware Altix 3700 SHUB SHUB SGI Proprietary 3/31/2017

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

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 2.4.21) + glibc 2.2.4 + linux threads + ... Propack 3.0 = RHEL AS 3.0 (+kernel 2.4.21) + glibc 2.3.3 + 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

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 350 : 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

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

“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

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.7.1.031 scsl-1.4.1rel mkl.7.0.007 intel-fc-8/8.0.050 mpt-1.9-1 modules intel-cc-8/8.0.070 mpt-1.10 totalview.6.3.1-0 % 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

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

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

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

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

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

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

Debugging En standard : Fonctionne aussi : « gdb » debugger GNU pour C, C++ et Fortran95 C et C++ : « -g » Fortran : « -g » et « -O0 » http://sources.redhat.com/gdb/onlinedocs/gdb_toc.html « idb » debugger Intel C, C++, f77, F90 ni multi-processeurs, ni multi-threads « ddd » DataDisplayDebuger (www.gnu.org/software/ddd/), GUI pour debugger a base de ligne de commande supporte gdb et idb Fonctionne aussi : « TotalView » « DDT » SGI Proprietary 3/31/2017

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

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

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

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

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

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

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

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/pci01.01.0/target0/lun0/ds 0 P-Brick 4 R-Brick 8 C-Brick 4 1000 MHz Itanium 2 Rev. 7 Processor 28 1000 MHz Itanium 2 Rev. 6 Processor Main memory size: 114.05 Gb IO9 Controller Card (Silicon Graphics, Inc.) (rev 69). on pci01.01.0 QLogic 12160 Dual Channel Ultra3 SCSI (Rev 6) on pci01.03.0 Disk Drive: unit 1 on SCSI controller pci01.03.0-1 Disk Drive: unit 2 on SCSI controller pci01.03.0-1 BROADCOM Corporation NetXtreme BCM5701 Gigabit Ethernet (rev 21). on pci01.04.0 SCSI storage controller: QLogic Corp. QLA2200 (rev 5). pci02.01.0 Disk Drive: unit 34 lun 0 on SCSI controller pci02.01.0 0 Disk Drive: unit 35 lun 0 on SCSI controller pci02.01.0 0 …. SGI Proprietary 3/31/2017

Configuration du système : “/proc” « uname -a » : Linux bigbang 2.4.21-sgi240rp04080615_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 0 507904 368360 1 507904 489235 2 507904 487940 « /proc/pal/cpu0/cache_info » : structure cache L1, L2, et L3, « /proc/version » : information sur le kernel % more /proc/version Linux version 2.4.21-sgi240rp04080615_10094 (root@zing.engr.sgi.com) (gcc version 2.96 20000731 (Red Hat Linux 7.2 2.96-118.7.2)) #1 SMP Fri Aug 6 16:01:54 PDT 2004 Version kernel Version ProPack + patch SGI Proprietary 3/31/2017

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-2.4.19-sgi212r2smp 275056 0 (unused) arsess 37872 1 nls_iso8859-1 6048 1 (autoclean) nls_cp437 7728 1 (autoclean) qlfc_mod 539312 6 xpnet 13392 0 (unused) xpmem 118448 0 numatools 13904 1 xpc 140688 0 (unused) xp 7816 0 [xpnet xpmem xpc] xvm-standalone 698528 0 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

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

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

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

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

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

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

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

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

Numatools : dlook SGI Proprietary 3/31/2017 dlook 4702 Peek: sleep Pid: 4702 Thu Aug 22 10:45:34 2002 Cputime by cpu (in seconds): user system TOTAL 0.002 0.033 cpu1 0.002 0.033 Process memory map: 2000000000000000-2000000000030000 r-xp 0000000000000000 04:03 4479 /lib/ld-2.2.4.so [2000000000000000-200000000002c000] 11 pages on node 1 MEMORY|SHARED 2000000000030000-200000000003c000 rw-p 0000000000000000 00:00 0 [2000000000030000-200000000003c000] 3 pages on node 0 MEMORY|DIRTY ... 2000000000128000-2000000000370000 r-xp 0000000000000000 04:03 4672 /lib/libc-2.2.4.so [2000000000128000-2000000000164000] 15 pages on node 1 MEMORY|SHARED [2000000000174000-2000000000188000] 5 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:37 2002 Process memory map: [2000000000030000-2000000000034000] 1 page on node 21 MEMORY|DIRTY [2000000000034000-200000000003c000] 2 pages on node 12 MEMORY|DIRTY|SHARED 2000000000044000-2000000000060000 rw-p 0000000000000000 00:00 0 [2000000000044000-2000000000050000] 3 pages on node 12 MEMORY|DIRTY|SHARED Pid: 2310 Fri Aug 30 14:33:37 2002 Process memory map: [2000000000030000-2000000000034000] 1 page on node 25 MEMORY|DIRTY [2000000000050000-2000000000054000] 1 page on node 25 MEMORY|DIRTY SGI Proprietary 3/31/2017

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

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 0-63 ./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

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

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

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

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

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

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

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

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

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...................................... 152499228284 L2 Misses.................................................. 3159051506 Requests Made To L2........................................ 69829240763 CPU Cycles................................................. 348231157730 Percentage of L2 misses.................................... 0.0452397 Average MFLOP/s............................................ 569.303 Average MB/s requested by L2............................... 1509.53 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...................................... 152499228205 L3 Reads -- L3 Load References ............................ 2499734811 L3 Reads -- L3 Load Misses ............................... 1712387197 CPU Cycles................................................. 348636126093 Average MFLOP/s............................................ 568.642 Average data read MB/s requested by L3..................... 817.303 SGI Proprietary 3/31/2017

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

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

Histx : Exemple % histx -f -l -o out_histx ./a.out % iprep < out_histx.a.out.29591 > prof.out Count Self% Cum.% Name -------------------- ------- ------- -------------------- 25007 46.383 46.383 a.out:prod_mat_trans_ [libmat-art.f:659] 12815 23.769 70.152 a.out:prod_mat_ [libmat-art.f:630] 4195 7.781 77.933 libmpi.so:MPI_SGI_shared_progress 3275 6.074 84.008 a.out:comp_mat_ligne_ [libmat-art.f:350] 2067 3.834 87.842 libmpi.so:MPI_SGI_request_test SGI Proprietary 3/31/2017

Différence entre Origin 2000 et Altix 3700 vs Benchmark Notes Origin 2000 @ 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

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

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 : http://techpubs.sgi.com/ « Linux® Application Tuning Guide  » Document Numéro : 007-4639-003 « Message Passing Toolkit (MPT) User's Guide  » Document Numéro : 007-3773-001 Site Intel : http://developer.intel.com/ « Scientific Computing on Itanium®-based Systems  » Intel Press « Introduction to Microarchitectural Optimization for Itanium® 2 Processors  » Document Numéro : 251464-001 Web de clients SGI : CALMIP : http://www.calmip.cict.fr/spip/ NASA NAS : http://www.nas.nasa.gov/User/Systemsdocs/Altix/altix.html Texas A&M Supercomputing Facility : http://sc.tamu.edu/help/altix/ Equipes SGI … SGI Proprietary 3/31/2017