1.05k likes | 1.2k Views
Environnement SGI Origin 2000 v 3.0 Guy Moebs Guy.Moebs@crihan.fr. Plan de la formation. 1. Environnement de travail 2. Outils d’aide au développement 3. Optimisation scalaire 4. Parallélisme. 1- Environnement de travail. A. Présentation matérielle B. Présentation logicielle
E N D
Environnement SGI Origin 2000v 3.0Guy MoebsGuy.Moebs@crihan.fr
Plan de la formation • 1. Environnement de travail • 2. Outils d’aide au développement • 3. Optimisation scalaire • 4. Parallélisme
1- Environnement de travail • A. Présentation matérielle • B. Présentation logicielle • C. Arborescence • D. Soumission batch
1- A. Architecture matérielle O2000 • Architecture O2000 (64 processeurs) :
R 1- A. Architecture matérielle O2000 • Sommet du cube constitué : • un router • deux noeuds • Router connecté à 4 routers voisins • Noeud composé : • 2 processeurs R10000 • un commutateur HUB • une mémoire partagée (1 Go)
1- A. Architecture matérielle O2000 • Le HUB : • est connecté aux deux processeurs du noeud, • sert d'interface entrées/sorties et et de connexion avec le reste des processeurs de la machine. • La mémoire : • est partagée entre les processeurs du noeud, • est adressable par l'ensemble des processeurs de la machine.
1- A. Architecture matérielle O2000 • Processeurs type R10000 (MIPS IV) : • une fréquence horloge de 195 MHz, • une puissance crête/processeur de 390 Mflops, • un transfert crête de données vers le cache secondaire de 2.08 gbits/s, • deux espaces cache : • un cache primaire d'instructions de 32 Ko et de données de 32Ko, • un cache secondaire de 4 Mo. • Mémoire totale : 32 Go.
1- A. Architecture matérielle O2000 • Organisation de la mémoire
1- A. Architecture matérielle O2000 • Temps d’accès mémoire
1- A. Architecture matérielle O2000 • Volume de stockage disque : 270 Go • Configuration avec robot d'archivage et de sauvegarde de marque ADIC-GRAU AML/S 1000 • (Technologie DLT 7000) • Capacité de 10.5 Téra Octets • Accès à illiac8 via une interface ATM OC-3 (155Mbits/s)
1- B. Présentation logicielle • 1. Compilateurs • 2. Modules • 3. Débogueurs - éditeurs - logiciels de graphisme • 4. Bibliothèques scientifiques • 5. Outils de développement • 6. Parallélisation
1- B. Présentation logicielle 1. Compilateurs Compilateurs SGI : • Fortran 77 : f77 • Fortran 90 : f90 • C : cc • C++ : CC Adressage des données : -n32 ou -64 selon l’espace d’adressage (< ou > 2Go) Compilateur HPF (Portland Group) : • HPF (High Performance Fortran) : pghpf • langage data parallel basé sur le F90
1- B. Présentation logicielle 2. Modules Module MPT (Message Passing Toolkit) : Environnement d’utilisation de MPI, SHMEM, PVM => chemins, variables d’environnement, librairies, exécutables Installation statique pour les versions >= 1.4 Installation par module pour les versions <= 1.3 => commande « module » (module help) : module avail : ensemble des modules présents module list : ensemble des modules déjà activés module load mpt : activation du module mpt module unload mpt : désactivation du module mpt
1- B. Présentation logicielle 3. Débogueurs Débogueurs : • dbx, • cvd (outil SGI). Éditeurs : • vi, • emacs, • xedit, • nedit. Logiciels de graphisme : • xmgr, • gnuplot.
1- B. Présentation logicielle 4. Bibliothèques Bibliothèque SCSL (optimisées par SGI) : • BLAS (portabilité complète), • LAPACK (portabilité complète), • FFT (portabilité restreinte !). • en INTEGER*4 : link avec –lscs ou -lscs_mp (version parallèle) • en INTEGER*8 : link avec –lscs_i8 ou –lscs_i8_mp (version parallèle) • Mathématique, => link avec -lfastm (au lieu de -lm par défaut) Bibliothèques domaine public : • SCALAPACK, => link avec /local/SCALAPACK/libscalapack[64/n32].a • BLACS, => link avec /local/BLACS/libmpiblacs[64/n32].a
1- B. Présentation logicielle 5. Outils • Perfex : comptage d’évèments matériels • Speedshop : • ssrun : effectue les mesures, • prof : analyse des échantillonnages. • WorkShop : • Build Manager (cvbuild/cvmake) : aide à la compilation, • Static Analyser (cvstatic) : aide à l’analyse de programmes, • Debugger (cvd) : débogueur, • Performance Analyser (cvperf) : profilage de programmes, • Parallel Analyser (cvpav) : aide à la parallélisation. • Documentation : • manpage et insight
1- B. Présentation logicielle 6. Parallélisation • Parallélisme SMP (Shared Memory Processing) : insertion de directives de compilation : OpenMP • Parallélisme MPP (Massively Parallel Processing) : modules mpt : MPI, SHMEM, PVM version constructeur • Parallélisme de données (data parallelism) : HPF (Portland Group)
1- C. Arborescence • Compte informatique utilisateur :
1- C. Arborescence • Sauvegarde des $HOME_DIR toutes les nuits • Migration des $HOME_SAVE à l’aide de DMF : dmls, dmget, dmput • $HOME_WORK non sauvegardés • Quota disques : quota -v • Assistance : http://www.crihan.fr/assistance/tickets-illiac8.html • Consommation CPU : http://www.crihan.fr/CRIHAN/calcul/compta.html • Documentation utilisateur : http://www.crihan.fr/CRIHAN/calcul/par/doc/Illiac8/index.html
1- D. Environnement batch Mode batch = traitement des commandes par lots • préparation d’un ensemble de commandes dans un fichier (script), un “job” • soumission à NQE (Network Queueing Environment) (cqsub) : => Recherche d’une queue batch éligible selon les ressources demandées => cqstatl -a => transmis à NQS si les ressources sont disponibles => mis en attente, status “pending” • NQS (Network Queueing System) vérifie les limites des queues batch => qstat -a => running (Rxx) => queueing (Qyy) -> signification de yy : manpage de qstat • Priorité d’exécution des "jobs" en fonction des ressources demandées.
1- D. Environnement batch • Utilisation du batch : • Rajouter dans votre home le fichier .nqshosts : illiac8.crihan.fr • Création du script • Paramètres CQSUB : • -lM : fixe la mémoire maximale de la requête => somme des mémoires résidentes (colonne RES de top) • -lm : fixe la mémoire maximale par processus => mémoire virtuelle maximale (colonne SIZE de top) • -lT : fixe le temps CPU maximal de la requête • -lt : fixe le temps CPU maximal par processus • -l mpp_p=nb_procs : fixe le nombre maximal de processeurs utilisés !!! MPI, OpenMP, PVM nécessitent “nb_procs +1” comme arguments pour “-l mpp_p”
1- D. Environnement batch #QSUB -r omp nom du job soumis #QSUB -u gm login de l’utilisateur #QSUB -x passage des variables d’environnement #QSUB -eo fusion fichier de log et fichier d’erreur #QSUB -lM 1Go mémoire maximale de la requête #QSUB -lm 600Mo mémoire maximale par processus #QSUB -lT 1300 temps CPU maximal de la requête #QSUB -lt 300 temps CPU maximal par processus #QSUB -me envoi d’un mail à la fin du job #QSUB -mugm@crihan.fr adresse e-mail pour l’envoi #QSUB -l mpp_p=5 nombre de processus maximal du job setenv OMP_NUM_THREADS 4 echo "Lancement MASTER” cd /crihan/gm/OMP timex ./a.out
1- D. Environnement batch • Lancement : cqsub run_batch • Contrôle de l’exécution : cqstatl -a au niveau de NQE qstat -a au niveau de NQS • Destruction : cqdel -k identifier (txxxxx ou yyyyy.illiac8.crihan.fr)
1- D. Environnement batch GM-illiac8% qstat -a ---------------------------------- NQS 3.3.0.15 BATCH REQUEST SUMMARY ---------------------------------- IDENTIFIER NAME USER LOCATION/QUEUE JID PRTY REQMEM REQTIM ST ------------- ------- -------- --------------------- ---- ---- ------ ------ --- 432.illiac8.crihan.fr V_N32 gm mem64@illiac8 635267 20 4 14999 R05 429.illiac8.crihan.fr V_64 gm big64@illiac8 48 10000 45000 Qgm GM-illiac8% cqstatl -a ----------------------------- NQE 3.3.0.15 Database Task Summary ----------------------------- IDENTIFIER NAME SYSTEM-OWNER OWNER LOCATION ST -------------------- ------- ---------------- -------- ------------------- ---- t411 (429.illiac8.c) V_64 lws.illiac8 gm nqs@illiac8 NSubm t414 (432.illiac8.c) V_N32 monitor.main gm NQE Database NComp
2- Outils d’aide au développement • A. Static Analyser : cvstatic • B. Build Manager : cvbuild / cvmake • C. Debugger : cvd • D. Performance Analyser : cvperf • E. Parallel Analyser : cvpav • F. Speedshop / perfex
2- Outils A. Static Analyser (cvstatic) • Aide à l’analyse et à la documentation de programmes • la structure du programme, • les fichiers qui le constituent, • les arbres d’appel, • les listes de fonctions, • le suivi des variables. • Deux modes d’analyse : • mode scanner : mode rapide, sans analyse relative au langage de programmation, => vue d’ensemble du programme. • mode parser : analyse relative au langage de programmation, possibilité de faire des interrogations. => étude plus poussée.
2- Outils A. Static Analyser • Commande de lancement : cvstatic ou à partir de cvd • Démarche : • création d’un fileset : sélection des fichiers, du langage, option Admin/Edit FileSet, => création d’une base de données de références croisées, • interrogations à l’aide de requêtes classées par thèmes, menu Queries, • visualisation graphique possible par l’option View/Call Tree View, • sauvegarde des requêtes précédentes, menu History, • filtrage des sorties, option Admin/Results Filter.
2- Outils B. Build Manager (cvmake) • Aide à la compilation de programmes • Composé de : • Build View, • Build Analyser. • A l’aide d’une interface graphique, le Build View permet de : • compiler des programmes, • corriger les erreurs de compilation, • visualiser les sources. • Commande de lancement : cvmake ou à partir de cvd.
2- Outils B. Build Manager (cvbuild) • A l’aide d’une interface graphique, le Build Analyser permet de : • visualiser les inter-dépendances entre les fichiers, • déterminer les cibles obsolètes à compiler/recompiler, option Admin/Refresh Graph Display, • faire des interrogations, menu Query. • Commande de lancement : cvbuild ou à partir de cvd.
2- Outils C. Debugger (cvd) • Aide au déboguage • Compilation avec les options –O0 –g3 –DEBUG:… • Constitué de : • Un éditeur, Source View, • Une barre de menus, • Un panneau de contrôle, • Une ligne d’état, • Une ligne de commande. • Commande de lancement : cvd.
2- Outils C. Debugger • Menu Admin : configuration du débogueur. • Menu Trap : gestion des points d’arrêts conditionnels/inconditionnels. • Menu PC : interaction avec le Program Counter. • Menus Display et Query : gestion de l’affichage et interrogation. • Menu View : visualisation. • Variable Browser : affichage des variables du sous-programme courant • Expression View : évaluation de formules utilisant les variables • Call Stack View : affichage de la hiérarchie des appels de fonctions
2- Outils D. Performance Analyser (cvperf) • Outil d’analyse des performances de codes. • recueil et visualisation des informations de profilage (coûts cpu des routines et des lignes sources), • utilisation de la mémoire, • Recherche des exceptions flottantes (underflow, overflow, …). • Compilation du code avec le niveau d’optimisation –O3 • Commande de lancement : cvperf ou à partir de cvd • Version graphique de prof et ssrun
2- Outils D. Performance Analyser • Démarche d’instrumentation : • Choix du type de données et de la fréquence de l’échantillonnage, • Sampling Data : comptage du nombre d’exécutions d’un bloc d’instructions • Tracing Data : récupération des évènements altérant les performances • Sélection de la tâche : option Perf/Select Tasks • Instrumentation de l’exécution : bouton run • Analyse des résultats : option Perf/Examine Results
2- Outils E. Parallel Analyser (cvpav) • Aide à la parallélisation automatique (APO) et à la parallélisation par directives (OpenMP). • Compilation avec le niveau d’optimisation –O3 (Loop Nest Analyser : analyse des boucles). • Examen du code source, indications à l’aide de symboles. • Insertion de directives pour le compilateur, définition de régions parallèles. • Commande de lancement : cvpav ou à partir de cvd
2- F. SpeedShop • ssrun : génère les fichiers de statistiques (ssrun [options] prgm) • -pcsamp : statistiques sur le Program Counter, • -usertime : temps (inclusif et exclusif) du programme, • -ideal : statistiques de comptage pour les blocs basiques. • ssaggregate : fusionne les fichiers d’analyse ssaggregate –e files.exp.pid –o file.exp • prof : traite les données et établit un rapport (prof [options] file.exp) • -lines : fournit les numéros des lignes des sous-programmes, • -q n : tronque la sortie après les n premiers sous-programmes affichés. • perfex : compte les évènements matériels (perfex -a -x -y prgm) => nombres de cycles, accès mémoire en dehors du cache, …
3- Optimisation scalaire • A. Ecriture du code, • B. Bibliothèques scientifiques, • C. Modularité, • D. Déboguage / validation, • E. Analyse des performances, • F. Optimisations par re-écriture, • G. Optimisations par options de compilation • H. Variables d’environnement.
3- Optimisation A. Ecriture du code • Réflexion au préalable sur papier, • Algorithmes performants (!), • Déclaration explicite de toutes les variables et des fonctions externes : • Directive IMPLICIT NONE dans tous les fichiers source, • Type générique pour les variables (REAL, INTEGER), • Précision imposée à la déclaration : REAL(rp) avec rp=4 ou 8, • Appels aux noms de fonctions génériques, exemple : SQRT au lieu de DSQRT, • Séparation des types dans les commons : CHARACTER et LOGICAL à part.
3- Optimisation A. Ecriture du code • Déclaration explicite des dimensions des tableaux, • Initialisation explicite des variables avant leur utilisation, • Indentation du source pour le rendre plus lisible, • Code aéré avec des commentaires, • Tests arithmétiques flottants selon la précision machine : Bon : IF ( ABS(reel1 - reel2) .LT. machep ) THEN ... Mauvais : IF ( reel1 .EQ. reel2 ) THEN ... Bon : IF ( ABS(DET) .LT. machep) THEN ... Mauvais : IF ( DET .EQ. 0 ) THEN ...
3- Optimisation A. Ecriture du code • Précision des constantes scalaires : INTEGER, PARAMETER :: rp = KIND(1.0D0) ! rp = 8 REAL(rp) :: x ! REAL*8 :: x x = 2.0 / 3.0 = 0.66666668653488159 x = 2.0_rp / 3.0_rp = 0.66666666666666663 • Tests arithmétiques flottants selon la précision machine : machep = 1.0_rp DO WHILE (machep + 1.0_rp > 1.0_rp ) machep = 0.5_rp * machep END DO machep = 2.0_rp * machep • Fonction epsilon du Fortran 90
3- Optimisation B. Bibliothèques scientifiques • Ensembles de sous-programmes testés, validés, optimisés. => Gain de temps et de travail et applications portables. => sources et documentations diverses : http://www.netlib.org • BLAS : algèbre linéaire de base (blas 1, 2, 3) • LAPACK : algèbre linéaire poussé • FFT : transformées de Fourier rapides, convolution (portabilité !) • Version SGI dans SCSL : link avec –lscs_i8 ou -lscs_i8_mp _i8 : INTEGER*8 au lieu de INTEGER*4 • Bibliothèque mathématique : link avec -lfastm au lieu de -lm
3- Optimisation C. Modularité • Fractionner le source, • Mettre un sous-programme par fichier, • Mettre un module, un common par fichier, • Construire des bibliothèques thématiques, • Travailler avec un fichier Makefile, • Gestion des fichiers de reprise, • Tester les routines après écriture sur des exemples.
3- Optimisation D. Déboguage / validation • Options de compilation recommandées: -O0 : aucune optimisation ! -u : signale les variables non déclarées (mettre IMPLICIT NONEdans le code), -g3 : enrichir la table des symboles pour le débogueur(dbx, cvd), -fullwarn : recevoir un maximum (-woff num) d’informations du compilateur, -DEBUG:trap_uninitialized=ON : mise à NaN des variables non initialisées, -DEBUG:subscript_check=ON : vérification des indices pour les tableaux, -DEBUG:div_check=3 : vérification des quotients d’entiers et des overflows, -DEBUG:verbose_runtime=ON : informations lors de l’exécution, -lfpe : recherche des exceptions flottantes + variable d’environnement TRAP_FPE
3- Optimisation E. Analyse des performances • Compilation avec le niveau d’optimisation -O3 • Speedshop : • code séquentiel ou OpenMP : ssrun -[f]pcsamp[x] prgm • code MPI : mpirun –np nbprocssrun –[f]pcsamp[x] prgm • fusion : ssaggregate –e prgm.exp.pids –o prgm.ssrun • analyse : prof -lines prgm.pcsamp • Workshop: • cvperf (version graphique de ssrun/prof) => Localiser la consommation du cpu pour optimiser les zones coûteuses