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

Slides:



Advertisements
Présentations similaires
Premier programme en C :
Advertisements

Architecture de machines Le microprocesseur
Rappels C.
GEF 243B Programmation informatique appliquée Types dérivés, structures et tableaux §
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 &
Objectif de l’exposé.
C.
Le Concept du programme enregistré
Analyse et Optimisation de code
13 – 16 Décembre 2005 Laurence Viry Introduction à MPI MPI_2.
17-21 Octobre 2005 Formation Continue - CNRS Laurence Viry Analyse et Optimisation de code Techniques doptimisation.
Outils de développements
Introduction à MPI Types dérivés MPI Décembre 2005
Introduction : Compilation et Traduction
ESIEE Paris © Denis BUREAU I N Initiation à la programmation avec le langage Java.
Les sous-programmes Chapitre n° 5: Objectifs : Activité:
1 ARCHITECTURE DACCÈS la méthode générale modèle de données définitions module daccès / modules métiers construction des modèles les modules daccès, les.
Les bases de l’Algorithmique
Principes de programmation (suite)
CPI/BTS 2 Programmation Web Introduction au PHP
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.
Olivier DERUELLE Erwan FOUYER Maxime JOUIN Rodolphe LOUE
Analyse lexicale Généralités Expressions rationnelles Automates finis
RESUMES Module II1 SOMMAIRE CYCLE 1 : Saisir – Afficher – Données
Architecture des Ordinateurs
Algorithmique et Programmation
Quest-ce quune classe dallocation? Une classe dallocation détermine la portée et la durée de vie dun objet ou dune fonction.
Introduction à la programmation (Java)
F Copyright © Oracle Corporation, Tous droits réservés. Créer des programmes avec Procedure Builder.
Optimisation et parallélisation de code pour processeur à instructions SIMD multimedia François Ferrand.
EPID-CPI-ISAIP Philippe Bancquart - mise à jour 24/02/ page 1 Procédures stockées CPI-SQLServer.
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
Semaine #1 INF130 par Frédérick Henri.
Principes de programmation
Programmation concurrente
CSI3525: Concepts des Languages de Programmation
IFT 6800 Atelier en Technologies d’information
LIFI-Java 2004 Séance du Jeudi 9 sept. Cours 1. La notion de langage Décrire une tâche à effectuer –programme Écrire à un haut niveau –facile pour lutilisateur.
Parallel Programming in C with MPI and OpenMP
Partie II Sémantique.
COURS DE PROGRAMMATION ORIENTEE OBJET :
Détection du meilleur format de compression pour une matrice creuse dans un environnement parallèle hétérogène Olfa HAMDI-LARBI.
L'Unité centrale (CPU) Le CPU doit être rapide (mesuré en temps de CPU) UNITE DE CONTROLE Générer les signaux de control/temps Contrôler le décodage/exécution.
2.1 - Historique Chapitre 2 : Introduction au langage C++
Le langage C Rappel Pointeurs & Allocation de mémoire.
Paradigmes des Langages de Programmation
Programmation Système et Réseau (sous Linux)
Cours Architecture des Systèmes Informatiques
Gérer la sécurité des mots de passe et les ressources
La notion de type revisitée en POO
ALGORITHMIQUE ET PROGRAMMATION C
TD0 - Rappels. Acquis du programme 1 ère année Analyser et modéliser : un problème, une situation ; Imaginer et concevoir : une solution algorithmique.
Créer des packages.
Un survol du language C.
Les modules. Modules Un module est un ensemble de définitions de constantes, de variables et de fonctions réutilisables de projet en projet. Le langage.
Le langage Racket (Lisp)
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.
Projet de Fin d’Etudes – Optimisation SSE 1/28. 1) Présentation du Stage 2) Les instructions SSE 3) Algorithme DSP Audio Conclusion 2/28 Projet de Fin.
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.
Cours LCS N°4 Présenté par Mr: LALLALI
Classe 1 CSI2572 Autres modificateurs de déclaration de variables: & volatile & register & static & auto & extern & const volatile Indique au compilateur.
PROJET CAPS Compilation, Architecture, Processeurs Superscalaires et Spécialisées.
3 Copyright © Oracle Corporation, Tous droits réservés. Créer des fonctions.
Création et Optimisation de Modules Audio avec les instructions SSE
Exemple d’utilisation de l’outil de profilage prof La commande prof de Unix.
1.1: notions de bases de l’informatique
Java Réalisé par: Mouna POKORA. PLAN: Définition : Historique: Caractéristiques: un langage orienté objet: un langage interprété : un langage portable:
Transcription de la présentation:

