当矩阵深入时,Mem-map会减慢速度

时间:2013-11-24 18:09:37

标签: python numpy memory-mapping

所以我有一个非常大的矩阵(120000 x 120000),我在整个矩阵上运行一个脚本,将元素与其他元素进行比较。因为我无法将整个内容保存在内存中,所以我使用memmap。我还定期刷新矩阵,以确保如果计算机崩溃或我没有丢失所有数据。但是,我注意到我进入矩阵的“更深”,可以说,刷新数据所需的时间增加了。最终,保存结果需要长达五分钟的时间。 Woudl有谁知道为什么这样做?我有更好的方法吗?我会发布一些代码,但我确信我没有做任何“错误”。

OUT_DIR = '/media/sf_3dAnalysis/simMatrix/'
SIM_FILE = 'similarity.npy'
data = np.lib.format.open_memmap(OUT_DIR+SIM_FILE, mode='w+', dtype='float32', shape=(120821,120821))
#After processing a certain amount of indices, I go to flush the data.
data.flush()

1 个答案:

答案 0 :(得分:0)

mmap适用于具有较小参考位置的问题 - 适合于物理学的问题。但是,听起来你正在使用mmap来获取53千兆字节的数据,并且引用的位置并不好。

如果你致力于mmap,你可能不得不接受这个工作负载的一点性能损失。

可能有助于某些的一件事是编写一个类,它将在内存中保留尽可能多的矩阵(可能是第一行),并将其余部分放在磁盘上(其余部分)行),未缓存(可能使用O_DIRECT)。

在你的情况下,缓存整个事情可能只会导致虚拟内存抖动,除非你有一个非常大的物理。但是,如果你有预算,53 + g的物理可能并非遥不可及。

如果您决定转到O_DIRECT路线,请查看以下内容: http://stromberg.dnsalias.org/~strombrg/odirect/