Analyse de performance et optimisation. David Geldreich (DREAM)



Documents pareils
Analyse de performance, monitoring

Plan global Outils de développement et compilation. Plan. Objectifs des outils présentés. IDE, GCC/Clang, ASAN, perf, valgrind, GDB.

Génération de code binaire pour application multimedia : une approche au vol

Performances et optimisations

Java c est quoi? Java. Java. Java : Principe de fonctionnement 31/01/ Vue générale 2 - Mon premier programme 3 - Types de Programme Java

Évaluation et implémentation des langages

Exigences système Commercial & Digital Printing

Tests de performance du matériel

Concept de machine virtuelle

Machines virtuelles. Brique ASC. Samuel Tardieu Samuel Tardieu (ENST) Machines virtuelles 1 / 40

Java - la plateforme

Mesure de performances. [Architecture des ordinateurs, Hennessy & Patterson, 1996]

Chapitre 2 : Abstraction et Virtualisation

Machines Virtuelles. et bazard autour. Rémi Forax

Institut Supérieure Aux Etudes Technologiques De Nabeul. Département Informatique

Architecture des ordinateurs

Exigences système Edition & Imprimeries de labeur

Vulgarisation Java EE Java EE, c est quoi?

Modélisation des interfaces matériel/logiciel

Cours 1 : La compilation

Éléments de programmation et introduction à Java

Architecture des calculateurs

Annexe : La Programmation Informatique

Machine virtuelle Java pour Palm TX

Limitations of the Playstation 3 for High Performance Cluster Computing

Architectures d implémentation de Click&DECiDE NSI

Vérifier la qualité de vos applications logicielle de manière continue

Eric Bertrand 08/11/06 Maître de conférence 1

Environnements de développement (intégrés)

REALISATION d'un. ORDONNANCEUR à ECHEANCES

Exécution des instructions machine

Documentation d information technique spécifique Education. PGI Open Line PRO

GUIDE D UTILISATION PARTICIPANT

Environnements et Outils de Développement Cours 1 Introduction

Rappels d architecture

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

Drupal : Optimisation des performances

Exigences système Commercial & Digital Printing

Chapitre 4 : Les mémoires

ADMINISTRATION EXADATA

Plan de la conférence. Virtualization. Définition. Historique. Technique. Abstraction matérielle

Systèmes et traitement parallèles

Programmation C. Apprendre à développer des programmes simples dans le langage C

Hiérarchie matériel dans le monde informatique. Architecture d ordinateur : introduction. Hiérarchie matériel dans le monde informatique

Le Network File System de Sun (NFS)

Architecture des ordinateurs

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

Instrumentation de code Java

Algorithmique I. Algorithmique I p.1/??

Le langage C++ est un langage de programmation puissant, polyvalent, on serait presque tenté de dire universel, massivement utilisé dans l'industrie

Gérer ses environnements de développement avec Vagrant RMLL 2012

MODULE I1. Plan. Introduction. Introduction. Historique. Historique avant R&T 1ère année. Sylvain MERCHEZ

SRS DAY: Problématique liée à la virtualisation

Fonctionnement et performance des processeurs

Optimisation de logiciels de modélisation sur centre de calcul

Projet de développement

Travaux pratiques Détermination de la capacité de stockage des données

ÉCOLE POLYTECHNIQUE DE MONTRÉAL. Département de Génie Électrique. La technologie de TEXAS INSTRUMENTS DSP pour le cours Analyse des Signaux ELE2700

Initiation au HPC - Généralités

TP1 : Initiation à Java et Eclipse

Introduction aux systèmes temps réel. Iulian Ober IRIT

11 Février 2014 Paris nidays.fr. ni.com

Plan du cours. Historique du langage Nouveautés de Java 7

en version SAN ou NAS

EXALOGIC ELASTIC CLOUD MANAGEMENT

Machines virtuelles Cours 1 : Introduction

et de suivi de la corpulence des enfants

Mode d emploi pour lire des livres numériques

Initiation. àl algorithmique et à la programmation. en C

Systèmes d exploitation

Exigences système Edition & Imprimeries de labeur

Reproductibilité des expériences de l article "Analyse et réduction du chemin critique dans l exécution d une application"

