为什么我的电脑上的 Windows 7 x64 运行速度比 x86 版本快,尽管我主要使用 x86 的东西?我出了什么问题?我错过了什么?
我使用的大多数东西都是 x86 的(例如 DAW、游戏、媒体播放器)。不过,它们中相当一部分是 x64 的(尽管它们的 x86 对应物也运行良好)。
我尝试在同一个系统上使用同样的东西,但总是发现 Windows 7 x64 的运行速度比 x86 略快。我非常细心。我甚至注意到最细微的窗口动画。
系统:Windows 7 旗舰版 x64
中央处理器: 英特尔酷睿2双核E7500 @ 2.93 GHz
内存:2 GB x 2 = 4 GB DDR2 @ 332 MHz
母板:英特尔 D945GCNL
显卡: ATI Radeon HD 4350 @ 1 GB 专用
声音的: M-Audio FastTrack 专业版
硬盘:三星 HD753LJ 733 GB 和三星 HD160JJ 156 GB
正如您所见,我的系统已经很旧了。
答案1
这是通过总结个别现有答案并添加一些内容来提供完整答案的尝试。该列表试图涵盖一般情况的所有可能性,即使某些可能性可以排除在特定情况之外。
CPU指令集差异
正如所描述的乔尔·库霍恩对于原生 x64 代码,可以使用更大的寄存器组,以及一些附加指令(例如,所有 x64 CPU 都保证实现 SSE 和 SSE2 指令)。这意味着原生 x64 操作系统和驱动程序可以更高效。
更好的 RAM 利用率
64b 是能够使用全部 4 GB(甚至在可用时更多)。此外,一些操作系统内部限制(分页/非分页池、最大缓存大小)随 64b OS 增加. 因此,内存分页和文件缓存都可能会更加高效。
硬盘位置不同
当你在同一磁盘的两个分区上安装两个操作系统时,其中一个分区靠近外边缘,通常速度更快。
不同的操作系统状态
当你拥有两个操作系统时,它们的状态可能会有所不同。其中一个操作系统可能比另一个操作系统碎片化更严重,其中一个操作系统的注册表可能更干净,安装的服务或后台应用程序可能比另一个操作系统少。
更好的驾驶员
另一种可能性是 x64 驱动程序的质量可能比 x86 更好,这并不是因为一些基本的架构差异,而仅仅是因为它们的供应商花了更多精力对其进行优化和微调。
64b 寻址
我添加这一点只是为了完整性,因为对于绝大多数日常应用来说,这种差异并不起作用,而且它与 Jasper 在他的问题中描述的绝对无关。
如果您有一个处理大量数据的应用程序(例如,在 Photoshop 中处理大量图片),只要您安装了 4 GB 或更多的 RAM,运行 64b 版本就能产生巨大的差异。
“更快”的真正含义是什么?
以下是对其他答案的评论那么,Jasper 能看到的“更快的东西”到底是什么呢:
- windows 动画更流畅
很难解释。Windows 7 中的 Windows 动画由 GPU 完成,GPU 也一样。CPU 的负载可以忽略不计。(我想你是使用 Aero 桌面)。
- 某些照片编辑程序绘制速度更快(x86 和 x64)
- 高清视频运行更流畅(在 MPC-HC x64 上),整体体验更稳定。
可以是更好调整的驱动程序或者利用 x64 的驱动程序。
- 文件复制速度更快
可能是由于更快的分区(与操作系统完全无关)或 x64 操作系统中更好的缓存处理造成的。
- 比赛没有出现任何变化。
可以理解。游戏性能由 CPU 和 GPU 决定。如果 CPU 受限,限制代码就是游戏本身,它是相同的 x86 代码,与 x64 操作系统的接口很少。因此 CPU 性能相同。GPU 相同。编程良好的游戏中的驱动程序和操作系统开销很低,因此任何驱动程序或操作系统差异都不太可能在这里显示出来。
答案2
从 32 位到 64 位的转变并不是 x64 架构中唯一的变化。x64 还增加了更多的 CPU 寄存器和新的 CPU 指令。知道如何利用这些的操作系统可以从相同的硬件中获得适度的性能提升。哦,重新获得以前分配给视频卡的 1GB RAM 也没什么坏处。
答案3
警告:这个问题比你可能意识到的要复杂一些,而且肯定比大多数答案所描述的要复杂一些。为了尽量涵盖至少多一点的故事,这篇文章相当长……
首先,关于视频内存的情况。视频卡的全部内存(至少通常)并不直接可见于 CPU 的地址空间。通常,CPU 可以看到大约 128-256 兆字节的视频内存“窗口”。GPU 可以将其内存的不同部分映射到该窗口,因此您通常可以从 CPU 写入大多数 GPU 内存,但您需要提前告诉 GPU 您要写入的内容,然后才能执行此操作。例如,当您使用 DirectX 并且想要直接写入图形内存时,您可以这样做 - 但要做到这一点,您首先要调用以LockRect
使 GPU 将正确的内存映射到窗口中(完成后,您立即调用以便UnlockRect
它可以根据需要映射其他内存)。至少在典型情况下,您可以在 BIOS 设置中调整视频窗口大小。
其次,即使在 32 位模式下,x86 处理器也支持所谓的物理地址扩展 (PAE),它允许 CPU 寻址超过 4 GB 的内存。Microsoft 确实在某些版本的 Windows 中支持 PAE——但仅限于相对昂贵的 Windows Server 企业版。此外,必须专门编写程序才能使用 AWE。只有少数程序(例如 SQL Server 企业版)曾经这样做过。底线:这是可能的,但相当罕见。
至于一次读取 64 位数据:最后一个一次只读取 32 位数据的处理器是 486。从奔腾开始,所有处理器都具有 64 位数据总线。请注意地址总线与数据总线不同,因此扩展到 64 位数据总线不是允许处理器使用更多内存(尽管碰巧的是,Pentium Pro 中加入了 PAE,因此几乎与向64位数据总线的扩展同时进行)。
尽管 Pentium 可以在一个时钟周期内读取 64 位数据,但其内部(大多数情况下)每次处理 32 位数据。更宽的总线主要有助于弥补 CPU 和主内存之间的速度差异。 Pentium MMX 的 MMX 指令支持以 64 位块处理数据,但使用起来相当笨拙,并且(特别是)大多数编译器不会生成 MMX 代码,因此您几乎必须用汇编语言编写才能使用它。 Pentium 还支持 64 位(和 80 位)浮点数运算,但这只用于大多数编程中的一小部分(而且通常比处理整数慢)。
x86-64 设计的通用寄存器数量是 32 位 x86 设计的两倍,每个寄存器都是 64 位宽。但是,当 CPU 以 32 位模式运行时,只有 32 位 CPU 上存在的寄存器子集可用。
回到浮点数,在 32 位模式下,浮点数运算使用最初为 Intel 8087 数学协处理器设计的指令集。这使用了一种模型,使其功能很难得到充分利用。Intel(和 AMD)最近添加了“流式 SIMD 扩展”或 SSE。大多数 64 位编译器生成的代码都可以/确实使用 SSE 而不是 8087 兼容浮点数。SSE 中的“SIMD”代表“单指令,多数据”。这意味着一SSE指令可以执行二对两个单独的数据进行浮点运算。虽然这不一定使速度加倍,通常至少可以提高一点点速度。
最后,我可能应该指出,这种比较有一部分通常有点不公平。当您安装新操作系统时,它几乎总是比已经使用了很长时间的操作系统至少快一点。程序将数据存储在注册表、硬盘驱动器等中。您添加的数据越多,在任何给定时间查找所需数据的工作量就越大。虽然销售“注册表清理器”等的公司经常夸大这种效果,但无论如何,这在某种程度上是正确的。因此,如果您所做的只是重新格式化硬盘驱动器并重新安装完全相同的操作系统,您可以期望看到一些速度改进——如果您已经安装并大量使用了旧操作系统很长时间,那么这种改进(完全是它本身)能相当可观。您看到的速度提升至少有一部分可能与两个操作系统之间的实际差异无关。
当然,还有更多,但你开始明白了。这不是一个单一特征造成巨大差异的问题,而是一个许多特征通常单独造成相当小的差异,但其中许多特征加在一起(甚至相乘)就会在整体上造成相当大的差异。
答案4
简单来说,这是因为您的计算机每个时钟周期可以处理 64 位(8 字节)的数据。您的处理器以预先安排的位(称为字)的形式接收数据。x64 架构中的字是 x86 架构中字的两倍。虽然您的处理器实际上可能没有更快地处理数据(您的 Core 2 在两种安装中都是 2.93 Ghz),但它处理数据的效率更高。此外,正如评论中提到的那样,它将允许您寻址所有 RAM,因为您的处理器正在以 64 位字从 RAM 中读取数据。从维基百科:
很多时候,在提到现代计算机的字长时,人们也会描述该计算机上的地址空间大小。例如,一台被称为“32 位”的计算机通常也允许 32 位内存地址;可字节寻址的 32 位计算机可以寻址 2^32 = 4,294,967,296 字节内存,或 4 千兆字节 (GB)。这似乎合乎逻辑且很有用,因为它允许将一个内存地址高效地存储在一个字中。
对于 64 位处理器,这个数字不会乘以 2,而是呈指数增加:
现代字节寻址的 64 位计算机在适当的操作系统支持下可以寻址 2^64 字节(或 16 艾字节),截至 2011 年这被认为实际上是无限的。
这文章虽然有些过时,但对于了解 64 位处理的工作原理来说,它仍然非常有用。
我想指出的是,这实际上并不意味着性能提高了 2 倍,这是因为实际性能取决于许多其他变量(磁盘速度、总线速度、处理器缓存、可用内存等)。但您应该看到 Windows 的性能有所提高,因为更多的操作系统可以加载到内存中并由处理器更有效地处理。