Speicher auf Platte auslagern?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Arp
User
Beiträge: 65
Registriert: Dienstag 15. März 2011, 13:21

Hi,

Ich nutze Numpy und muss ein array der Dimension (2000000,64,4) mit Komplexen Zahlen füllen.
Dafür benutze ich numpy.empty(shape=(2000000,64,4),dtype=complex)
Da eine Komplexe Zahl 128 Bit für die Darstellung braucht, sollte so ein Array 8 GB groß sein. Mein Laptop hat aber nur 4 GB. Das könnte ein Problem sein :)

Gibt es in Python eine Möglichkeit Operationen auf der Platte statt im Ram ablaufen zu lassen? Klar, wär etwas langsam, aber dafür würde es trotzdem noch funktionieren.

thx.
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Arp hat geschrieben:Gibt es in Python eine Möglichkeit Operationen auf der Platte statt im Ram ablaufen zu lassen? Klar, wär etwas langsam, aber dafür würde es trotzdem noch funktionieren.
So etwas wird normalerweise im Rahmen der virtuellen Speicherverwaltung vom Betriebssystem selber mit Paging realisiert.
deets

Wenn dein System 64 Bit hat, macht das die Speicherverwaltung des Betriebssystems von alleine.

Aber "etwas langsamer" ist "etwas" untertrieben. Es waere hoellisch lahm - jenseits der Praktikabilitaetsgrenze.
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

>4 GB swappen? Keine gute Idee ;-). Ich habe mal Simulationen gehabt, die nur 1 GB im swap hatten - meine Berechnung hätten, die nötige Geduld vorausgesetzt, sprichwörtliche Ewigkeiten gedauert und Zugriff auf den Rest des Computers war natürlich auch extrem lahm.

Kennst Du numexpr? Damit laufen schon mal einige Operationen speicherschonender. Aber das hilft ja nicht beim generellen Problem. Es gibt keine Möglichkeit darauf zu verzichten riesige Arrays anzulegen? Vielleicht Berechnung in Teilen? Einen Wrapper, der Teilarrays verwaltet und den IO reduziert?

Gruß,
Christian
Arp
User
Beiträge: 65
Registriert: Dienstag 15. März 2011, 13:21

Hi,

Ich glaube nicht das ich auf das große Array verzichten. Das hab ich nur um Radio-Astronomie Daten zu bearbeiten, und ein tool das ich irgendwann benutze ersetzt das array in der datei mit dem das ich erstellt habe. Und wenn die Dimensionen der Arrays nicht gleich sind, dann wird gemeckert.

Ich hab mir jetzt mal eine zusätzliche swapdatei in linux angelegt, 8 GB groß. Nun meckert python nicht mehr. Klar, die array-operationen laufen jetzt zum großen Teil auf der Platte, aber die Geschwindigkeit ist noch akzeptabel.
Und surfen geht auch noch :)
BlackJack

@Arp: Die Frage war wohl auch mehr so gedacht, ob Du das Array tatsächlich immer an einem Stück im Speicher benötigst. Bei solchen Datenmengen wird oft versucht den Algorithmus zum Verarbeiten auf kleinere Kacheln zu reduzieren. So dass man immer nur Teile von den Gesamtdaten im Speicher halten muss.
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

@deets: Wieso nur 64-bit Systeme?
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
deets

@jbs

Weli nur dann ein einziger Prozess mehr als 4GB (ueblicherweise sogar wegen hardware-IO-mappings und anderen Sperenzchen weniger) allozieren kann. Es gab Tricks, auch unter 32Bit an die PAE ranzukommen, aber das ist dann wie mit den guten, alten himem.sys unter DOS via paging & so - und damit nur moeglich fuer Software, die das speziell unterstuetzt. ZB Oracle hat das gemacht. Aber Python (und Numpy und Co) machen das nicht.
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

Jetzt verstehe ich was du meinst. Hatte dein Post etwas missverstanden.
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
Antworten