17-21 Octobre 2005 Formation Continue - CNRS Laurence Viry Analyse et Optimisation de code Techniques doptimisation.

Slides:



Advertisements
Présentations similaires
Module Systèmes d’exploitation
Advertisements

Premier programme en C :
Chap. 4 Recherche en Table
Tests et Validation du logiciel
Architecture de machines Le microprocesseur
Introduction: Concepts de la programmation
Introduction à l’Algorithmique
GEF 243B Programmation informatique appliquée Expressions de type mixte et blocs §
Cours n°2M2. IST-IE (S. Sidhom) UE 303 Promo. M2 IST-IE 2005/06 Conception dun système d'information multimédia Architecture trois-tiers : PHP/MySQL &
Chargé de recherches au CNRS
Objectif de l’exposé.
C.
Le Concept du programme enregistré
Analyse et Optimisation de code
Bibliothèques Scientifiques
Outils de développements
Analyse et Optimisation de code
Introduction à MPI Types dérivés MPI Décembre 2005
17-21 Octobre 2005 Formation Continue - CNRS Laurence Viry Analyse et Optimisation de code Optimisation Compilateur Optimisation manuelle.
Informatique parallèle hautes performances
Introduction : Compilation et Traduction
ESIEE Paris © Denis BUREAU I N Initiation à la programmation avec le langage Java.
Principes de programmation (suite)
Points importants de la semaine Les boucles. Les types arithmétiques. Les opérateurs.
44 Contrôle du déroulement du programme. 4-2 Objectifs A la fin de ce cours, vous serez capables de : Utiliser les constructions de prise de décision.
Bibliothèque standard du C++
RESUMES Module II1 SOMMAIRE CYCLE 1 : Saisir – Afficher – Données
Methode de Tri efficace
II. Chaînage, SDD séquentielles
Quest-ce quune classe dallocation? Une classe dallocation détermine la portée et la durée de vie dun objet ou dune fonction.
Optimisation et parallélisation de code pour processeur à instructions SIMD multimedia François Ferrand.
Allocation de mémoire Allocation de mémoire.
FICHIERS : Définition : Algorithme général:
Les fichiers indexés (Les B-arbres)
Les pointeurs Modes d’adressage de variables. Définition d’un pointeur. Opérateurs de base. Opérations élémentaires. Pointeurs et tableaux. Pointeurs et.
Structures de données IFT-2000 Abder Alikacem Standard Template library Édition Septembre 2009 Département dinformatique et de génie logiciel.
Systèmes Superscalaires et VLIW
Gei 431 Architecture des ordinateurs II – Frédéric Mailhot Et maintenant, où allons-nous? Après toutes les techniques vues jusquici: Que peut-on faire.
Semaine #1 INF135 par Frédérick Henri.
Principes de programmation
Gestion de Fichiers Tri Interne Efficace et Tri Externe.
Parallel Programming in C with MPI and OpenMP
Détection du meilleur format de compression pour une matrice creuse dans un environnement parallèle hétérogène Olfa HAMDI-LARBI.
Séminaire DEN/DSOE/Simulation sur le calcul hautes performances: le 7 novembre /17 Numerical Platon Contexte –outil daide aux développements de codes.
L’adaptativité pour un solveur de l’équation de Vlasov
Plan cours La notion de pointeur et d’adresse mémoire.
NORMALISATION DES LANGAGES DE PROGRAMMATION des Automates Programmables Industriels CEI
Module 8 : Surveillance des performances de SQL Server
TD0 - Rappels. Acquis du programme 1 ère année Analyser et modéliser : un problème, une situation ; Imaginer et concevoir : une solution algorithmique.
III. Récursivité Principe et exemples
Le langage Racket (Lisp)
PROJET CAPS Compilation, Architecture, Parallélisme et Système.
GF-11: Tri Interne Efficace et Tri Externe
Construction d'une hiérarchie mémoire faible consommation
CSI 3525, Implémentation des sous-programmes, page 1 Implémentation des sous-programmes L’environnement dans les langages structurés en bloc La structure.
1 École des Mines de Saint-Etienne. 158, cours Fauriel Saint-Etienne Cedex 2. Tél Fax Jean-Jacques Girardot
ISBN Chapitre 10 L'implémentation des sous- programmes.
PROJET CAPS Compilation, Architecture, Processeurs Superscalaires et Spécialisées.
Structures de données avancées : Principales structures de fichiers
06/04/06 LES BASES DE DONNEES INTRODUCTION CogniTIC – Bruxelles Formation - Cepegra.
Post-optimisation, analyse de sensibilité et paramétrage
Module 3 : Gestion des fichiers de base de données
Chapitre 3 L’accès aux données.
 Chaînage et LSC : motivation et principe Manipuler la LSC : exemples Variantes : LDC, liste circulaire, … Etude de cas : réalisation d’un buffer clavier.
