Numpy memmap 更好的 IO 和内存使用

Numpy memmap better IO and memory usage

目前我正在使用一个包含 2,000,000 * 33 * 33 *4 (N * W * H * C) 数据的 NumPy memmap 数组。我的程序从这个数组中读取 random (N) indices

我有 8GB 内存,2TB 硬盘。硬盘读取IO只有20M/s左右,RAM使用率保持在2.5GB。似乎存在 HDD 瓶颈,因为我正在检索显然不在 memmap 缓存中的随机索引。因此,我希望memmap缓存尽可能多地使用RAM。

有没有办法让我告诉 memmap 最大化 IO 和 RAM 使用率?

(检查我的 python 2.7 源代码) 据我所知,NumPy memmap 使用 mmap。 mmap 确实定义了:

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

但是我不确定改变这些是否明智(甚至可能)。 此外,这可能无法解决您的问题,并且绝对不会为您提供最有效的解决方案,因为在 OS 级别和硬件级别存在缓存和页面读取(因为对于硬件而言,它或多或少需要相同的时间来读取单个值或整个页面)。

更好的解决方案可能是对您的请求进行排序。 (我在这里假设 N 很大,否则只需对它们进行一次排序): 收集一堆(比如一千万或一千万?)并在执行请求之前,对它们进行排序。然后问有序查询。然后在得到答案后把它们放回原来的顺序...