2016-09-06 50 views
1

目前我正在處理一個NumPy memmap數組,其中包含2,000,000 * 33 * 33 * 4(N * W * H * C)數據。我的程序讀取隨機(N)索引來自此陣列。Numpy memmap更好的IO和內存使用

我有8GB的RAM,2TB硬盤。 HDD讀IO只有20M/s左右,RAM使用率保持在2.5GB。看起來有一個HDD瓶頸,因爲我正在檢索明顯不在memmap緩存中的隨機索引。因此,我希望memmap緩存儘可能使用RAM。

有沒有辦法讓我告訴memmap以最大限度地利用IO和RAM?

回答

2

(檢查我的python 2.7源碼) 據我所知,NumPy memmap使用mmap。 MMAP確實定義:

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

但是我不知道這將是明智的(甚至可能)來改變這些。 此外,這可能無法解決您的問題,並且絕對不會爲您提供最有效的解決方案,因爲在操作系統級別和硬件級別具有緩存和頁面讀取功能(因爲對於硬件,讀取單個軟件時或多或少需要相同時間價值或整個頁面)。

更好的解決方案可能是對您的請求進行排序。 (我在這裏假設N很大,否則只是將它們排序一次): 收集一大堆數據(比如一或千萬?),並在請求之前對它們進行排序。然後詢問有序查詢。然後在得到答案後,將它們恢復爲原來的順序...