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 :

Out of memory pour coefficients d'ondelettes


Sujet :

MATLAB

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2013
    Messages : 62
    Points : 61
    Points
    61
    Par défaut Out of memory pour coefficients d'ondelettes
    Bonjour,
    Alors je sais que c'est une question récurrente le problème de mémoire "out of memory" mais je vous sollicite pour essayer d'améliorer mon code afin d'éviter d'être à cours de mémoire.

    Ci-dessous un extrait de mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     disp(['//start adapted wavelet analysis ' datestr(now,'yyyy-mm-dd/HH:MM:SS')])        
            disp(['Signal : ' name_sig ' Wavelet : ' name_wave])
            set(hObject,'str','RUNNING...','backg',[1 .6 .6])
            %%%%%%% Deleting variables for memory
            clear index_selected_sig index_selected_wave item_selected_sig item_selected_wave list_sig list_wave...
                name_sig name_wave signals variable_sig variable_wave waves i
            %%%%%%Wave management
            [coef,scales] = analyse_adapted_wavelet(S,wavelet_sig,0);
            %Tracé des cp (Pourcentage d'énergie)
            cpm = max(coef.^2);
    Mon erreur intervient lors du calcul de la variable cpm, c'est-à-dire le carré de mes coefficients d'ondelettes. La fonction analyse_adapted_wavelet est une fonction à laquelle je fais appel afin de calculer la transformée en ondelettes d'un signal.

    La matrice des coefficients renvoyées est de taille 751*65535.

    En vous remerciant d'avance.


    Mehdi

  2. #2
    Modérateur
    Avatar de le fab
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    1 882
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 882
    Points : 3 432
    Points
    3 432
    Par défaut
    salut

    la solution la plus efficace est le passage en 64 bits, si ce n'est déjà fait
    pour du calcul scientifique, ca me parait indispensable

    Fabien

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2013
    Messages : 62
    Points : 61
    Points
    61
    Par défaut
    C'est vrai que j'ai un ordinateur qui n'est pas très puissant :

    >> memory
    Maximum possible array: 598 MB (6.274e+08 bytes) *
    Memory available for all arrays: 1349 MB (1.414e+09 bytes) **
    Memory used by MATLAB: 418 MB (4.386e+08 bytes)
    Physical Memory (RAM): 3241 MB (3.398e+09 bytes)

    * Limited by contiguous virtual address space available.
    ** Limited by virtual address space available.
    Mais ma question est plus orientée sur le calcul de la puissance au carré de ma matrice, existe-t-il un moyen moins coûteux pour le faire sur Matlab ? Par exemple utiliser sparse ?

  4. #4
    Modérateur
    Avatar de le fab
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    1 882
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 882
    Points : 3 432
    Points
    3 432
    Par défaut
    je continue de répondre à coté

    que l'ordinateur ne soit pas équipé de beaucoup de RAM est une chose
    encore faut il l'exploiter pleinement

    là tu a 4Go ... et tu es en 32bits
    en passant en 64 bits tu utiliserais pleinement ces 4 Go et ne rencontrerais pas ce genre de pb

    le soucis viens du fait que matlab utilise des zones mémoires consécutives pour stocker une donnée (en l'occurence une matrice)
    un système d'exploitation adapté (64 bits) + installation de matlab en version 64 bits permet de disposer de plus grandes zones memoires consécutives

    sinon il faut limiter au plus l'utilisation (et surtout la fragmentation) de la mémoire :
    - ne pas faire tourner d'appli supplementaires
    - tu peux aussi ne pas faire tourner l'IHM de matlab, ni le java
    - éviter les variables intermédiaires
    - utiliser les matrices les plus petites possible (sparse peut aider)
    - utilisation de fonctions imbriquées (nested)

    Fabien

  5. #5
    Membre éprouvé
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Points : 1 277
    Points
    1 277
    Par défaut
    existe-t-il un moyen moins coûteux pour le faire sur Matlab
    Tu peux essayer les diverses factorisations matricielles ( lu() qr() pca() nnmf() ...). une fois factorisé, le calcul de puissance est plus simple (par exemple si tu diagonalises en base ortho. une matrice symétrique S= P'DP, alors S^n= P'D^nP, il suffit d'élever n valeurs propres à la puissance n, et tu peux de plus négliger certains espaces propres). Néanmoins, tu n'as pas la garantie que cela consommera moins de mémoire au global, et les conseils de le fab sont pleins de bons sens

  6. #6
    Membre éclairé
    Homme Profil pro
    Doctorant automatique
    Inscrit en
    Janvier 2012
    Messages
    446
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Doctorant automatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2012
    Messages : 446
    Points : 719
    Points
    719
    Par défaut
    Si tu ne peux pas suivre ces précédents conseils (qui sont de loin les meilleurs), tu peux toujours te farcir une belle boucle for, calculer les carrés 1 à 1 et enregistrer tes résultat dans un énorme fichier
    Je ne réponds pas aux MP techniques. Le forum est là pour ça.
    La raison est simple : il est ennuyeux de répondre à une seule personne, alors que la réponse peut servir à tout le monde.
    Conclusion : n'hésitez pas à utiliser le forum pour poser vos questions.
    Matlab 2005 - ver.7.1.0.183 (R14) Service Pack 3

  7. #7
    Membre éprouvé
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Points : 1 277
    Points
    1 277
    Par défaut
    Effectivement c'est un elementwise matrix.^2, ce que je proposais ne marche que pour du matrix^2.

    Tu peux réduire la conso mémoire en
    - éliminant les niveaux trop fin dans l'ondelette
    - travaillant niveau à niveau plutôt que de tout mettre au carré d'un coup
    - passant les éléments au carré un par un dans un fichier, puis en effaçant ton workspace avant de lire le fichier.

  8. #8
    Membre éclairé
    Homme Profil pro
    Doctorant automatique
    Inscrit en
    Janvier 2012
    Messages
    446
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Doctorant automatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2012
    Messages : 446
    Points : 719
    Points
    719
    Par défaut
    Ah oui, tu avais dit de belles âneries juste avant, VV33D : je n'avais même pas fait attention... comme quoi, je suis vraiment à la masse

    Par contre tu as bien résumé les possibilités envisageables maintenant.
    Je ne réponds pas aux MP techniques. Le forum est là pour ça.
    La raison est simple : il est ennuyeux de répondre à une seule personne, alors que la réponse peut servir à tout le monde.
    Conclusion : n'hésitez pas à utiliser le forum pour poser vos questions.
    Matlab 2005 - ver.7.1.0.183 (R14) Service Pack 3

  9. #9
    Membre éprouvé
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Points : 1 277
    Points
    1 277
    Par défaut
    C'est pas des âneries quand, sans regarder le code, je lis
    le calcul de la puissance au carré de ma matrice

  10. #10
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2013
    Messages : 62
    Points : 61
    Points
    61
    Par défaut
    Merci pour vos conseils et vos réponses !!!!!!

    J'ai choisit une solution simple découper mon signal en plusieurs morceaux ce n'est peut être pas la meilleure mais ça répond à mon besoin et le mon IHM dispose déjà d'un outil découpage je pense que ça va le faire.

    Merci le fab pour ces précieux conseils.


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

Discussions similaires

  1. [Liferay] Profiler pour problème de Out Of Memory
    Par Samaël63 dans le forum Portails
    Réponses: 0
    Dernier message: 22/06/2009, 12h06
  2. Réponses: 2
    Dernier message: 23/07/2007, 16h01
  3. Optimiser un code pour éviter " out of memory"
    Par risack dans le forum MATLAB
    Réponses: 16
    Dernier message: 19/03/2007, 09h36
  4. [JAVA / Out Of Memory] Aide pour optimiser du code
    Par shaun_the_sheep dans le forum Général Java
    Réponses: 7
    Dernier message: 06/02/2007, 09h58
  5. [JBuilder 8] Out of memory problem ...
    Par keros dans le forum JBuilder
    Réponses: 2
    Dernier message: 08/09/2003, 19h03

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