Contenu principal

Profiler votre code pour améliorer les performances

Qu’est-ce que le profilage ?

Le profilage permet de mesurer le temps d’exécution de votre code et de savoir où MATLAB® passe le plus de temps. Une fois que vous avez identifié les fonctions qui prennent le plus de temps, vous pouvez les évaluer pour éventuellement améliorer leurs performances. Vous pouvez également profiler votre code pour identifier les lignes de code qui ne s’exécutent pas. Cette fonctionnalité est utile pour développer des tests pour votre code ou comme outil de débuggage pour isoler un problème dans votre code.

Vous pouvez profiler votre code de manière interactive avec MATLAB Profiler ou de manière programmatique avec la fonction profile. Pour plus d’informations sur le profilage programmatique du code, consultez profile. Si vous profilez du code qui s’exécute en parallèle, utilisez le profileur parallèle de Parallel Computing Toolbox™ pour obtenir des résultats optimaux. Pour de plus amples informations, veuillez consulter Profiling Parallel Code (Parallel Computing Toolbox).

Conseil

Le code optimisé trop tôt peut être inutilement complexe sans apporter de réels gains de performances. Veillez à ce que votre première implémentation soit aussi simple que possible. Ensuite, si la vitesse pose problème, utilisez le profilage pour identifier les goulots d’étranglement.

Profiler votre code

Pour profiler votre code et améliorer ses performances, appliquez le processus général suivant :

  1. Exécutez Profiler sur votre code.

  2. Passez en revue les résultats du résumé du profil.

  3. Examinez les fonctions et les lignes de code individuelles.

    Par exemple, vous pouvez examiner les fonctions et lignes de code qui prennent beaucoup de temps ou qui sont appelées le plus souvent.

  4. Enregistrez les résultats du profilage.

  5. Implémentez des améliorations de performances potentielles dans votre code.

    Par exemple, si une instruction load figure dans une boucle, vous pouvez peut-être déplacer cette instruction load en dehors de la boucle pour l’appeler une seule fois.

  6. Enregistrez les fichiers et exécutez clear all. Réexécutez Profiler et comparez les résultats à ceux d’origine.

  7. Répétez les étapes ci-dessus pour continuer d’améliorer les performances de votre code. Lorsque le code passe la plus grande partie du temps à appeler quelques fonctions prédéfinies, vous l’avez probablement optimisé au maximum.

Exécuter Profiler sur votre code

Pour exécuter Profiler sur une ligne de code :

  1. Ouvrez Profiler en accédant à l’onglet Apps et en cliquant sur l’icône de l’application Profiler sous MATLAB. Vous pouvez également saisir profile viewer dans la fenêtre de commande.

  2. Accédez à l’onglet Profiler et dans la section Profile, saisissez le code à profiler dans la zone d’édition.

    Par exemple, créez une fonction solvelotka.m qui détermine les pics de population de proies et de prédateurs pour l’exemple de Lotka-Volterra proposé avec MATLAB :

    function [preypeaks,predatorpeaks] = solvelotka(t0, tfinal, y0)
        [~,y] = ode23(@lotka,[t0 tfinal],y0);
        
        preypeaks = calculatepeaks(y(:,1));
        predatorpeaks = calculatepeaks(y(:,2));
        
    end
    
    function peaks = calculatepeaks(A)
        [TF,P] = islocalmax(A);
        peaks = P(TF);
    end
    Saisissez l’instruction suivante dans la zone d’édition pour profiler la fonction solvelotka :
    [preypeaks,predatorpeaks] = solvelotka(0,15,[20;20])

    Si vous avez déjà profilé cette instruction dans la session MATLAB en cours, vous pouvez aussi la sélectionner dans la liste déroulante de la zone d’édition.

  3. Cliquez sur Run and Time.

    Lorsque le profilage est terminé, Profiler affiche les résultats dans « Profile Summary ». Les instructions profilées s’affichent également comme exécutées dans la fenêtre de commande.

Pour profiler un fichier de code ouvert dans l’éditeur, accédez à l’onglet Editor et dans la section Run, sélectionnez Run > Run and Time. L’outil Profiler profile le fichier de code ouvert dans l’onglet « Editor » actuel et affiche les résultats dans « Profile Summary ».

Passer en revue les résultats du résumé du profil

Une fois que vous avez exécuté Profiler sur votre code, le résumé du profil présente des statistiques sur l’exécution générale de votre code ainsi que des statistiques sommaires pour chaque fonction appelée. Par exemple, l’image ci-dessous montre le résumé du profil de la fonction solvelotka.

