10
votes

Erreur MATLAB "Out of Memory"

Quand j'exécute un exemple de script à Matlab, il est indiqué:

Hors de la mémoire. Tapez la mémoire d'aide pour vos options.

Lorsque je tapez "mémoire", il rapporte: xxx

existe-t-il un moyen de contourner cette erreur? J'utilise Windows XP X32 avec Matlab 2009a.


2 commentaires

qu'est-ce que tu couras exactement?


Publier le script d'échantillon (ou les pièces où il est erreurs, si c'est long) aidera les personnes à mieux répondre à votre problème spécifique.


6 Réponses :


13
votes

pack est une défragmentation de mémoire. Cela pourrait vous aider un peu aussi loin que la mémoire contiguë disponible.


1 commentaires

Merci pour le commentaire. Simple!



10
votes

N'oubliez pas que lorsque Matlab dit qu'il est hors de mémoire, cela signifie qu'il est hors de mémoire contiguë, alors redémarrer ou redémarrer Matlab peut fonctionner.

Mais, je vous recommanderais d'optimiser votre code et d'identifier la façon dont vous mangeez autant de mémoire. Il pourrait s'agir d'une boucle récursive mal conçue ou d'une mauvaise fonction d'indexation (utilisant des doubles au lieu de logiques pour indexer une énorme matrice).

J'ai pratiquement vécu avec des erreurs de mémoire pendant un moment depuis que je m'occupais d'énormes ensembles de données, mais il y a toujours une solution de contournement, poser des questions spécifiques et vous serez Surpris .


0 commentaires

2
votes

Qu'essayez-vous d'allouer quand il manque de mémoire (OOM)? Avez-vous du code à reproduire? Une large gamme de problèmes peut entraîner des erreurs de mémoire.

Pour diagnostiquer, utiliser "DBSTOP si toutes les erreurs" pour définir un point d'arrêt sur les erreurs. La mémoire de mémoire déclenchera ceci et vous pouvez utiliser DBUP, DBDown et Whos () pour voir ce qui prend la mémoire. Souvent, une OMOM est causée par une mauvaise taille de matrice ou un calcul d'index, pas seulement par de grosses structures de données. Par exemple. Cela déclenchera une OMM dans la quasi tout seul MATLAB 32 bits. P>

>> x = 1;
>> x(2^30) = 2
??? Out of memory. Type HELP MEMORY for your options.


2 commentaires

Merci pour le commentaire. Simple! Le problème est maintenant fixé (voir ci-dessous).


@ Gravitas: Qu'est-ce que "ci-dessous"? S'il vous plaît essayez de ne pas compter sur la commande lors de la publication d'une réponse.



6
votes

Problème corrigé.

sous Windows XP x32, j'ai réussi à doubler presque la quantité de mémoire disponible à MatLab en édition de Boot.ini pour ajouter le commutateur / 3GB / USERVA = 3030 P>

[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect /3GB /USERVA=3030


5 commentaires

"seulement avoir 4 Go de RAM physique" - heh, c'est tout relatif


Oui! Quand j'avais 16 ans, et le fier propriétaire d'un XT avec 640kbyte de RAM, je n'aurais jamais cru si quelqu'un avait dit "Eh bien, garçon, un jour, tu feras le commentaire suivant ..."


Timex-Sinclair 1000 ca. 1982 avait 2k de RAM; Nous avons acheté un module de mémoire 16K plug-in pour quelque chose comme 40 $. Je travaille avec des appareils DSPIC pour mon travail, ils viennent avec n'importe où de 1k à 48k de RAM. Les photos 8 bits ont moins: certaines parties PIC10 ont 16 octets (pas des kilo-octets, octets ... octets ha ha ha) de RAM. Donc, même en 2015, il est toujours relatif. :-)


Si l'on utilise la victoire 10 (ou quoi que ce soit au-delà de Win XP) sur la machine 32 bits, vous pouvez obtenir le même effet en utilisant la commande: BCDEDIT / SET HEURCUTRERVA 3072


"Ensemble avec la réduction de nos matrices, cela résolue complètement le problème" Êtes-vous sûr que cela ne réduit pas simplement la taille de la matrice qui corrige le problème?



4
votes

Essayez ceci, ça fonctionne bien pour moi.

  • aller à la maison -> Icône de la préférence -> Général -> Mémoire de tas Java -> Allouer quelle taille de mémoire vous voulez
  • Dans la fenêtre de préférence, allez à "Espace de travail" (hors de la mémoire de la mémoire de tas de java) -> Voir "Limite de taille de tableau MATLAB" Assurez-vous de décocher la «limite la taille maximale de la matrice à un pourcentage de RAM». Parce que vous voulez étendre la mémoire Donc, nous n'avons pas besoin de cette fonctionnalité.
  • fait.

0 commentaires

1
votes

J'ai fait face à une erreur similaire lors de l'exécution d'un fichier (ancien) C dans matlab à l'aide de MEX.

J'ai trouvé ma solution à Ce problème sur gitlab . p>

Premièrement, décochez l'option" Limiter la taille maximale de la matrice à un% de RAM "situé sous Préférences -> Espace de travail -> Espace de travail -> Espace de travail , comme indiqué également dans Cette réponse précédente . p>

une fois appliquée, exécutez votre fichier C dans la commande Fenêtre en utilisant p>

mex filename.c -compatibleArrayDims


4 commentaires

@CRISLUENGO est l'attribut -CompattiAleRayRayDims similaire à l'augmentation de l'option de mémoire de tas Java? Parce que, pour une raison quelconque, cette solution n'a pas fonctionné pour moi. Le matlab est tout simplement coincé et fermé. Pardonnez-moi pour mon ignorance.


-COMPATILBARRAYDIMS Modifications MX ... Appels de fonction dans votre fichier MEX Pour utiliser des entiers 32 bits pour les tailles et les indices de matrice et limite la taille maximale de la matrice. Le problème GITUB que vous avez lié a été causé par un tableau int utilisé pour les tailles de tableau, qui est le type erroné maintenant que MATLAB attend des entiers de 64 bits. Cela a provoqué à nouveau que Matlab ait réinterréter ce tableau comme une série d'entiers de 64 bits (qu'ils n'étaient pas) conduisant à ce que l'utilisateur a demandé une matrice ridiculement importante. [suite]


[suite] Il existe deux corrections proposées: (1) Utilisez un tableau MWSIZe , car il faut en fonction de la documentation, ou (2) Utiliser -CompatileReRayDims , qui modifie Tous les appels de fonction pour appeler la version héritée qui prend int comme entrée au lieu de mwsize . -CompatiBeArrayDims est destiné à permettre aux versions plus récentes de MATLAB de compiler et d'utiliser l'ancien code de fichier MEX, il n'augmente pas la taille maximale de la matrice (plutôt qu'il la limite à ce qui est adressable par des entiers 32 bits, ~ 2 Go). [suite]


@Crisluengo Merci de m'avoir montré à moi. Est l'amende d'édition?