THEME 1 : L ORDINATEUR ET SON ENVIRONNEMENT. Objectifs

Exécutif temps réel Pierre-Yves Duval (cppm)

Logiciel Libre Cours 3 Fondements: Génie Logiciel

vbladecenter S! tout-en-un en version SAN ou NAS

Leçon 1 : Les principaux composants d un ordinateur

Virtualisation CITRIX, MICROSOFT, VMWARE OLIVIER D.

PLAN. Connexion Mac vers PC. mercredi 15 juillet 2009

Mesurer les performances (CPU) sous Linux

PERFORMANCE BASE DE DONNÉES

Configuration matérielle et logicielle requise et prérequis de formation pour le SYGADE 6

Derrière toi Une machine virtuelle!

Matériel & Logiciels (Hardware & Software)

Zeus V3.XX :: PRE-REQUIS TECHNIQUES

Performances de la programmation multi-thread

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Cours 1 : Qu est-ce que la programmation?

Déploiement d une architecture Hadoop pour analyse de flux. françois-xavier.andreu@renater.fr

Structure de base d un ordinateur

Thème 3 Conception et vérification d architectures de systèmes sur puce

Guide d installation JMap 5.0

Introduction à la Programmation Parallèle: MPI

Retour d expérience RATP. Intégrer le test de performance au cœur du processus de développement agile. Challenges, techniques, résultats.

Java Licence Professionnelle CISII,

Problèmes liés à la concurrence

Table des matières PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS. Introduction

Solution A La Gestion Des Objets Java Pour Des Systèmes Embarqués

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Transcription:

Analyse de performance et optimisation David Geldreich (DREAM)

Plan de l exposé Analyse de performance Outils Optimisation Démonstrations

Analyse de performance Pas d optimisation sans analyse de performance Tout le monde n a pas un P4 @ 3Ghz We should forget about small efficiencies, say about 97% of the time : premature optimization is the root of all evil. Donald Knuth

Analyse de performance : quand? Trouver les parties de code à optimiser Choisir parmi plusieurs algorithmes pour un problème donné Vérifier le comportement attendu à l exécution Comprendre du code inconnu

Analyse de performance : comment? Sur un code complètement implémenté (et aussi testé) Sur une version release (optimisée par le compilateur, ) Avec des données représentatives Le cycle d optimisation :

Que mesure-t-on? Bien comprendre ce qui se passe : OS: scheduling, gestion de la mémoire, disque, réseau Compilateur: optimisation Architecture CPU, chipset, mémoire Bibliothèques utilisées Si une application est limitée par ses I/O, inutile d améliorer la partie calcul. On se limite ici aux performances CPU, mémoire.

Méthodes de mesure Manuel Instrumentation du source Mesure statistique (échantillonnage) Simulation Compteurs hardware

Plan de l exposé Analyse de performance Outils Optimisation Démonstrations

Les outils Timer système (connaître la résolution) Windows: QueryPerformanceCounter/QueryPerformanceFrequency Linux/Unix: gettimeofday Java: System.currentTimeMillis() Compteur CPU Intel : RDTSC (ReaD Time Stamp Counter) gprof / gcc -pg valgrind (callgrind, massif) / kcachegrind IBM Rational quantify Compuware DevPartner Community Edition

Les outils (suite) Oprofile Intel Vtune PAPI (Performance API) JVMPI (Java Virtual Machine Profiler Interface): runhprof, OptimizeIt, JMP (Java Memory Profiler)

Utilisation des outils gprof (instrumentation générée par le compilateur) : compte les appels aux fonctions échantillonnage temporel compilation avec gcc -pg à l exécution création d un fichier gmon.out gprof l : informations sur les lignes Inconvénients pas d échantillonnage de 1 ms résultats pas toujours facile à analyser pour de grosses applis

Utilisation des outils callgrind/kcachegrind : http://kcachegrind.sf.net/ simulateur de cache au dessus de valgrind simulation du fonctionnement du processeur : estimation du nombre de cycle CPU pour chaque ligne de code kcachegrind permet d analyser plus facilement les données Inconvénients les estimations de temps peuvent être inexacte mesure uniquement la partie user du code