17-21 Octobre 2005 Formation Continue - CNRS Laurence Viry Analyse et Optimisation de code Optimisation Compilateur Optimisation manuelle

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 Laisser faire le compilateur Idéallement, le compilateur optimise automatiquement le code. Il na pas toujours assez dinformations (taille des données connue au run-time,…) Cache performance Optimisations principales Utilisation du parallélisme dinstructions Software pipelining Inlining Analyse Interprocédurale Optimisation des accès mémoire Optimisation de boucles

17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Structure du compilateur Front-end: Objectifs: Analyse syntaxique et logique du programme, Transformation en un code intermédiaire prêt à loptimisation Dépendances: Langage dépendant, Machine indépendante Optimisation Haut-Niveau Objectifs: Transformations de boucles, inlining,… Dépendances Quelques dépendances avec le langage Très dépendant de larchitecture (cache, ISA,…)

17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Structure du compilateur (suite) Optimisation globale Objectifs: optimisations globales et locales + allocation des registres … Dépendances:quelques dépendances avec larchitecture (nb registres,…) Génération de lexécutable Objectifs: Sélection des instructions (ISA) Optimisations adaptées à larchitecture de la machine Dépendances: Indépendant du langage Fortement dépendant de la machine

17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Options de base Compilateur INTEL Plus n grand: Plus loptimisation est sophistiquée Plus le temps de compilation est important Plus la taille du code peut devenir grande Options de base On, n=0,…3 -O0: désactive les optimisations -O1 : optimisation des performances tout en préservant la taille du code. Adaptée à de gros codes comprenant de nombreux branchements et des boucles peu volumineuses -O2 : par défaut en labsence de –g. Gestion globale du code, spéculation, prédiction... -O3 : -O2 + optimisation plus agressives concernant les accès mémoire et la gestion des boucles -fast : active toutes les optimisations -O3 et –ipo sur tout le code

17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Compilateur INTEL: -02 Option recommandée dans la plupart des cas Gestion globale du code Software pipelining Prédiction Spéculation Élimination du code non utilisé Allocations des registres globaux Traitement de la récursivité …

17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Compilateur INTEL: -03 -O2 + « High Level Optimisations » High Level Optimisations (HLO) Gestion des boucles (loop interchange, loop fusion, loop unrolling,…) Prefetching Scalar replacement … Adaptée aux applications utilisant de grandes boucles de calculs flottants, et de gros jeux de données Peut modifier les résultats, les modifications ne respectent pas toujours la norme IEEE

17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Compilateur INTEL: -fast Méthode simple pour utiliser toutes les optimisations du compilateur -O3 -ipo (Analyse interprocédurale) -static: édition de liens avec les bibliothèques partagées Certaines options peuvent être désactivées Ex: -O0, -unroll0, -IPF_fltacc-, -IPF_fma-,…

17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Désactiver des optimisations -O0: désactive toutes optimisations -g: loption doptimisation par défaut devient – O0 -mp: ne retient que les optimisations qui ne provoquent pas de pertes de précision dans les calculs flottants (conforme aux standards ANSI et IEEE) -nolib_inline: désactive linlining des fonctions intrinsèques …

17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Rapport doptimisation - INTEL -opt_report: génère un rapport doptimisation -opt_report_file : dans le fichier « fich » Sur STTERR sans option –opt_report_file -opt_report_level{min|med|max}: niveau de précision du rapport (min par défaut) -opt_report_routine [substring]: génère un rapport sur Toutes les routines dont le nom contient substring Toutes les routines en labsence de substring -opt_report_phase : spécifie le type doptimisation à analyser phase: ipo,hlo,ilo,ecg,all

17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Arithmétique flottante (INTEL) -mp Options: limite les optimisations sur le calcul flottant pour conserver la précision déclarée -ftz[-] : « flush to zero » underflow [désactive] automatiquement à ON avec –O3 sur Itanium et –O2 sur IA32 ex: ifort –O3 –ftz- -o prog prog.f -fpen {n=0,1,3}: contrôle les « exceptions handling »

17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Arithmétique flottante (Itanium) -IPF_fltacc[-] : active [désactive] des optimisations qui peuvent affecter la précision des calculs flottants IPF_fma[-] : active [désactive] lutilisation des instructions MADD IPF_fp_speculationfast : « agressives » spéculations sur les opérations arithmétiques IPF_fp_speculationsafe : « conservatives » spéculations sur les opérations arithmétiques IPF_fp_speculationoff : désactives les spéculations sur les opérations arithmétiques IPF_fp_speculationstrict :désactives les spéculations sur les opérations arithmétiques

17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Software Pipelining - INTEL Options de base doptimisation -O1 ne fait pas de software pipelining (préserve la taille du code) -O2 (par défaut) et –O3 fait du software Pipelining = > augmente le temps de compilation Aide au compilateur:directives de compilation !DEC$ SWP ou !DEC$ NOSWP avant la boucle !DEC$ LOOP COUNT [n] !DEC$ DISTRIBUTE POINT: !DEC UNROLL[n] Le rapport doptimisation (-opt_report) indique ou le software pipelining a été utilsé

