2016-09-06 24 views
1

現在、私は2,000,000 * 33 * 33 * 4(N * W * H * C)のデータを持つNumPyのmemmap配列を使って作業しています。私のプログラムはランダム(N)のインデックスをこの配列から読み込みます。Numpy memmapより良いIOとメモリの使用

私は8GBのRAM、2TBのHDDを持っています。 HDD読み取りIOは約20M/sに過ぎず、RAMの使用量は2.5GBにとどまります。明らかにmemmapキャッシュにないランダムなインデックスを取得しているので、HDDのボトルネックがあるようです。したがって、私は可能な限りRAMを使用するmemmapキャッシュをしたいと思います。

私はmemmapにIOとRAMの使用量を最大限にする方法はありますか?

答えて

2

(私のpython 2.7ソースを確認してください) NumPy memmapがmmapを使用していると言うことができる限りです。

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

は、しかし、私はそれらを変更することが賢明な(あるいは可能)になるかわからない: MMAPは定義しません。 さらに、これは問題を解決できないかもしれませんし、OSレベルとハードウェアレベルでキャッシュとページの読み取りがあるため、最も効率的なソリューションはありません(ハードウェアの場合は、値または全体のページ)。

もっと良い解決策は、おそらくあなたのリクエストを並べ替えることでしょう。 (私はここでNは大きいと思いますが、それ以外の場合は一度だけ並べ替えます): それらの束を集めて(例えば1〜10百万?)、要求を行う前にそれらを並べ替えます。次に、順序付けられたクエリを尋ねます。その後、回答を得た後、元の順序に戻します。

関連する問題