Лучший способ сохранить вектор 10 ГБ на диск в Haskell

У меня есть 10GB Data.Vector.Unboxed вектор, который я хочу эффективно сохранить на диск. Какой лучший, самый эффективный способ? Я планирую также прочитать его из файла с отображением памяти.

Я видел этот пакет этого пакета, но работает только с Storable, но мне нужно остаться с unboxed.

Я думал о преобразовании в список, но я предполагаю, что это не очень идеально.

Ответ 1

Я не тестировал его сам, но вы могли бы попытаться использовать vector-binary-instances, который предоставляет экземпляры Binary для Vector s, а затем используйте binary, например encodeFile.

Ответ 2

Вы можете конвертировать между типами Vector за счет обхода O(n) всего вектора. Функция, которую вы ищете, convert. Пока вы не планируете часто выставлять этот вектор на диск, эта стоимость не должна быть значительной над всеми и, конечно, быстрее, чем на самом деле писать вектор на диск. Однако, если вы часто оплачиваете эту стоимость, вам следует, вероятно, пересмотреть алгоритм.

Ответ 3

Как насчет памяти, сопоставляющей массив C, лежащий в основе вектора? Конечно, это работает, только если вектор распакован: -).

Запись будет состоять в том, чтобы взять указатель на массив, общий размер C массива и записать кусок памяти C с одним вызовом C.