1GB Vector, wird Vector.Unboxed Ärger geben, wird Vector.Storable geben Ärger?

9

Wir müssen lange 1 GB zusammenhängende Bytes im Speicher für lange Zeiträume (Wochen bis Monate) speichern und versuchen, eine Vektor / Array-Bibliothek zu wählen. Ich hatte zwei Bedenken, auf die ich keine Antwort finden kann.

  1. Vector.Unboxed scheint die zugrunde liegenden Bytes auf dem Heap zu speichern, die nach Belieben vom GC verschoben werden können. Das periodische Verschieben von 1 GB Daten wäre etwas, das ich vermeiden möchte.

    >
  2. Vector.Storable löst dieses Problem, indem die zugrunde liegenden Bytes im c-Heap gespeichert werden. Aber alles, was ich gelesen habe, scheint darauf hinzuweisen, dass dies wirklich nur für die Kommunikation mit anderen Sprachen (in erster Linie c) verwendet werden soll. Gibt es einen Grund, warum ich vermeiden sollte, Vector.Storable für interne Haskell-Nutzung zu verwenden.

Ich bin offen für eine dritte Option, wenn es Sinn macht!

    
jamshidh 04.05.2015, 19:10
quelle

1 Antwort

1

Mein erster Gedanke war das Paket mmap , mit dem Sie eine Datei in den Speicher "memory-mappen" können Verwenden des virtuellen Speichersystems zum Verwalten von Paging. Ich weiß nicht, ob dies für Ihren Anwendungsfall geeignet ist (insbesondere weiß ich nicht, ob Sie laden oder Computing diese 1 GB Daten), aber es lohnt sich, es anzuschauen.

Insbesondere denke ich dies verhindert, dass der GC die Daten bewegt (da es sich nicht auf dem Haskell-Heap befindet, wird es vom virtuellen Speichersubsystem des Betriebssystems verwaltet). Auf der anderen Seite behandelt diese Schnittstelle nur rohe Bytes. Sie könnten nicht sagen, ein Array von Customer -Objekten oder etwas.

    
MathematicalOrchid 05.05.2015 10:24
quelle

Tags und Links