Файловая справочная таблица - PullRequest
3 голосов
/ 14 февраля 2012

Вам нужен массив из 10 ^ 10 4-байтовых целых чисел, который будет использоваться в качестве справочной таблицы.Загрузка его в ОЗУ займет 40 ГБ, что невозможно.Вам никогда не нужно записывать в этот массив после его инициализации.Вам необходимо читать отдельные целочисленные значения из случайных расположений этого массива одновременно из нескольких потоков одного процесса.Вы гарантированно находитесь на 64-битной платформе.Какова самая быстрая реализация этой справочной таблицы?Использовать обычные функции чтения файлов или, например, увеличить файл, отображенный в памяти?

Ответы [ 2 ]

1 голос
/ 14 февраля 2012

Поскольку после создания файла вам когда-либо понадобится доступ к нему только для чтения, я бы не подумал, что вы захотите использовать файл с отображением в памяти, Boost или другой. Это было бы более полезно, если бы у вас было несколько процессов, которые хотели одновременно обращаться к одним и тем же данным. В вашем случае у вас есть только темы, доступные только для чтения, поэтому простой 40-граммовый файл должен быть самым простым и быстрым.

1 голос
/ 14 февраля 2012

Звучит так, как будто вы должны выполнять явное чтение.

Отображение памяти ускоряется за счет ввода больших кусков страниц за раз (я считаю, что Windows делает 256 КБ, не уверенный в других платформах) и позволяяповторно получить к ним доступ без каких-либо штрафов после первого раза.

Если вы просто читаете целые числа из случайных местоположений, вы будете читать в 256 КБ всего 4 байта из одной страницы, а возможно, даже никогдаповторно получить доступ к нему.Такая трата!Также учтите, что вы также извлекли много полезных данных из других приложений и из кэша файловой системы.

...