在 64 位操作系统的 64 位 CPU 上运行 X86-64 Python 有啥好处吗?
Posted
技术标签:
【中文标题】在 64 位操作系统的 64 位 CPU 上运行 X86-64 Python 有啥好处吗?【英文标题】:Are there benefits to running X86-64 Python on a 64-bit CPU in a 64-bit OS?在 64 位操作系统的 64 位 CPU 上运行 X86-64 Python 有什么好处吗? 【发布时间】:2011-06-01 20:34:33 【问题描述】:运行 amd64 版本的 Python 和扩展有哪些好处? (很多扩展compiled for amd64 here。)我有一个 i5 处理器和 Win7 64 位,所以看起来它是合适的。但听起来它也有问题、测试版、不受支持等。
它真的提供了性能优势吗?在哪些领域?我会运行 SciPy、NumPy 等。我偶尔会遇到 32 位 Python 的“内存不足”错误,而我的机器有 4 GiB 的 RAM。
如果不存在 64 位版本的软件包,是否可以在 64 位 Python 基础上安装 win32 软件包?
【问题讨论】:
由于 Anaconda 等原因,安装它的难度现在已经过时了。也许问题应该改写为仅涵盖 64 位 Python 的好处? 如果你这样做,所有过去的答案都会过时。最好提出一个新问题并参考这个问题。一些询问要求和内容标准随着时间的推移而发生变化,所以参考这个问题绝对是必须的! 如果您要问这样的新问题,请包括一些针对 32 位和 64 位软件版本的基准测试图像。恕我直言。该测试需要包括等量的浮点和整数计算、GPU 与 CPU 以及 CPU/GPU 组合工作、各种特定的 cos、tan、sin 计算操作,以使其也具有科学相关性。最后但并非最不重要的一些 pygames 为了好玩...... Snake Tetris 和 Pacman! 【参考方案1】:使用 64 位 Python 的主要理由是您可以访问超过 2GB 的主内存,例如如果您有大字典、列表或长字符串。这需要您在系统中实际拥有足够多的内存才能实用。
第二个影响是在 AMD64 模式下,CPU 有更多的寄存器,因此生成的代码可能会运行得稍微快一些(对于整数运算)。
Windows 上 64 位模式的 Python 肯定不是测试版或不受支持。它可能有问题,但前提是您确实拥有非常大的数据结构。 64 位 Python 已经有大约 15 年了(虽然不在 Windows 上)。
【讨论】:
难道不是更多的寄存器会加速任何使用寄存器的东西,而不仅仅是整数运算? @endolith:由于附加寄存器是整数寄存器,因此广泛使用浮点运算的代码无法从这种扩展中受益。当然,您很少有纯粹使用浮点运算的代码,因此任何代码都可能受益——除非它已经单独处理 x86 寄存器。 @endolith 和 Martin:x86-64 的 XMM 寄存器 (16) 是 16 个整数寄存器的两倍。更好的是,ABI 指定在 XMM 寄存器中而不是在传统 x87 寄存器中传递/返回 FP 参数。将 SSE2 作为架构的必需部分非常好,这意味着所有程序都可以使用它而无需检查 CPUID 功能位。 x86-64 在很多情况下的主要好处是它通常比为 32 位编译的相同代码快约 10%。当然,如果您需要大量内存或 64 位整数,那就太好了。 (或 Python 使用的任意精度整数)【参考方案2】:与所有其他 64 位程序的优势相同:大量的进程空间,以及访问更多更大的寄存器(至少对于 VM 和 C 模块)。但是不行,你需要找到 64 位版本的 C 模块。
【讨论】:
【参考方案3】:一般来说,使用 64 位代码可以获得正常收益。我还没有找到任何最近的基准,但是在 x64 引入时,代码在 64 位上的运行速度比在 x86 硬件上的 32 位上快 30%——从那时起,随着优化,这个差距肯定已经缩小了,但是仍然可能更快。
此外,您还可以在需要时透明地使用超过 4GB 的内存。
但是请注意,64 位的速度提升是由于糟糕的 32 位传统 ABI:在 32 位中运行的核心 i7 具有与 1987 年 80386 芯片中相同的 4 个通用寄存器(以及其他几个寄存器)。从 70 年代开始,那些 1:1 映射到 8086 上的寄存器。 64 位 abi 引入了更多(真正的)通用寄存器,这使得它获得了速度增益。否则,64 位代码只会花费两倍的缓存内存,这使得它在其他架构(如 PPC)中实际上比 32 位代码慢。
【讨论】:
【参考方案4】:多年来,我一直在 Linux 上运行 64 位 Python。没问题,它不是越野车。这包括numpy。我不会担心这个。
一个小好处:
Python> sys.maxint
9223372036854775807
但是,我想有人可能会争论这样做是否有任何好处,但一般来说,所有 64 位应用程序都是如此。
在处理大量数据时,您会获得最大的收益。
【讨论】:
【参考方案5】:我想你会通过 SciPy 和 NumPy 获得性能提升,因为当你向处理器添加更多位时,数字处理和计算会得到极大的改进。但我不能确定。
您总是可以并排运行 64 位和 32 位并进行一些比较,我很想知道数字运算方面的测试结果。如果您同时运行两者的相同版本,只要您拥有两者所需的模块,代码就可以在两者上正常运行。
【讨论】:
我做了一个非常短的比较时间it fft(rand(1021))。使用 Python(x,y) 32 位:每个循环 3.37 毫秒。使用 64 位 MKL 版本:每个循环 2.56 毫秒以上是关于在 64 位操作系统的 64 位 CPU 上运行 X86-64 Python 有啥好处吗?的主要内容,如果未能解决你的问题,请参考以下文章