Profiler window with the Profile Summary showing a flame graph of the solvelotka function and a table showing the run times for each function called

En haut des résultats du résumé du profil, un graphique de type flamme donne une représentation visuelle du temps mis par MATLAB pour exécuter le code. Chaque fonction exécutée est représentée par une barre dans le graphique de type flamme. Les fonctions définies par l’utilisateur s’affichent en bleu et les fonctions MathWorks® en gris.

Le graphique affiche les fonctions dans l’ordre hiérarchique, avec les fonctions parentes en bas et les fonctions enfants en haut. La barre libellée Profile Summary qui occupe toute la largeur en bas du graphique représente tout le code exécuté. La largeur d’une barre du graphique représente le temps d’exécution de la fonction en pourcentage du temps d’exécution total.

Pour afficher les valeurs de pourcentage et de durée en plus du nom complet de la fonction, passez le curseur de la souris sur la barre du graphique. Pour afficher des informations détaillées sur une fonction, y compris sur les lignes de code individuelles, cliquez sur la barre qui représente cette fonction.

Flame graph of the solvelotka function with a tooltip showing the actual percentage and time values of the solvelotka>calculatepeaks function

La table des fonctions sous l’encadré du graphique affiche les mêmes informations que celui-ci. Au départ, les fonctions s’affichent dans l’ordre de leur temps de traitement. Le tableau suivant décrit les informations de chaque colonne.

ColonneDescription
Function Name

Nom de la fonction appelée par le code profilé.

Calls

Nombre de fois où le code profilé a appelé la fonction.

Total Time

Temps total passé dans la fonction, en secondes. Le temps de la fonction inclut le temps passé dans les fonctions enfants. L’exécution de Profiler nécessite elle-même du temps qui est inclus dans les résultats. Le temps total peut être nul pour les fichiers dont le temps d’exécution est insignifiant.

Self Time

Temps total en secondes passé dans une fonction sans compter le temps passé dans les fonctions enfants. Ce temps propre à la fonction inclut également le temps supplémentaire résultant du processus de profilage.

Total Time Plot

Représentation graphique du temps propre à la fonction comparé au temps total.

Pour trier la table des fonctions selon une colonne spécifique, cliquez sur la flèche dans l’en-tête de la colonne. Par exemple, cliquez sur la flèche dans la colonne Function Name pour trier les fonctions par ordre alphabétique. Au départ, les résultats s’affichent dans l’ordre du temps total indiqué dans Total Time. Pour afficher des informations détaillées sur une fonction, y compris sur les lignes de code individuelles, cliquez sur son nom.

Examiner les fonctions et les lignes de code individuelles

Pour identifier des possibilités d’amélioration dans votre code, recherchez dans la table des fonctions ou le graphique de type flamme les fonctions qui prennent beaucoup de temps ou qui sont appelées le plus souvent. Cliquez sur le nom d’une fonction pour afficher des informations détaillées sur celle-ci, y compris sur les lignes de code individuelles. Par exemple, cliquez sur la fonction solvelotka>calculatepeaks. L’outil Profiler affiche des informations détaillées sur celle-ci.

Profiler window showing detailed information for the solvelotka>calculatepeaks function, including a flame graph, a table of calling functions, and a table of lines that take the longest to run

En haut de la page, à côté du nom de la fonction actuelle, Profiler affiche le nombre de fois où celle-ci a été appelée par une fonction parente ainsi que le temps total passé dans la fonction. Utilisez les liens disponibles sous le graphique de type flamme pour ouvrir la fonction dans votre éditeur par défaut ou pour copier les résultats affichés dans une fenêtre distincte.

Pour revenir au résumé du profil, accédez à l’onglet Profiler et cliquez sur le bouton Profile Summary. Vous pouvez également cliquer sur la barre Profile Summary en bas du graphique de type flamme.

Lorsque vous cliquez sur une fonction spécifique, Profiler affiche des informations complémentaires dans les sections suivantes :

SectionDétails
Flame Graph

Graphique de type flamme donnant une représentation visuelle du temps mis par MATLAB pour exécuter la fonction profilée. Le graphique affiche la hiérarchie de la fonction profilée, y compris les fonctions enfants (au-dessus de la fonction actuelle) et les fonctions parentes (en dessous de la fonction actuelle). Les fonctions définies par l’utilisateur s’affichent en bleu () et les fonctions MathWorks en gris ().

