2016-09-06 10 views
1

В настоящее время я работаю с массивом NumPy memmap с данными из 2,000,000 * 33 * 33 * 4 (N * W * H * C). Моя программа читает случайные (N) индексы из этого массива.Numpy memmap лучше IO и использование памяти

У меня 8 ГБ оперативной памяти, 2TB HDD. Жёсткий диск чтения IO составляет всего около 20 Мб/с, объем использования ОЗУ составляет 2,5 ГБ. Кажется, что есть узкое место на жестком диске, потому что я получаю случайные индексы, которые, очевидно, не входят в кеш memmap. Поэтому я хотел бы, чтобы кеш memmap использовал RAM как можно больше.

Есть ли способ для меня сообщить memmap, чтобы максимизировать использование IO и RAM?

ответ

2

(Проверка моего источника python 2.7) Насколько я могу сказать, NumPy memmap использует mmap. ММАП делает определить:

# Variables with simple values 
... 
ALLOCATIONGRANULARITY = 65536 
PAGESIZE = 4096 

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

Лучшим решением, вероятно, будет сортировка ваших запросов. (Я полагаю, что N велико, иначе просто сортируйте их один раз): Соберите кучу из них (скажем, один или десять миллионов?) И перед выполнением запроса сортируйте их. Затем спросите заказываемые запросы. Затем после получения ответов верните их в первоначальном порядке ...