CHAPITRE 10 Les sous-programmes 1. Sous-programme Suite d’instructions appelée de manière répétitive Par un programme Par plusieurs programmes distincts.
Introduction Module 1.
Java Réalisé par: Mouna POKORA. PLAN: Définition : Historique: Caractéristiques: un langage orienté objet: un langage interprété : un langage portable:
Novembre 2003 Simulation numérique en vibro-acoustique par couplage de deux codes parallèles Unité de Recherche Calcul à Haute Performance François-Xavier.
Transcription de la présentation:

17-21 Octobre 2005 Formation Continue - CNRS Laurence Viry Analyse et Optimisation de code Techniques doptimisation

17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry A faire Vérifier: Multi-threading bib sun (F roch) Utilisation des caches L3

17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Optimisation séquentielle Principes généraux Architecture des processeurs, évolution les 30 dernières années Architecture de la mémoire Quelques techniques doptimisations Méthodologie proposée Optimisation du compilateur Timing et profiling Quelques méthodes doptimisation manuelle

17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Méthodologie conseillée Valider le programme à optimiser Utiliser des codes déja optimisés ou sy ramener Utiliser des algorithmes performants Analyser le code, et se concentrer sur les sections critiques Utiliser les capacités doptimiser du compilateur Effectuer des modifications dans le code pour optimiser les sections critiques

17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Algorithmes Performants Les Mflops est un mauvais indice de performance dun code Deux algorithmes de multiplications de matrices Même Mflops Temps CPU très différents En priorité à loptimisation dun code, sassurer de la performance des algorithmes utilisés

17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Techniques doptimisation Inlining Analyse interprocédurale Accès mémoire Réutilisation du cache Stride minimum Copie … Réduction des TLB misses Alignement des données Optimisation de boucles

17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Compilateur: génération de code (rappel) 1ère phase: analyse syntaxique et logique Transformation en un code intermédiaire prêt à loptimisation 2ème phase: Optimisation Haut Niveau (HLO: transformations de boucles, inlining,..) 3ème phase: Optimisations globales et locales, allocation des registres… 4ème phase: Génération du code en tenant compte des spécificités de larchitecture du(des) processeurs.

17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Software Pipelining Le compilateur ne fait pas toujours du Software Pipelining par défaut augmente le temps de compilation Performant sur les boucles vectorisables Moins performant sur les boucles: de grande taille contenant des récurrences Nest pas effectué sur les boucles: contenant des appels de fonction contenant des instructions goto

17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Inlining Remplace lappel dune procédure par le code de cette procédure Intérets: élimine loverhead dû à lappel (sauvegarde des registres, appel, instructions de retour, …) fournit un contexte plus large pour loptimisation scalaire et de boucles.

17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Inlining Inconvénients: Augmente le temps de compilation Crée des problèmes dallocation de registres plus complexes augmente la taille du code Critères dInlining: fréquence des appels taille de la procédure appelée

17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Analyse Interprocédurale (IPA) Par défaut : analyse du compilateur sur une seule procédure à la fois. Inconvénients: manque dinformation pour analyser les dépendances, pour mettre en évidence les constantes mettre en évidence les variables jamais utilisées traitement des variables à la frontière des procédures... OPTIMISATION CONSERVATIVE

17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry IPA (suite) Analyse plusieurs procédures simultanément Renvoie la plupart des actions doptimisation du compilateur juste avant lédition de liens Compilations en plusieurs phases Contrôle la façon dont les procédures et les fonctions interagissent ente elles Principales actions : Inlining automatique Désactive la récursivité...

