Vraag & Antwoord

Anders (software)

[Matlab 7] Out of memory

10 antwoorden
  • Ik heb een beetje getwijfeld in welk subforum ik dit zou plaatsen, maar aangezien het denk ik een softwareprobleem is kies ik voor hier. Voor mijn werk maak ik gebruik van het mathematische programma Matlab. Nu komt het geregeld voor dat ik bepaalde berekeningen niet kan uitvoeren omdat er een out-of-memory-error ontstaat. Toch lijkt dat niet mogelijk te zijn. Alle data samen die bij de berekening van toepassing zijn nemen ongeveer 500 MB in gebruik. Mijn PC, een Dell Optiplex GX270 heeft 1GB RAM, waar ongeveer 700 MB van vrij is. Daarnaast heeft het natuurlijk ook nog virtueel geheugen (Win2000). Als ik de foutmelding krijg neemt Matlab zelf niet meer dan 150 MB in, en is er dus nog zo'n halve GB vrij. Wie heeft een idee waat dit aan kan liggen? Of nog beter, of ik dit kan oplossen?
  • [quote:71f3abb264="Maarten81"]Wie heeft een idee waat dit aan kan liggen? Of nog beter, of ik dit kan oplossen?[/quote:71f3abb264]Weet je zeker dat dit geen MatLab specifieke bug is die met een update verholpen kan worden?
  • Tja, zeker weet je dat nooit maar het is wel zo dat ik de meest recente versie heb die op ons werk beschikbaar is, en dat de versie 6 die ik een paar maanden geleden nog had ook dat probleem heeft laten zien.
  • Je kunt eens kijken hoeveel virtueel geheugen matlab (en andere processen) gebruiken door de betreffende kolom toe te voegen onder de 'processen' tab onder taakbeheer. Via Beeld>Kolommen toevoegen (ik gebruik hier een Engelse XP, dus ik hoop dat de vertaling goed is.) Daarna even controleren hoe je swap-space ingesteld staat onder de Eigenschappen van Deze Computer. Zijn er geen andere programma's die aan de haal gaan met de beschikbare Mem?
  • Dank voor de tip, dit is het resultaat: Mem usage: 10.072K Peak Mem usage: 808.972K (wow! :o ) VM size: 608.564K Dit was in "rust". Dat piekgeheugen staat me niet aan, dat zal vast de bottleneck zijn... Firefox neemt als volgende het meeste VM in, nl. 22.736K (nu). Wat wil je zeggen met die swap-space?
  • 800 meg peak use is iid behoorlijk. Van de andere kant; je hebt niet voor niks 1 GB, dus dat zou geen probleem moeten zijn. Wat die Swap betreft; misschien staat je swap te krap ingesteld. Wanneer MatLab vindt dat ie persé moet swappen (ondanks dat er genoeg RAM vrij is) dan kan windows alsnog gaan zeuren over te weinig mem. Staan er nog noemenswaardige meldingen in het Logboek van Windows?
  • Nee, niks in het logboek. Ik ben er wel achter gekomen dat de swap nogal krap staat... die eik*ls van de IT-helpdesk hebben het ingesteld op max. 700 MB. Ik heb het nu aangepast naar max. 2GB op de ene en max. 2GB op de andere partitie, misschien dat daar de fout lag. Hij is nu aan het rekenen, dat duurt wel een paar uur dus morgenochtend weet ik of het geslaagd is. In ieder geval vast bedankt voor je reacties!
  • Helaas helaas, het gaat nog steeds niet goed. Ik heb nu de berekening opgesplitst in 10 gelijke stappen die één voor één worden uitgevoerd, maar nog steeds gaat het fout. Het peak mem usage van Matlab is nu zo'n 980.000 KB, en de VM 1.380.000. Aangezien het totale VM nu 4 GB is en MATLAB kennelijk "maar" iets meer dan 1 gebruikt moet er dus zat VM vrij zijn. Toch gaat er iets fout; iemand nog waardevolle tips?
  • [quote:810b18fa16="Maarten81"]Het peak mem usage van Matlab is nu zo'n 980.000 KB, en de VM 1.380.000. Aangezien het totale VM nu 4 GB is en MATLAB kennelijk "maar" iets meer dan 1 gebruikt moet er dus zat VM vrij zijn.[/quote:810b18fa16]Is die memusage van ALLEEN matlab, of van alle windows processen? Windows kan (omdat het een 32bits OS met 32 bits applicaties op 32bits hardware is) standaard 4GB aan address-space aan een willekeurig proces toewijzen. Dat is verdeeld in 2 stukken; 2GB Kernel memory space en 2GB User address space. Kernel space wordt door windows gebruikt om het proces zelf draaiende te houden, user space is beschikbaar voor het programma zelf. In windows server versies kun je die verdeling anders maken met de /3GB boot.ini switch, maar ik weet eigenlijk niet of dat met 2000 workstation ook kan. WinXP prof kan hhet kennelijk ook. Hoe dan ook, je begeeft je dan in de duistere wereld van memory allocation en dan moet je jezelf wel goed inlezen op het onderwerp. En uiteindelijk kan het de snelheid ten goede komen door bv. 1GB extra RAM erin te stoppen; dat helpt niks aan de 2GB userspace limiet, maar er is wel meer fysieke mem beschikbaar zodat er minder geswapped moet worden. http://support.microsoft.com/default.aspx?scid=kb;en-us;810371 http://www.michna.com/kb/WxMoreThan2GB.htm [quote:810b18fa16]As a 32-bit CPU, the x86 provides a 2^32 = 4 GB private flat memory space to each and every application running on the system. Unfortunately, Windows reserves a full HALF of this address space for operating-system functionality. Memory addresses from 0x00000000 through 0x7fffffff are for the application to use, and addresses from 0x80000000 through 0xffffffff are for the OS to use. In NT4 Enterprise SP3+, Windows 2000 server, and XP pro there is a /3GB switch that you can set in boot.ini to reduce the reserved space from 2GB to 1GB, thereby increasing the application space from 2GB to 3GB. Add to this the problem of memory fragmentation (same basic thing as hard drive fragmentation), and you can easily lose 0.5 GB of your addressable space to overhead. Note that it doesn't matter how much space you configure for your page file: the limitation is per-process, and due to the fact that Windows is cutting the available space in half. In other words, if you have a 4 GB page file, all that means is that two applications can each have 2 GB of virtual RAM allocated. Actually, it means that the total of virtual memory allocated by all running processes can total 4 GB, and each application can allocate *up to* 2 GB. Hopefully this clears up the picture a bit... You'll notice that I said this is mostly a windows issue. That's because it is possible to work around this limitation, even on Windows, by writing software in a manner that keeps as much information as possible in an on-disk database, and only reads in needed portions. This isn't a trivial task, though, and pretty much requires designing the application to work this way from the ground up - I would expect a 64-bit version of Max (which will have an essentially unlimited address space) sooner than a version that manages its memory in a manner like this. (2^64 = 18+- exabytes)[/quote:810b18fa16]http://www.cgtalk.com/showthread.php?t=168750&highlight=%2F3GB Idd kan het helpen het process op te delen in meerdere kleine stukjes. Maar dat had dus bij jou geen resultaat: http://www.rz.uni-freiburg.de/dienste/plattformen/ibm/compserver/frames/matlab/techdoc/matlab_prog/ch7_pe29.html http://www.eyeonline.com/Web/EyeonWeb/Support/TechFAQ.aspx
  • Hehe, volgens mij heb ik de beste oplossing gevonden... voordat ik de berekening inzet maak ik eerst alle variabelen al aan zodat ze al geheugen bezetten. Nu rekent hij een stuk sneller, en heeft bovendien geen memory-error meer (tot nu toe in ieder geval). De tips waren wel zeer welkom, fantastisch! Veel dank! [size=10:f27dd6d2fe]Nou wil je zeker ook genoemd worden in het dankwoord van mn artikel? :P [/size:f27dd6d2fe]

Beantwoord deze vraag

Weet jij het antwoord op deze vraag? Registreer of meld je aan met je account

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.