Utilisation des outils Utilisation de callgrind/kcachegrind : sur le programme déjà compilé : valgrind --tool=callgrind prog génère un fichier callgrind.out.xxx analyse avec callgrind_annotate ou kcachegrind pour être utilisable malgré sa lenteur : ne pas simuler l utilisation du cache : --simulate-cache=no ne lancer l instrumentation qu au moment utile : --instr-atstart=no / callgrind_control -i on

Utilisation des outils massif (heap profiler) : http://valgrind.kde.org/tools.html tool de valgrind utilisé sur le programme compilé : valgrind --tool=massif prog génère un massif.xxx.ps : graphe d utilisation de la mémoire en fonction du temps massif.xxx.txt : quelle partie de code utilise quoi

Utilisation des outils java/runhprof extension de la JVM Sun java -Xrunhprof:cpu=samples,depth=6,thread=y prog génére un fichier java.hprof.txt analyse avec perfanal : java -jar PerfAnal.jar java.hprof.txt mémoire : java -Xrunhprof:heap=all prog Inconvénients sampling grossier n utilise pas toutes les possibilités de JVMPI

Plan de l exposé Analyse de performance Outils Optimisation Démonstrations

Optimisation Ne pas optimiser trop tôt Garder un code maintenable Ne pas suroptimiser Ensemble de «recettes» validité «limitée» dans le temps spécifique à certains langages

Optimisation (suite) Trouver un meilleur algorithme le facteur constant peut cependant rester important Écrire un bench/test de performance permet de vérifier que la performance ne se dégrade pas Le goulot d étranglement se déplace au fil des optimisations exemple : les E/S peuvent devenir bloquantes

Optimisation (suite) Accès mémoire : première cause de lenteur vitesse processeur progresse plus vite que vitesse mémoire favoriser la localité des accès aux données : utilisation des caches Ordres de grandeur Intel Pentium 4 @ 2.2Ghz, FSB 400Mhz 8 KB L1 data cache : 128 lignes de 64 octets (4-way associative) 12k micro-ops L1 execution cache 512 KB L2 cache : 3 fois plus lent que le cache L1 mémoire : plus de 10 fois plus lente que le cache L1

Optimisation (suite) Utiliser des bibliothèques déjà optimisées Utiliser les flags d optimisation du compilateur Limiter le nombre d appels aux fonctions coûteuses Utiliser des types de données adaptés (float vs double, ) Ordre des tests dans les if : en C/C++, le compilateur n a pas le droit de changer l ordre if (a == 0 && b.getfont() && c.compute())

Optimisation (suite) Laisser le compilateur faire son travail mais aidez-le : sortir le code constant des boucles par exemple : for (i = 0; i < ima.width()*ima.height(); i++){ } donne int ilen = ima.width*ima.height(); for (i = 0; i < ilen; i++) { } Écrire du code clair

Optimisation (suite) Aider les «features» du processeur : branch prediction: mettre en premier le code de plus forte probabilité out-of-bound exec : limiter les chaînes de dépendances dans le code for (i = 0; i < n; i++) a[i] = i*i; for (i = 0; i < n; i++) b[i] = 2*i; donne for (i = 0; i < n; i++) { } a[i] = i*i; b[i] = 2*i;

Optimisation (suite) Utilisation de l assembleur à éviter processeurs récents complexes : le compilateur fait mieux que nous code difficile à lire et maintenir Cas des instructions SIMD mal gérées par les compilateurs Intel: MMX, SSE/SSE2/SSE3 http://developer.intel.com/design/pentium4/manuals/index_new.htm PowerPC: Altivec http://developer.apple.com/hardware/ve/index.html Sparc: Vis http://www.sun.com/processors/vis/

Optimisation : java Comprendre le fonctionnement de la JVM Interprété vs JIT, techno HotSpot java -client vs java -server Principale cause de lenteur : création/destruction d objets Une mine d informations sur la performance en java : http://java.sun.com/docs/performance/

Optimisation : multi-thread, distribué Quand un seul processeur ne suffit plus Parallélisation «automatique» : OpenMP Problématiques spécifiques : source de bugs

Conclusion Ne pas optimiser trop tôt Analyser avant d optimiser Analyser un code «release» sur des données représentatives Garder le code maintenable

Démonstrations gprof callgrind/kcachegrind massif java/runhprof