17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry IPA (suite) Intérets permet des optimisations supplémentaires Software Pipelining, Optimisation des boucles imbriquées, Inlining, réduction des conflits de cache(padding,…), élimination des fonctions jamais utilisées, détection des noms globaux, …

17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry IPA (suite) Inconvénients: augmente le temps global compilation/édition de liens augmente la taille de lexécutable peut modifier sensiblement les résultats

17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Optimisation des accès mémoire Minimiser le stride Fortran: stockage par colonne Parcourt dun tableau 2D par lindex le plus à gauche C : stockage par ligne Parcourt dun tableau 2D par lindex le plus à droite Regroupement de données Optimisation par copie Alignement « naturel » des données Optimisation des boucles

17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Réutilisation du cache: stride Stride égal à 1 (Fortran) do i=1,n do j=1,n a(i,j)=b(i,j) enddo do j=1,n do i=1,n a(i,j)=b(i,j) enddo sera modifié

17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Réutilisation du cache (suite) Regrouper les données utilisées do i,1,n j=index(i) d=d+sqrt(x(j)*x(j) + y(j)*y(j) + z(j)*z(j) enddo do i,1,n j=index(i) d=d+sqrt(r(1,j)*r(1,j) + r(2,j)*r(2,j) + r(3,j)*r(3,j) enddo x,y et z seront regroupés dans un même tableau r

17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Optimisation du cache par copie Copie d une partie des données dans un tableau temporaire taille du tableau < 64*taille_page suffisamment petit: réutilisation des données du cache ne peut être pris en charge par le compilateur Performances: diminue les " TLB misses " " L1 et L2 misses " peuvent rester importants Overhead dû à la copie Préférer le " Cache Blocking " lorsque cest possible

17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Recouvrement des latences daccès aux données Par le système pour les faibles latences: Caches primaires Caches secondaires data prefetch Pas intégrée aux langages C et Fortran Insérée automatiquement par le compilateur Manuellement par le programmeur à laide dune directive pour certains compilateurs

17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Alignement des données Alignement « naturel »: lorsque ladresse est un multiple de la taille de la donnée Le compilateur effectue en général cet alignement. Mauvais alignement dans le cas de linstruction EQUiVALENCE et dans les COMMON en Fortran Conseils: Commencer par les données numériques de plus grande taille suivies par les non numériques Utiliser les options dalignement du compilateur …

17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Optimisationde boucles Unrolling Boucles imbriquées Loop interchange Références mémoire Blocking Out-OF-Score

17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Loop Unrolling Diminue loverhead dû à la gestion des boucles Favorise le parallélisme du processeur (pipelining) Mais nécessite une boucle de préconditionnement

17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Les boucles candidates à lunrolling sont Un nombre « raisonnable » dinstructions à chaque itération Petit: overhead de la boucle de préconditionnement, sauf si le nombre ditérations est constant Nombre dinstructions par itération important augmente la taille du code et des accès mémoire Pas dappel de procédures Condition de branchement possible dans le cas de processeur superscalaire (exécution conditionnel) Boucle externe de boucles imbriquées dans certains cas

17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Boucles imbriquées Unrolling : Boucle interne et/ou boucle externe ? stride => favoriser la réutilisation des caches Taille des boucles => favoriser les boucles à grand nombre d'itérations Traitement des boucles non récursives => augmente le taux de parallélisme:

17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Loop Interchange Centrer lactivité sur les boucles les plus internes Minimiser le stride Nécessite une analyse de dépendance Par lutilisateur Par le compilateur Parallélisation automatique Paralléliser sur la boucle externe Unrolling sur la boucle interne

17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Loop Interchange? DO I=1,N DO J=1,N A(J,I)=B(I,J) ENDDO DO J=1,N DO I=1,N A(J,I)=B(I,J) ENDDO Linversion des boucles ne résoud pas les problèmes daccès

17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Cache Blocking Principes: minimiser les transferts utiliser entièrement la ligne de cache réutiliser au maximun les données dans le cache minimiser le nombre de références différentes à des pages physiques (TLB misses) Méthode découper les données en blocs tenant dans le cache ajouter des boucles extérieures qui contrôlent la taille des blocs Cas de la multiplication de grandes matrices: 2 matrices découpées en blocs colonnes 1 matrice en bloc ligne

17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Algorithme de Gauss – DS20 / ES45 Influence de la taille du cache

17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Cache Blocking Exemple: multiplication de deux matrices do j=1,n do i=1,m do k=1,p c(i,j)=c(i,j)+a(i,k)*b(k,j) enddo mnpldaldbldcScsMFLOPS

17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Multiplication de matrices = Accès: Bloc C : 1fois Bloc A : nb colonnes de C Bloc B : nb lignes de A C A B

17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Fusionner les boucles dimension a(n), b(n) do i=1,n a(i)=a(i)+alpha*b(i) enddo dot=0. do i=1,n dot=dot+a(i)*a(i) enddo dimension a(n), b(n) dot=0. do i=1,n a(i)=a(i)+alpha*b(i) dot=dot+a(i)*a(i) enddo

17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry IEEE 754 binary floating point arithmetic Transformation non conforme avec IEEE 754 do i=1,n tmp=1/c b(i)=a(i)/c par do i=1,n enddo b(i)=a(i)*tmp enddo Lordre des opérations peut provoquer des résultats numériques différents (arrondis, overflows…) Lutilisation des resources hardware impose parfois de modifier lordre des opérations (pipelining…) Suivre le standard IEEE 754

17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Optimisations Numériques Précision Architecture 32bits: ~7 décimales Architecture 64bits: ~13 décimales 128bits – options du compilateur: ~30décimales diminution des performances (~50%) utilité de cette précisions ? MADD instruction (ISA du processeur) Accélère les codes dalgèbre linéaire Nadhère pas totalement à la norme IEEE Perte de précision possible

17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Les pointeurs Excellent outil pour construire et manipuler toute sorte de structure de données (listes, arbres,…) MAIS Inhibe certaines optimisations du compilateur par manque dinformation. ==> Optimisation conservative POURTANT Lutilisation de structures de données appropriées peuvent améliorer les performances de certaines applications

17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Efficacité des Entrées/Sorties Utiliser autant que possible des fichiers non formattés Écrire la globalité dun tableau ou dune chaîne de caractères plutôt quélément par élément Écrire le tableau dans son ordre naturel Utiliser la technique de bufferisation pour minimiser le nombre dappels à des E/S Pour MPI, utiliser MPI-IO

17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Méthodologie conseillée Validité du programme à optimiser Utiliser des codes déja optimisés ou sy ramener Utiliser des algorithmes performants Analyser le code, et se concentrer sur les sections critiques Utiliser les capacités doptimiser du compilateur Effectuer des modifications dans le code pour optimiser les sections critiques

17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Utiliser des codes déja optimisés Bibliothèques constructeur HP/COMPAQ: CXML (DXML) IBM : ESSL SGI : SCSL SUN: Performance Library … Bibliothèques domaine public – portable BLAS (1 2 3) LAPACK: algèbre linéaire FFTW : transformée de Fourier ATLAS PETSC GOTO (BLAS) … Bibliothèques commerciales NAG IMSL

17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Utiliser des codes déjà optimisés Serveur Alpha : ES45 CXML (Compaq Extended Math Library) et CXMLP (version parallèle SMP) versions optimisées des BLAS1, 2 et 3 (Basic Linear Algebra) FFT 1,2 et 3-D lapack (système linéaire et valeurs propres) solveurs de systèmes creux 2 versions: Une version séquentielle : libcxml.a Une version parallèle de type SMP : libcxmlp.a

17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Utiliser des codes déjà optimisés SGI: ALTIX 350 SCSL () et SCSLXXX (version parallèle SMP) versions optimisées des BLAS1, 2 et 3 (Basic Linear Algebra) FFT 1,2 et 3-D lapack (système linéaire et valeurs propres) solveurs de systèmes creux... 2 versions: séquentielle et parallèle séquentielle : -lscs, –lscs_i8 parallèle (multi-thread): -lscs_mp, –lscs-i8_mp

17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Utiliser des codes déjà optimisés SUN: cluster de V40Z (quadri-procs) SUN Performance Library (version séquentielle) versions optimisées des BLAS1, 2 et 3 (Basic Linear Algebra) FFT 1,2 et 3-D lapack (système linéaire et valeurs propres) solveurs de systèmes creux... Utilisation -xlic_lib=sunperf parallèle (multi-thread à verifier ):