Pour afficher les valeurs de pourcentage et de durée en plus du nom complet de la fonction, passez le curseur de la souris sur la barre du graphique. Cliquez sur la barre représentant une fonction pour afficher des informations détaillées sur cette dernière.

Parents

Liste des fonctions qui appellent la fonction profilée avec le nombre de fois où la fonction parente a appelé la fonction profilée.

Cliquez sur le nom d’une fonction dans la liste pour afficher des informations détaillées sur celle-ci.

Lines that take the most time

Liste des lignes de code de la fonction profilée qui ont nécessité le temps de traitement le plus long.

Cliquez sur une ligne de code pour l’afficher dans la section Function Listing dans le contexte du reste du code de la fonction.

Children

Liste de toutes les fonctions appelées par la fonction profilée.

Cliquez sur le nom d’une fonction dans la liste pour afficher des informations détaillées sur celle-ci.

Code Analyzer results

Liste des problèmes et des améliorations potentielles de la fonction profilée.

Coverage results

Statistiques de couverture du code concernant les lignes de code de la fonction exécutées par MATLAB pendant le profilage.

Pour effectuer une analyse plus poussée de la couverture de votre code, consultez Collect Statement and Function Coverage Metrics for MATLAB Source Code.

Function listing

Code source de la fonction si c’est un fichier de code MATLAB.

Pour chaque ligne de code, Function listing comprend les colonnes suivantes :

  • Temps d’exécution de chaque ligne de code

  • Nombre de fois où MATLAB a exécuté la ligne de code

  • Numéro de la ligne.

    Cliquez sur un numéro de ligne dans Function listing pour ouvrir la fonction dans votre éditeur par défaut.

  • Code source de la fonction. La couleur du texte indique ce qui suit :

    • Vert : lignes de commentaire

    • Noir : lignes de code exécutées

    • Gris : lignes de code non exécutées

Par défaut, Profiler met en surbrillance les lignes de code dont le temps d’exécution est le plus long. Plus la mise en surbrillance est sombre, plus la ligne de code a mis du temps à s’exécuter. Pour modifier les critères de mise en surbrillance, accédez à l’onglet Profiler et dans la section View, cliquez sur Highlight . Choisissez parmi les options de mise en surbrillance disponibles. Par exemple, pour mettre en surbrillance les lignes de code non exécutées, sélectionnez l’option Non coverage.

Enregistrer vos résultats

Pour comparer l’impact des modifications après avoir amélioré votre code, enregistrez vos résultats de profilage. Pour ce faire, utilisez le lien disponible sous le graphique de type flamme pour copier les résultats affichés dans une fenêtre distincte.

Flame graph of the solvelotka function and the "Copy to new window for comparing multiple runs" link underneath it, circled in red

Vous pouvez également imprimer vos résultats à partir de Profiler en accédant à l’onglet Profiler et en cliquant sur le bouton Print.

Profiler plusieurs instructions dans la fenêtre de commande

Pour profiler plusieurs instructions dans la fenêtre de commande :

  1. Accédez à la fenêtre de commande et saisissez profile on.

  2. Saisissez et exécutez les instructions à profiler.

  3. Après avoir exécuté toutes les instructions, saisissez profile off.

  4. Ouvrez Profiler en saisissant profile viewer. Vous pouvez également accéder à l’onglet Apps et cliquer sur l’icône de l’application Profiler sous MATLAB.

  5. Passez en revue les résultats du résumé du profil.

Profiler une application

Vous pouvez profiler les applications que vous créez dans App Designer. Vous pouvez également profiler les applications disponibles dans les produits MathWorks telles que l’outil Filter Design and Analysis inclus dans Signal Processing Toolbox™.

Pour profiler une application :

  1. Ouvrez Profiler en accédant à l’onglet Apps et en cliquant sur l’icône de l’application Profiler sous MATLAB. Vous pouvez également saisir profile viewer dans la fenêtre de commande.

  2. Dans la section Profile de la barre d’outils de Profiler, cliquez sur Start Profiling. Assurez-vous que la zone d’édition à droite du bouton ne contient aucun code.

  3. Démarrez l’application.

  4. Utilisez l’application.

  5. Lorsque vous avez terminé, cliquez sur Stop Profiling dans la barre d’outils de Profiler.

  6. Passez en revue les résultats du résumé du profil.

Remarque

Pour exclure le processus de démarrage de l’application du profilage, inversez les étapes 2 et 3. En d’autres termes, démarrez l’application avant de cliquer sur Start Profiling.

Voir aussi

Applications

Fonctions

Rubriques