Speicherbegrenzung String
Tja ich weiss nicht mehr so richtig weiter. Meine Python-Version ist 2.4.2. Wenn man das Problem googelt dann bekommt man sehr unterschiedliches dazu... Allerdings scheint Python 2.5 damit generell weniger Probleme zu haben. Hat jemand Erfahrungen mit so großen Files?
Zumindest bei der x86_64-Architektur (aka amd64) gilt sizeof(int) == 4 und (C)Python hat intern sehr oft ints benutzt, etwa beim Indizieren oder eben auch bei mmap-Objekten. Mit Python 2.5 wurden diese ints dann durch einen eigenen Datentyp (Py_ssize_t) ersetzt (siehe auch PEP-0353, um die Vorteile einer 64bit-Architektur nutzen zu können. Mit Python 2.5 sollte also mmap mit großen Dateien funktionieren.
Kann dieses "sollte" jemand bestätigen? Ich habe eine x86_64 Architektur und überlege auf Python 2.5 upzudaten.
Trundle hat geschrieben:Zumindest bei der x86_64-Architektur (aka amd64) gilt sizeof(int) == 4 und (C)Python hat intern sehr oft ints benutzt, etwa beim Indizieren oder eben auch bei mmap-Objekten. Mit Python 2.5 wurden diese ints dann durch einen eigenen Datentyp (Py_ssize_t) ersetzt (siehe auch PEP-0353, um die Vorteile einer 64bit-Architektur nutzen zu können. Mit Python 2.5 sollte also mmap mit großen Dateien funktionieren.
-
- User
- Beiträge: 61
- Registriert: Freitag 7. März 2003, 19:28
- Kontaktdaten:
Was auch schön wäre: Ein der der Daten die die re durchwühlt...
Es sollte doch noch ein anderes, und vor allem schnelleres Verfahren für dein Problem geben.
mfg Betz Stefan
Es sollte doch noch ein anderes, und vor allem schnelleres Verfahren für dein Problem geben.
mfg Betz Stefan
Also ich bin inzwischen etwas weiter:
1. habe ich Python 2.5.2 verfügbar, damit läuft "mem" und "mmap" über Files größer als 2GB
2. scheint das Thempo mit Python 2.5.2 deutlich langsamer zu sein....
Ich muss mir das noch einmal anschauen und poste die Resultate dann.
1. habe ich Python 2.5.2 verfügbar, damit läuft "mem" und "mmap" über Files größer als 2GB
2. scheint das Thempo mit Python 2.5.2 deutlich langsamer zu sein....
Ich muss mir das noch einmal anschauen und poste die Resultate dann.
@BastiL: Vielleicht könntest Du ja eine Testdatei erstellen, die dem Original im Muster entspricht, also z.B. Anfangs- und Endmarkierungen an ungefähr den Stellen, wo sie auch in der Originaldatei stehen und ansonsten irgendwelche Fülldaten.
Du könntest dafür dann auch ein kleines Programm, das diese Datei erstellt ins Netz stellen, statt der Datei selbst.
Ich denke bei diesem Problem ist es nicht ganz unwichtig, dass die Leute ihre Tests auf den selben Daten machen, sonst gibt's zu viele Unterschiede, die einen Vergleich der Benchmarks weniger aussagekräftig machen.
Du könntest dafür dann auch ein kleines Programm, das diese Datei erstellt ins Netz stellen, statt der Datei selbst.
Ich denke bei diesem Problem ist es nicht ganz unwichtig, dass die Leute ihre Tests auf den selben Daten machen, sonst gibt's zu viele Unterschiede, die einen Vergleich der Benchmarks weniger aussagekräftig machen.
Was die Musterdatei angeht: Wenn müsste es ein Programm sein das eine erzeugt, Datei selbst ist zu groß. Wi eich so etwas schreibe ist mir nicht ganzt klar. Im Prinzip genügt es, vor und hinter dem RE einige Zeilen ASCII zu erzeugen und dazwischen 2GB binäre Daten....
So ich habe dieses Thema lange liegen lassen aber jetzt wird das ganze wieder aktuell. Ich habe hier den Link auf eine Beispieldatei, die wir für Benchmarks jetzt verwenden können:
http://euler.yonsei.ac.kr/fluent/tutfil ... l_mesh.zip
Zip auspacken -> Datei filmcool.cas.gz auspacken -> filmcool.cas ist das Musterfile
Wie gesagt muss ich zunächst Binär- und ASCII-Teile trennen. Der Binärteil steht zwischen "(0 "Grid:")" und "(0 "Thread variables:"), alles andere ist ASCII. Ich werde demnächst mal EUre bisherigen Vorschläge auf meinem Musterrechner über diese Datei laufen lassen und die Ergebnisse posten.
http://euler.yonsei.ac.kr/fluent/tutfil ... l_mesh.zip
Zip auspacken -> Datei filmcool.cas.gz auspacken -> filmcool.cas ist das Musterfile
Wie gesagt muss ich zunächst Binär- und ASCII-Teile trennen. Der Binärteil steht zwischen "(0 "Grid:")" und "(0 "Thread variables:"), alles andere ist ASCII. Ich werde demnächst mal EUre bisherigen Vorschläge auf meinem Musterrechner über diese Datei laufen lassen und die Ergebnisse posten.