17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Software Pipelining – INTEL Exemple !DEC$ SWP do i=1,n if (c(i).eq. 0) then b(i)=a(i)+1 else b(i)=a(i)/c(i) endif enddo

17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Contrôle de lInlining - INTEL Par le compilateur: -O2: inlining des fonctions intrinsèques -O3: inlining de certaines fonctions utilisateur -Minline: active linlining -Minline=name:FUNC Minline=size:NNN Compromis entre : La taille du code La fréquence des appels Par une directive #pragma inline (id,…) ou #pragma noinline(id,…) en C et C++

17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry IPA – compilateur Intel Phase de compilation Stocke une représentaion intermédiaire (IR) du code source dans le module objet ( mock objet file ) LIR contient des informations qui seront utilisées pour loptimisation Phase dédition de liens Dernière phase de compilation IPA sur tous les fichiers qui contiennent une IR Effectue la compilation individuelle en utilisant les informations stockées dans les IR Edition de liens

17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry IPA – compilateur Intel Options: -ip: sur un seul fichier -ipo: sur plusieurs fichiers -O0: pour désactiver lIPA Commandes ifort –ipo –c a.f90 b.f90 c.f90 puis ifort –o prog a.o b.o c.o ifort –o prog a.f b.f c.f -auto_ilp32 sur les processeurs Itanium Nécessite une analyse inter-procédurale Le compilateur utilisera des pointeurs 32 bits si lapplication utilise un espace qui le permet -auto_ilp32 et -ipo

17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Alignement des données -align : alignement sur les frontières naturelles des composants dun common, dun type dérivé ou dune structure denregistrement common: alignement sur les frontières multiples de 4 Bytes dcommon: alignement sur les frontières multiples de 8 Bytes sequence, record… -align recnbyte (-Zp[n]) alignement des composants dune structure sur n des frontières de n bytes -align : alignement naturel des variables figurant dans un common …

17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Rappel: Transformation de boucles Les différents types de transformation de boucles loop unrolling Loop interchange Padding Loop Fusion or Fission Cache blocking Prefetching La connaissances des techniques permet d aider le travail du compilateur

17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Transformations de boucles - INTEL Effectuées par le compilateur : -O3 Directives de compilation aide le compilateur pour la gestion des dépendances Optimisation de lutilisation des caches, de la gestion des instructions Son action est suffisante pour la plupart des programmes Optimisation du compilateur inhibée par Boucles sans compteur Appel de sous-programmes ou de fonctions sans inlining Condition de sortie non standard Aliasing (pointeurs)

17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Automatique prefetching Réduire la latence des accès mémoire Options du compilateur: -prefetch avec –O3 Procédure intrinsèque: MM_PREFETCH Directives de compilation: !DEC$ PREFETCH et NOPREFETCH Exemple...!DEC$ NOPREFETCH c !DEC PREFETCH a do i=1,n b(i)=a(c(i))+1 enddo... ifort –O3 –prefetch...prog.f

17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Aider le compilateur Recherche des dépendances Dépendances entre les itérations dune boucle Options de compilation: -ivdep_parallel Directive de compilation: !DIR$ IVDEP Exemple: !DIR$ IVDEP do j=1,n a(b(j))=a(b(j))+1 enddo ifort –O3 –ivdep_parallel … prog.f

17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Optimisation spécifique à un processeur Intel Pentium -tpp5: génère du code pour Pentium -tpp6: génère du code pour Pentium Pro II/III -tpp7: génère du code pour Pentium 4 -xi : génère du code - support pentium ProII -xW : génère du code – Pentium 4 extensions -xK : génère du code – SSE extensions Itanium -tpp1: génère du code pour Itanium(Merced) -tpp2: génère du code pour Itanium(MacKinley)

17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Profile-Guided Optimizations (PGO) Compilation + Instrumentalisation du code ifort –prof_gen a.f Exécution du code instrumenté a.out Feedback Compilation ifort –prof_use …a.f Exécutable instrumenté a.out Fichier dynamique contenant les informations de profiling xxxxxx.dyn Code optimisé Utilise le fichier xxxxxx.dyn et Crée le fichier dynamique dinformations : pgopti.dpi

17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Options recommandées - INTEL Intel Pentium Pro II/III – AMD Athlon ifort/icc/icpc -O3 –ipo –tpp6 –axiK…. Intel Pentium 4 /Xeon ifort/icc/icpc -O3 –ipo –tpp7 -axiKW Intel Itanium (Merced) ifort/icc/icpc -O3 –ipo –tpp1 -ftz Intel Itanium (McKinley) ifort/icc/icpc -O3 –ipo –tpp2 -ftz

