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 :

gestion des variables en mémoire


Sujet :

MATLAB

  1. #1
    Membre éclairé Avatar de tubaas
    Homme Profil pro
    Acousticien
    Inscrit en
    Août 2009
    Messages
    641
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Acousticien
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2009
    Messages : 641
    Points : 825
    Points
    825
    Par défaut gestion des variables en mémoire
    bonjour.
    j'arrive aux limites de ce que je sais programmer, notamment en ce qui concerne la gestion de la mémoire. jusqu'à présent je ne m'en préoccupais pas mais je suis quand même limité (1Go) et c'est mieux de gérer comme il faut. le problème est que je ne sais pas du tout comment m'y prendre.
    il faut donc que j'arrive à concevoir mon programme sous cet angle là. pour cela il m'est nécessaire de connaître les options qui s'offrent à moi.
    je suppose qu'il faut alors sauvegarder sur le disque.
    j'ai bien consulter la rubrique 'memory usage' de la doc mais je n'ai pas trop d'idée sur la bonne façon de programmer (les bases).
    faut-il créer des fichiers .mat avec les variables ?
    faut-il utiliser le memory mapping ?
    un problème un peu différent, toujours pourla mémoire, est que j'ai programmé quelque chose qui se voudrait lecteur audio et qui utilise des objets audioplayer. le problème est que je crée les données pour l'audioplayer, que j'en crée plusieurs et que toue cela est stocké... en mémoire. pour cela j'avais pensé à des fichiers temporaires mais peut-être vaut-il mieux que je le pense totalement différemment ?
    beaucoup de questions très floues (puisque je n'arrive pas vraiment à cerner les solutions) donc je recherche de la doc ou des conseils de programmation.
    merci

  2. #2
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 52 884
    Points
    52 884
    Par défaut
    Une réponse un peu tardive... mais je vais essayer d'expliquer les choses clairement et simplement (si possible) car tu n'es pas le seul à te poser ce genre de question

    La mémoire totale dont tu disposes sur ton ordinateur s'appelle la mémoire virtuelle.

    Elle est composé de la totalité de la mémoire physique ou RAM (les barrettes de mémoires) et d'une certaine quantité de mémoire dite Swap. La mémoire Swap n'est ni plus ni moins qu'une quantité paramétrable d'espace sur le disque dur de l'ordinateur. La RAM est très rapide, la Swap beaucoup moins (vitesse de lecture/écriture sur le disque).

    Au démarrage de l'ordinateur, le système d'exploitation utilise une quantité plus ou moins importante de cette mémoire pour exécuter des processus (des tâches...). La quantité de mémoire disponible n'est donc jamais la totalité de la mémoire virtuelle disponible.

    Sous MATLAB, il y a une limitation dans la gestion de la mémoire (limite qui se révèle être une qualité lors de la vectorisation de code...)

    MATLAB ne gère que les blocs de mémoire contiguë (qui se succèdent). Or comme généralement la mémoire est fragmentée (les données sont plus ou moins dispersées dans la mémoire), la taille maximale de mémoire utilisable par MATLAB n'est pas la quantité de mémoire virtuelle disponible (à un instant) mais celle du plus gros bloc de mémoire contiguë disponible.

    Donc pour remédier à ce problème, il faut augmenter la taille de mémoire virtuelle (classiquement en ajoutant de la RAM). Mais, sur les machine 32bits (encore les plus répandues aujourd'hui), au delà d'une certaine valeur d'environ 2Go (=> Maximum Matrix Size by Platform), le système d'exploitation ne peut plus gérer l'adressage d'un processus (un programme, une tâche...). L'ajout de RAM n'est donc pas efficace. Si on veut dépasser cette limite, il faut acquérir une machine 64bits (=> What are the benefits of 64-bit MATLAB versus 32-bit MATLAB?)

    Une fois que la limite de taille mémoire disponible est atteinte, MATLAB renvoie le fameux message d'erreur "Out of memory"

    Voila pour la petite explication rapide (avec quelques gros raccourcis, je l'admet )

    Pour revenir à ton cas, je pense qu'il serait déjà certainement utile (et aujourd'hui pas si onéreux que ça) de passer de 1Go à 2Go de RAM (si la carte mère de l'ordinateur supporte cette quantité bien entendu)

    Ensuite, si tu as assez bien compris la petite explication ci-dessus, il suffit d'appliquer quelques règles de bon sens :

    • ne pas utiliser trop de variables => fragmentation de la mémoire => diminution de la taille du plus gros bloc de mémoire contiguë disponible
    • utiliser des classes de variables de la bonne taille (uint8, uint16, single ...) à la place de la classe Double par défaut
    • utiliser la pré-allocation de mémoire pour les grosses variables au tout début du programme => peu de variable en mémoire fragmentation faible => taille maximale du plus gros bloc de mémoire contiguë
    • sauvegarde de résultat temporairement sur le disque dur (avec SAVE/LOAD par exemple) => libération de mémoire devenue inutile


    Malgré toutes ces recommandations, il se peut que la mémoire disponible ne soit pas suffisante. Dans ce cas, il faut revoir en détail le déroulement du programme et essayer de diminuer la taille du problème à résoudre (...ou bien demander une architecture 64bits pour son anniversaire )

    Une autre alternative, mais qui sort un peu du cadre de l'utilisation standard de MATLAB, consiste à utiliser le langage C par l'intermédiaire des fichiers MEX. En effet, dans le cas des tableaux, la mémoire utilisée ne sera pas un seul bloc de mémoire contigüe mais un bloc par ligne.
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  3. #3
    Membre éclairé Avatar de tubaas
    Homme Profil pro
    Acousticien
    Inscrit en
    Août 2009
    Messages
    641
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Acousticien
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2009
    Messages : 641
    Points : 825
    Points
    825
    Par défaut
    merci.
    pour ce qui est hardware comme c'est pour le travail et que le programme doit fonctionner sur différentes machines qui ont un peu les mêmes limites je ne peux pas faire grans chose.
    je pense que le plus efficace serait le stockage avec save et load mais il faudra que je prenne le temps d bien repenser le programme avec ces questions en tête. ensuite à la fin de mon programme je dois pouvoir les effacer avec delete (car je ne veux pas les conserver indéfiniment).

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

Discussions similaires

  1. Gestion des variables d'un document
    Par philben dans le forum Contribuez
    Réponses: 1
    Dernier message: 12/01/2008, 21h47
  2. Gestion des variables de session
    Par Yoplaboum dans le forum Struts 1
    Réponses: 8
    Dernier message: 09/11/2007, 16h07
  3. Structure des variables en mémoire
    Par Co_Co dans le forum C++
    Réponses: 7
    Dernier message: 30/05/2007, 18h55
  4. gestion des Variables Sessions
    Par Landolsi dans le forum ASP.NET
    Réponses: 8
    Dernier message: 08/02/2007, 13h30
  5. Gestion des variables - mémoire ?
    Par RIVOLLET dans le forum Langage
    Réponses: 4
    Dernier message: 26/10/2002, 12h44

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