【问题标题】:What is max size of the file in 64-bit system using numpy memory mapping使用 numpy 内存映射的 64 位系统中文件的最大大小是多少
【发布时间】:2018-04-10 20:19:22
【问题描述】:

我正在尝试处理大约 50 GB 的大文件。我正在尝试使用 numpy 内存映射访问文件。我看到用于内存映射的文件大小有一个限制,对于 32 位系统,它是 2GB。这是链接:https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.memmap.html

我想知道使用 numpy 内存映射以获得良好性能是否对文件大小有硬性限制。

【问题讨论】:

  • this question相关的吗?
  • 当前 x86_64 处理器对地址空间大小有 48 位硬限制,但您将在访问之前完成存储页面条目所需的物理 RAM。
  • 你真的有超过 50GB 的内存吗?如果是这样,答案几乎肯定是肯定的。如果不是,您只是希望操作系统交换页面比窗口化 mmap 等更有效或更简单(它不会更有效,但它可能足够有效......),答案可能是肯定的,但是试试看。有关详细信息,请参阅我的回答。

标签: python numpy memory-mapped-files memory-mapping numpy-memmap


【解决方案1】:

您通常不必担心 64 位 mmap 的限制,但我会解释原因。


首先,32 位平台理论上最多可以支持2**32,即 4GB。但是操作系统为自己保留了其中的一部分。在 Windows 上,这个块默认为 2GB(您可以将其配置为更低,但某些软件可能会因为它假定使用“签名指针”是安全的而损坏),而在其他平台上它通常更像 512MB。

同样,64 位平台理论上可以支持高达2**64 或 16EB。在这里,无论操作系统保留 512MB 还是 2GB 都不会产生重大影响。


但是,您的硬件可能会限制在 44 到 56 位之间(大多数当前系统是 48 位),而 44 位只有 256TB。

您的操作系统可能会进一步限制事情。 IIRC,最早的 64 位 linux 内核只使用了 40 位(因为当时没有硬件可以使用更多),也就是只有 1TB。

最后,在 Windows 上,如果您使用的是“基本”或“入门”版本,它可能会将 Windows 8 家庭基本版的容量进一步限制为 8GB。这是唯一可能影响您的文件的一项。


但是,与后期 32 位的情况不同,2018 年几乎没有人拥有比他们的操作系统一次可以分页更多的物理 RAM。很多人在 RAM 超过 4GB 的机器上运行 32 位 Windows(或 64 位 Windows 上的 32 位 Python),但几乎不可能使用 40 位受限操作系统加载 64 位系统拥有超过 1TB 的 RAM。

因此,无论您拥有多少内存,您都应该能够将大部分内存用于mmap


有时,您想mmap 一个实际上不适合您的 RAM 的文件。然后,您将依赖操作系统的页面交换,这当然比窗口化文件的较小映射效率低,但可能足够高效,并且可能更简单。

在这种情况下,它可能可以在您的系统上运行,但是如果您不知道比您告诉我们的更多信息,就无法确定。最简单的答案(与 Python 一样)是 EAFP:尝试一下,并准备处理失败的异常(无论是通过编程方式,还是通过读取堆栈跟踪并在 StackOverflow 上搜索解决方案)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-22
    • 1970-01-01
    • 1970-01-01
    • 2022-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    相关资源
    最近更新 更多