Sinds kort heb ik een probleem met MatLab wat ik maar niet definitief op kan lossen.
Sinds mijn MatLab scripts steeds grotere vormen aan beginnen te nemen is het geheugengebruik van MatLab enorm toegenomen. Op een gegeven moment gedurende het draaien van een script krijg ik dan ook steevast een OUT OF MEMORY error.
Ik heb op de MathWorks website de diverse tips opgevolgd. Het volgende heb ik gedaan:
1) Ik initieer mijn dataset zodat in één keer een blok geheugen van de juiste grootte gereserveerd wordt. (De dataset is maximaal een GB of 4 groot)
2) Ik laat Windows de grootte van mijn pagefile beheren.
3) Ik draai de scipts door MatLab zonder JVM op te starten (-nojvm op de commandline).
4) Daar waar mogelijk heb ik het commando PACK uitgevoerd om de variabelen weg te schrijven en weer in te lezen. Dit zou fragmentatie van het geheugen moeten tegengaan. (Fragmentatie zou al voorkomen moeten zijn doordat ik punt 1) uitvoer)
Dit alles heeft er weliswaar voor gezorgd dat de out of memory errors steeds later optreden; toch zou ik nog net iets langer door willen simuleren, om zo betere resultaten te krijgen.
De volgende opties lijken mij onmogelijk:
• Meer werkgeheugen installeren. (2 van de 3 bankjes zitten vol (2x512MB); de chipset lijkt niet stabiel te kunnen omgaan met een derde dimm)
• Afwijken van het double datatype; De bewerkingen zouden dan een conversie terug naar dit type vereisen en dat zou dezelfde eisen aan het geheugen gaan stellen.
• Het omschrijven van grote delen van het script naar C om zo alsnog te kunnen afwijken van het double type. Voor zover ik weet gebruikt MatLab voor zijn MEX bestanden ook gewoon de LAPACK DLL's; intern wordt daar wederom alles met 8 bytes per double uitgevoerd en ben je net zo ver van huis.
Zou het helpen om het complete werkgeheugen te defragmenteren? Weet iemand hier een goede tool voor? (de shareware-probeer-tools die ik vind vertrouw ik veelal niet)
De wanhoop nabij, vrees ik dat er bijna niets anders op zit dan de bewerkingen in recursieve vorm te schrijven en het performanceverlies maar te accepteren.
Heeft er iemand nog een geniale tip die ik over het hoofd gezien heb?
Sinds mijn MatLab scripts steeds grotere vormen aan beginnen te nemen is het geheugengebruik van MatLab enorm toegenomen. Op een gegeven moment gedurende het draaien van een script krijg ik dan ook steevast een OUT OF MEMORY error.
Ik heb op de MathWorks website de diverse tips opgevolgd. Het volgende heb ik gedaan:
1) Ik initieer mijn dataset zodat in één keer een blok geheugen van de juiste grootte gereserveerd wordt. (De dataset is maximaal een GB of 4 groot)
2) Ik laat Windows de grootte van mijn pagefile beheren.
3) Ik draai de scipts door MatLab zonder JVM op te starten (-nojvm op de commandline).
4) Daar waar mogelijk heb ik het commando PACK uitgevoerd om de variabelen weg te schrijven en weer in te lezen. Dit zou fragmentatie van het geheugen moeten tegengaan. (Fragmentatie zou al voorkomen moeten zijn doordat ik punt 1) uitvoer)
Dit alles heeft er weliswaar voor gezorgd dat de out of memory errors steeds later optreden; toch zou ik nog net iets langer door willen simuleren, om zo betere resultaten te krijgen.
De volgende opties lijken mij onmogelijk:
• Meer werkgeheugen installeren. (2 van de 3 bankjes zitten vol (2x512MB); de chipset lijkt niet stabiel te kunnen omgaan met een derde dimm)
• Afwijken van het double datatype; De bewerkingen zouden dan een conversie terug naar dit type vereisen en dat zou dezelfde eisen aan het geheugen gaan stellen.
• Het omschrijven van grote delen van het script naar C om zo alsnog te kunnen afwijken van het double type. Voor zover ik weet gebruikt MatLab voor zijn MEX bestanden ook gewoon de LAPACK DLL's; intern wordt daar wederom alles met 8 bytes per double uitgevoerd en ben je net zo ver van huis.
Zou het helpen om het complete werkgeheugen te defragmenteren? Weet iemand hier een goede tool voor? (de shareware-probeer-tools die ik vind vertrouw ik veelal niet)
De wanhoop nabij, vrees ik dat er bijna niets anders op zit dan de bewerkingen in recursieve vorm te schrijven en het performanceverlies maar te accepteren.
Heeft er iemand nog een geniale tip die ik over het hoofd gezien heb?
Ik ben geheel voldaan, dank u wel!