17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Optimisations Manuelles Appels de sous-programmes Utilisation des macros en C/C++ Inlining Traitement des branches Elimination de sous-expressions Conversion de types...

17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Obstacles à la performance Ce qui contribue à loverhead Appel à une routine Référence indirecte à la mémoire Tests à lintérieur dune boucle Conversion de type Variables non utilisées Tests trop verbeux Ce qui restreint la capacité doptimiser du compilateur Appel à une routine Référence indirecte à une procédure Tests à lintérieur dune boucle Pointeurs ambigus

17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Appels de sous-programmes Réduit la capacité du compilateur à optimiser Pas de software pipelining Gestion des variables externes et des commons lourde Compromis entre: La taille de la routine Le nombre dappels Conseils: Éviter un nombre faible dappels à une petite routine Modularité indispensable pour le développement de gros codes compactes et compréhensibles

17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Appel de procédures (suite) préférer DO I=1,N A(I)=A(I)+B(I)*C ENDDO À DO I=1,N CALL MADD(A(I),B(I),C) ENDDO SUBROUTINE MADD(A,B,C) A=A+B*C RETURN END éviter COMMON /UTIL/K DO K=1,1000 IF (K.EQ. 1) CALL AUX ENDDO K variable de common: le compilateur stocke en mémoire et recharge K à chaque itération Conserver k comme variable locale

17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Macros Principalement utilisées en C: concerne surtout les petites fonctions #define average(x,y)((x+y)/2) main () { float q=100,p=500; float a; a=average(p,q); …} 2 étapes: Pré-compilation par cpp: remplace les macros par leur code Compilation C ou Fortran Le compilateur C effectue les deux étapes automatiquement, certains compilateurs fortran également.

17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry INLINING Concernent les fonctions de taille plus importante que les macros Selon le compilateur, plusieurs méthodes Spécifier les procédures concernées à la compilation Mettre dans le code des directives Laisser le compilateur faire le travail automatiquement Compromis entre la taille du code et les performances (réutilisation optimale du cache instructions)

17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Branchement Méthode: Réduire les branchements si cest possible Les sortir de certains blocs (boucles,…) Branchement à lintérieur dune boucle Invariant conditionnel dans la boucle Condition sur lindex de boucle=> restructuration du code Instruction conditionnelle indépendante => unrolling, exécution en parallèle Instructions conditionnelles dépendantes=> conservation de lordre Réductions => Laisser faire le compilateur Condition de transfert de contrôle

17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Branchement à lintérieur dune boucle parameter (small=1.E-20) do i=1,n if (abs(a(i)).ge. small) then b(i)=b(i)+a(i)*c endif enddo => Éliminer le test pour permettre le software pipelining

17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Invariant conditionnel dans la boucle DO I=1,K IF (N.EQ. 0) THEN A(I)=A(I)+B(I)*C ELSE A(I)=0. ENDIF ENDDO Préférer: IF (N.EQ. 0) THEN DO I=1,K A(I)=A(I)+B(I)*C ENDDO ELSE DO I=1,K A(I)=0. ENDDO ENDIF

17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Expression conditionnelle indépendante DO I=1,N DO J=1,N IF (B(J,I).GT. 1.0) A(J,I)=A(J,I)+B(J,I)*C ENDDO Indépendance des itérations => Unrolling ou exécution en parallèle possible

17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Condition de transfert de contrôle DO I=1,N DO J=1,N IF (B(I,J).EQ. 0) THEN PRINT*,I,J STOP ENDIF A(I,J)=A(I,J)/B(I,J) ENDDO Utiliser les procédés de récupération derreur (standard IEEE ) – option à la compilation

17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Autres obstacles Conversion de type Eviter les expressions de type caractère dans les expressions conditionnelles Effectuer ses propres éliminations de sous- expressions Le compilateur ne les reconnaît pas toutes Ne gère pas celles qui contiennent des appels de fonctions Effectuer ses propres déplacements de code Partie invariante dans une boucle Références multiples à un même élément de tableau On a pas toujours intérêt à le remplacer par une variable scalaire

17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Elimination de sous-expressions x=r*sin(a)*cos(b) y=r*sin(a)*sin(b) z=r*cos(a) devient temp=r*sin(a) x=temp*cos(b) y=temp*sin(b) z=r*cos(a) Le compilateur ne fait pas lélimination dexpression avec appel de fonction

17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Déplacement de code DO I=1,N A(I)=A(I)/SQRT(X*X+Y*Y) ENDDO Devient TEMP=1./SQRT(X*X+Y*Y) DO I=1,N A(I)=A(I)*TEMP ENDDO