Ich brauche Hilfe! Ich kann das Problem nicht lösen, ich stoße an die Grenzen der Hardware - Seite 2

 
ALXIMIKS:

Ich erinnerte mich an eine Website, auf der ein ähnliches Problem und Varianten seiner Lösung in C++ diskutiert wurden.

Danke, ich werde es lesen.

Iwan Iwanow:
Es tut mir leid, was, wenn ich versuchen, 64 Bit oder mt wird nur 32 spinnen
Ich war naiv zu glauben, dass so eine hochmathematische Sache auf 64 Bit rotieren sollte.
Nehmen Sie die Software zur Berechnung der Aerodynamik, sie funktioniert nicht auf 32bit.
das Hauptargument, dass ein Computer mit 32x schneller läuft, kenne ich, aber das ist imho ein Hardwareproblem

Der Wechsel zu x64 verschiebt die Obergrenze nur nach hinten, und zwar nicht sehr weit. Ich muss nicht losrennen und 16 GB Speicher kaufen. ;)

 
anonymous:

1. Natürlich sollten Sie ein x64-System verwenden.

2. einen leistungsfähigeren Rechner in der Amazon EC2-Cloud mieten und die Berechnungen darauf durchführen.

3. Verwendung komprimierter Daten, Dekomprimierung im Speicher bei laufendem Betrieb. Reale Daten lassen sich besser komprimieren, wenn man sie in Streams (Vorzeichen/Mantisse/Exponent) aufteilt; man kann 12-Bit-Float verwenden (auf Kosten der Genauigkeit).

4: Führen Sie eine Berechnung mit einem Programm durch, das große Datenmengen verarbeiten kann (Matlab/R/etc).

1,2: Hier geht es darum, die Obergrenze zu verschieben, und Sie wollen das Problem lösen, ohne an eine bestimmte Zahl gebunden zu sein.

3. Das Problem ist nicht die Menge der Daten auf der Festplatte, sondern die Menge im Speicher. Ich kann sie um weitere 10-20 % komprimieren, aber auch das wird das Problem nicht lösen.

4. Ich hoffe, dass ich vorerst im Sandkasten bleiben kann. Damit spätere Kopierer/Synchronisierer nicht schreiben müssen...

Vielen Dank für Ihre Teilnahme!

 
komposter:
Ein Wechsel zu x64 würde die Obergrenze nur nach hinten verschieben, und zwar nicht sehr weit. Ich muss doch nicht losrennen und weitere 16 GB Speicher kaufen, oder? ;)

Sie arbeiten nicht ständig mit dieser Art von Daten, oder? Schreiben Sie für x64 und führen Sie es bei Bedarf auf amazon aus. Sie können dort auch auf der Mikroinstanz debuggen.

Wenn Sie jedoch ständig mit diesem Problem konfrontiert sind, können Sie 64 GB Speicher für etwa 1.000 $ kaufen, z. B. Corsair Vengeance Pro CMY64GX3M8A2133C11.

Entweder Sie überdenken den Algorithmus so, dass er in einem Durchgang über die Daten arbeiten kann.

p.s. Sie können auch komprimierte Daten im Speicher ablegen und bei Bedarf dekomprimieren, wenn Sie genug Zeit haben, sie zu verarbeiten.

 
komposter:

Danke, ich werde es lesen.

Der Wechsel zu x64 wird die Obergrenze nur nach hinten verschieben, und zwar nicht sehr weit. Ich kann doch nicht einfach losrennen und weitere 16 GB Speicher kaufen, oder? ;)

Das soll wohl ein Witz sein :-)
ich bin ein Dummkopf mit 8gig zum Spielen
 

Option 1: Schneiden Sie die Datei in Stücke.

Option 2: Zerlegen Sie die Akte in Teile, aber systematisieren Sie sie auch. Wie ein Wort aus dem Wörterbuch. Beginnt mit "A" und sucht nach "A.txt". Auf diese Weise können Sie die Daten in Baumform anordnen (ähnlich einem Wörterbuch: Ordner A, B... in Ordner A Ordner AA, AB, usw.), die Suche wird sehr schnell sein.

 
komposter:

Sie werden also viel lesen müssen, und das ist gut so:

  • sehr, sehr langsam.
  • wird ein Loch in das Laufwerk reißen.

virtuelle RAM-Disk zur Rettung ;)

und Sie werden kein Loch haben, und Sie werden die Geschwindigkeit mögen.

und das gesamte Volumen ist sofort verfügbar.

nicht in Stücke schneiden, denn Stücke sind für die Aufgabe nicht geeignet

 
Ich würde versuchen, die Datei in Stücke zu zerlegen und jedes Stück nach Bedarf zu laden (d. h. wie Dima vorschlägt). Das ist schwer zu sagen, denn es hängt von der jeweiligen Aufgabe ab. Aber das Problem ist interessant, halten Sie mich über Ihre Ergebnisse auf dem Laufenden.
 
komposter:

1. Dies ist der Cache... Oder ich verstehe nicht, was Sie meinen. Meine Option, ständig die notwendigen Abschnitte zu lesen?

Nun... die Datei durch ihren Wrapper lesen, der Wrapper wird einen kleinen Teil der Datei im Speicher behalten und ohne Lesen ersetzen. Ich meine, Sie wissen, wie die Datei verwendet wird, so dass der Wrapper recht effizient ausfallen sollte.

komposter:

Oh Scheiße...

Dieselben Eier, nur von der Seite. Das Lesen kann zwar beschleunigt werden, löst aber nicht das gesamte Problem.

Nun, ich dachte an sich wiederholende Aktionen in kleinem Rahmen.

Die Verwendung von Mapping bedeutet, den Cache von Wind zu nutzen, anstatt einen eigenen zu schreiben. Laden Sie den Chunk, lesen Sie ihn, entladen Sie ihn. Wenn der Chunk häufig verwendet wird, behält Wind ihn im Speicher.

anonym:

3. Verwendung komprimierter Daten, Dekomprimierung im laufenden Betrieb. Reale Daten lassen sich besser komprimieren, wenn man sie in Streams (Vorzeichen/Mantisse/Exponent) aufteilt; man kann 12-Bit-Float verwenden (auf Kosten der Genauigkeit).

4. eine Berechnung mit einem Programm durchführen, das große Datenmengen verarbeiten kann (Matlab/R/etc).

Oder so (c).
 
Ohne die Besonderheiten der Datenstruktur und der auszuführenden Operationen zu kennen, können nur allgemeine Ratschläge gegeben werden. Eine der Optionen besteht darin, die Rohdaten in einem oder mehreren Durchgängen in Metadaten kleineren Umfangs - dieselben 4 GB - umzuwandeln (jedoch ohne die Festplatte zu löschen) und dann mit den Metadaten zu arbeiten (Werte zusammenfassen, nach bestimmten Parametern schneiden usw.). Wenn dies nicht funktioniert, laden Sie die Daten in das DBMS.
 
komposter:

Es gibt eine große Menge an Informationen (etwa 20 GB in einer Textdatei).

...

Und wenn diese Datei mit einem Archivierungsprogramm komprimiert wird, wie groß ist sie dann (da der Text sehr gut komprimiert sein sollte)?