目前我正在使用具有2,000,000 * 33 * 33 * 4(N * W * H * C)数据的NumPy memmap数组。我的程序从此数组中读取 随机(N)索引 。
我有8GB的RAM,2TB硬盘。 HDD读取IO仅为20M / s左右,RAM使用率保持在2.5GB。似乎存在HDD瓶颈,因为我正在检索显然不在memmap缓存中的随机索引。因此,我希望memmap缓存尽可能使用RAM。
有没有办法告诉memmap最大化IO和RAM的使用?
答案 0 :(得分:2)
(检查我的python 2.7源码) 据我所知,NumPy memmap使用mmap。 mmap确实定义了:
# Variables with simple values
...
ALLOCATIONGRANULARITY = 65536
PAGESIZE = 4096
但是我不确定改变它们是否明智(甚至可能)。 此外,这可能无法解决您的问题,并且绝对不会为您提供最有效的解决方案,因为在操作系统级别和硬件级别存在缓存和页面读取(因为对于硬件,读取单个值所需的时间大致相同或整页)。
更好的解决方案可能是对您的请求进行排序。 (我想这里N很大,否则只需对它们进行一次排序): 收集一大堆(比如一千万或一千万?)并在提出请求之前对它们进行排序。然后询问有序查询。然后在得到答案之后将它们按原来的顺序放回......