gpt4 book ai didi

python - 使用numpy内存映射的64位系统中文件的最大大小是多少

转载 作者:行者123 更新时间:2023-12-02 03:37:17 25 4
gpt4 key购买 nike

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

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

最佳答案

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


首先,32 位平台理论上最多可支持 2**32,即 4GB。但操作系统为自己保留了其中的一部分。在 Windows 上,该 block 默认为 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。

因此,无论您有多少 RAM,您都应该能够将其中大部分用于 mmap


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

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

关于python - 使用numpy内存映射的64位系统中文件的最大大小是多少,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49762240/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com