Управление памятью — Какой лучший способ прочитать огромный файл данных, который больше, чем ОЗУ в C ++?

Мне нужно работать с огромным файлом матрицы данных, который больше, чем доступная оперативная память. Например, матрица имеет 2500 строк и 1 миллион столбцов, что приводит к ~ 20 ГБ. В основном мне нужно только прочитать данные в память, без операции записи вообще.

я думал отображение памяти должно сработать. Но оказалось, что это не очень эффективно, так как ОЗУ взорвется. Это связано с тем, что ОС всегда будет автоматически кэшировать данные (страницы) в памяти, пока ОЗУ не заполнится. После этого, как и в случае с данными, превышающими объем ОЗУ, будут возникать сбои страниц, следовательно, процесс вставки страниц и извлечения страниц, который по сути представляет собой чтение / запись на диск и замедляет скорость.

Я должен указать, что я также хотел бы случайным образом прочитать некоторое подмножество данных, скажем, просто строки от 1000 до 1500 и столбцы от 1000 до 5000.

[РЕДАКТИРОВАТЬ]

Файл данных — это текстовый файл, хорошо отформатированный как матрица. По сути, мне нужно прочитать матрицу больших данных и выполнить перекрестное производство с другим вектором столбец за столбцом.

[Конец редактирования]

Мои вопросы:

  1. их другие альтернативные подходы? Может ли прямое чтение по частям лучше?
  2. Или есть разумный способ программно освободить кеш страниц до того, как ОЗУ заполнится при отображении памяти? Я просто думаю, что было бы лучше, если бы мы могли выгружать данные из памяти до того, как RAM заполнится.
  3. Есть ли способ прочитать файл данных столбец за столбцом?

Заранее большое спасибо!

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]