0

在一个通过 qsub 在具有 256GB 内存的集群上运行的程序中,我有一个总计 30GB 的大型全局记录数组。我目前是该集群上的唯一用户,因此与 RAM 的分配没有冲突。当在这个重新阵列上循环时,系统似乎将对象分流到磁盘上,而不是将其保存在 RAM 中,从而使循环速度减慢了 5 倍以上。我一直在研究通过以下方式在对象上使用 mmap 并收到以下错误。

m = mmap.mmap(myrecarray, 0)
MMAP TypeError: only length-1 arrays can be converted to Python scalars

m = mmap.mmap(myrecarray.fileno(), 0)
AttributeError: record array has no attribute fileno

是否可以用来在 RAMmmap中保存一个recarray对象,或者这是对 mmap 方法的完全滥用,还是只能对其他对象类型(如字符串或文件)执行此操作?

非常感谢

4

2 回答 2

2

而不是mmap您可能想要使用numpy.memmapnumpy.load打开数据文件。

或者查看“使用 numpy.memmap 映射设备文件”的答案以获取替代方法。

于 2014-02-09T00:09:44.827 回答
0

这个问题已经在这里回答了......

http://www.biostars.org/p/92704/#92764

本质上,这是对 mmap 方法的完全滥用。它似乎只对文件或字符串有用,而不是任何复杂的数据结构。

于 2014-02-10T09:46:28.093 回答