Ich brauche Hilfe! Ich kann das Problem nicht lösen, ich stoße an die Grenzen der Hardware
komposter:
Habt ihr einen Rat, Freunde? Ich kümmere mich darum.)
Als Optionen...
1. einen eigenen Cache einrichten. In diesem Fall haben Sie die Kontrolle darüber, was sich im Speicher befindet. Sie kennen den Algorithmus, so dass Sie den Cache effizient gestalten können.
2. verwenden Sie eine Zuordnung für die Datei. Wind wird das, was es braucht, zwischenspeichern und die Festplatte nicht löschen.
Als Optionen...
1. einen eigenen Cache einrichten: In diesem Fall können Sie den gesamten Inhalt selbst verwalten.
2. Verwenden Sie ein Mapping für die Datei. vin selbst wird die benötigten Daten zwischenspeichern, so dass sie die Festplatte nicht überschreiben.
1. Dies ist der Cache... Oder ich verstehe nicht, was Sie meinen. Meine Option, ständig die notwendigen Abschnitte zu lesen?
2. Können Sie das etwas näher erläutern? Was soll mit der Kartierung erreicht werden und wie kann man sie angehen?
Oh, Scheiße...
32-битные архитектуры (Intel 386, ARM 9) не могут создавать отображения длиной более 4 Гб
Dieselben Eier, aber von der Seite. Das Lesen mag zwar schneller gehen, löst das Problem aber nicht global.
Eine andere Idee ist, alles in eine Datenbank (MySQL?) zu verschieben und damit zu arbeiten. Die Idee ist, dass Datenbanken für solche Mengen und ständiges Graben ausgelegt sind.
Gibt es irgendwelche Experten? Wer hat etwas zu sagen?
1) Gibt es eine Möglichkeit, den Algorithmus zu überarbeiten? Einen Block (2 GB) laden, verarbeiten, das Ergebnis speichern (kürzer), Speicher freigeben, den nächsten Block laden ...
und verarbeiten Sie am Ende alle Ergebnisse noch einmal.
2) Wenn es viel Arbeit mit dem Speicher gibt, sind Hash-basierte Lösungen, B-Bäume (und ihre Änderungen), Offload auf die Datenbank verbunden.
1) Gibt es eine Möglichkeit, den Algorithmus zu überarbeiten? Einen Block (2 GB) laden, verarbeiten, das Ergebnis (kürzer) speichern, den Speicher freigeben, den nächsten Block laden ...
und verarbeiten Sie am Ende alle Ergebnisse noch einmal.
2) Wenn es viel Arbeit mit dem Speicher gibt, sind Hash-basierte Lösungen, B-Bäume (und ihre Änderungen), Offloading auf die Datenbank verbunden.
1. ich habe darüber geschrieben - man kann es, aber das Problem ist, dass man die Daten mehrfach verarbeiten muss. Es wird sehr langsam sein.
2. Morgen werde ich mich selbst googeln, ich werde für eine kurze Beschreibung dankbar sein.
1. ich habe darüber geschrieben - das kann man, aber das Problem ist, dass man die Daten viele Male verarbeiten muss. Das wäre sehr langsam.
2. Morgen werde ich mich selbst googeln, ich wäre für eine kurze Beschreibung dankbar.
Ich erinnerte mich an eine Website, auf der ein ähnliches Problem und Varianten seiner Lösung in C++ diskutiert wurden.

- www.fulcrumweb.com.ua
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. eine Berechnung mit einem Programm durchführen, das große Datenmengen verarbeiten kann (Matlab/R/etc).

- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Es gibt eine große Menge an Informationen (etwa 20 GB in einer Textdatei).
Die Informationen bestehen aus der gleichen Art von Sequenzen, etwa einer Million davon.
Es ist notwendig, alle Sequenzenwiederholt durchzugehen und einige Berechnungen anzustellen.
Das erste, was einem in den Sinn kommt, ist, den gesamten Inhalt der Datei zu lesen, das Array der Strukturen damit zu füllen und mit ihnen im Speicher zu arbeiten.
Aber es hat nicht funktioniert, bei der nächsten Größenänderung meldet MT "Memory handler: cannot allocate 5610000 bytes of memory".
Manager zeigt, dass terminal.exe 3,5 GB Speicher (von 16 physischen) verwendet. Ich nehme an, dass dies daran liegt, dass der Prozess nur 4 GB erhalten kann.
EA meldet "Nicht genug Speicher(4007 Mb verwendet, 88 Mb verfügbar, 4095 Mb insgesamt)!!!".
Und das sind nur 15,3 % des erforderlichen Betrags (und ich möchte ihn auch in Zukunft erhöhen).
Option 2 - jedes Mal die Datei lesen. Suchen Sie das benötigte Stück, speichern Sie es in der Struktur, lesen Sie das nächste Stück, vergleichen Sie das Ergebnis, überschreiben Sie die Struktur.
Und wenn ich diese Sequenzen einmal durchgehen müsste, würde ich genau das tun. Aber man muss sie viele Male durchgehen und sich jedes Mal ein Stück weiterbewegen.
Man muss also sehr oft lesen, was das ist:
Es ist auch frustrierend, wie viele Informationen es gibt... Wenn es 10 GiG wären, würde ich es auf die RAM-Disk verschieben (tatsächlich in den Speicher) und so viel lesen, wie ich kann. Ja?
Das ist alles, was mir einfällt.
Versuchen Sie, diese Sequenzen neu zu kompilieren, so dass es viele, viele Teile gibt, die aber jeweils nur die im Moment notwendigen Informationen enthalten?
Versuchen Sie auch, die Daten zu komprimieren (ich habe bereits überall, wo ich kann, auf Floats mit Char-Typen umgestellt)? Aber damit bekomme ich höchstens 10%-20% mehr, und ich muss das Volumen um eine Größenordnung reduzieren...
Habt ihr einen Rat, Freunde? Ich gehe ran)