IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MATLAB Discussion :

augmentation du temps d'éxécution avec hold


Sujet :

MATLAB

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 171
    Par défaut augmentation du temps d'éxécution avec hold
    Bonjour

    J'utilise la fonction suivante pour afficher une image avec des scatters superposés.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    function display_aniso1 ( rdat, adat, t)
    tic;
    im0 = imread ([rdat.stack_folder, rdat.stack_name],t);
    hold
    colormap (gray);
    axis image
    imagesc (im0);
     
     scatter (rdat.tab_j(t, adat.ani(find(adat.pol_c(:, 3) == 0), 5)),...
         rdat.tab_i(t, adat.ani(find(adat.pol_c(:, 3) == 0), 5)),...
         5,'b');
     
    hold
    toc;
    end %fct_display_aniso1
    Cette fonction est appelé par le callback d'un slider de mon interface graphique. Seulement le temps d'exécution de la fonction augmente à chaque utilisation. En annotant alternativement les différents éléments de la fonction, je me suis rendu compte que le temps d'exécution reste constant si les hold sont annotés.

    Quelqu'un saurait-il pourquoi? et s'il est possible d'y remédier?

    Merci d'avance!

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 171
    Par défaut
    petite précision chaque fois que je redémarre l'interface graphique le temps d'exécution de la fonction est 'reseté' et ré augmente après. Il doit y avoir une histoire de tableau qui grandit....

  3. #3
    Expert confirmé
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Par défaut
    Ta fonction c'est une fonction à part (dans son propre fichier), une sous-fonction ou une fonction imbriquée ?
    Il n'y a que dans le dernier cas que ton hypothèse pourrait se vérifier.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 171
    Par défaut
    c'est une fonction séparée (un fichier .m différent de celui de l'interface graphique). Par contre ce fichier est appelé au sein d'une fonction imbriqué : le call back d'un slider, que voici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    function slider1 (obj, event)
     
        t = round(get (s_slider1, 'value'));    
     
        axes (a_img1);
        colormap (gray);
     
        bool = 0;
     
        if get(cb_MSD,'value')==1
            fprintf ('not implemented yet!\n');
            bool = 1;
        end %cb_MSD
        if get(cb_nu, 'value') == 1
            fprintf ('not implemented yet!\n');
            bool = 1;
        end %cb_Nu
        if get(cb_aniso, 'value') == 1
            fct_display_aniso (rdat, adat, t);
            bool = 1;
        end %cb_aniso
        if bool == 0
            stack0 = imread([rdat.stack_folder, rdat.stack_name], t);
            imagesc(stack0);
        end
     
        end% Slider function

  5. #5
    Expert confirmé
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Par défaut
    Le truc c'est que tu utilises les HOLD pour que MATLAB conserve les graphes précédents je suppose ?
    Donc forcément au fur et à mesure il a de plus en plus de données à gérer et ça doit le ralentir.

    As-tu essayé d'utiliser le PROFILER pour voir ce qui prenait le plus de temps et si tu pouvais essayer ainsi d'optimiser le code.
    Par exemple je ne suis pas sure que les FIND soit nécessaire, tu peux utiliser l'indexage logique.
    En plus tu fais 2 fois le même calcul ce serait mieux d'utiliser une variable intermédiaire dans ce cas.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 171
    Par défaut
    Pour l'indexage logique je découvre et je vais l'utiliser merci!

    Pour ce qui est du temps d'exécution j'ai remarqué qu'il augmenté à chaque appel même pour cette fonction où les hold sont inutiles.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function display_aniso1 ( rdat, adat, t)
    tic;
    im0 = imread ([rdat.stack_folder, rdat.stack_name],t);
    hold
    colormap (gray);
    axis image
    imagesc (im0);
     
    hold
    toc;
    end %fct_display_aniso1
    et si j'enlève les hold le temps d'exécution est alors constant.
    Qui plus est, je ne sais pas ce qu'il stocke en plus, j'aurais tendance à penser qu'une fois la fonction exécutée les variables utilisées sont effacées et ou n'entre plus en compte lors de l'exécution suivante.
    J'ai même rajouté un clear all en fin de fonction pour m'en assurer, mais rien n'y fait.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 04/02/2013, 16h48
  2. [Wamp] Augmenter le temps avec Wamp
    Par Sebe dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 6
    Dernier message: 17/03/2009, 10h24
  3. [Web Service] Programme avec un long temps d'éxécution
    Par whism dans le forum Général Dotnet
    Réponses: 2
    Dernier message: 02/06/2008, 21h30
  4. limit et temps d'execution avec oracle et PHP
    Par dor_boucle dans le forum Oracle
    Réponses: 20
    Dernier message: 10/12/2005, 15h31
  5. [MFC] : CTime ? Calcul de temps d'éxécution
    Par jonzuzu dans le forum MFC
    Réponses: 10
    Dernier message: 25/05/2004, 15h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo