32位操作与64位机器/ OS上的64位操作

时间:2010-04-06 21:28:23

标签: 32bit-64bit

哪种操作,即32位操作或64位操作(如屏蔽32位标志或64位标志),在64位机器上会更便宜?

3 个答案:

答案 0 :(得分:4)

由于您没有指定架构,我只能建议一般性答案,因为它取决于操作和处理器架构。一旦将数据存储在CPU寄存器中,那么无论该值是最初的32位还是64位,大多数操作通常都会花费相同的时间。

但是,某些架构在数据如何进入寄存器方面可能存在一些差异。以下是某些情况,其中“本机”值可能比某些硬件上的较小值快:

获取数据

  • 获取“原生大小”值可能更快而不是获取较小的值。也就是说,处理器可能需要获取64位,然后屏蔽/移位32位以“加载”32位值。在处理64位值时不需要这种屏蔽/移位,因此可以更快地加载。 (这与直观的想法相反,即两倍大的东西可能需要两倍的加载时间。)

  • 或者,如果总线可以处理半宽读取,则可以在64位值的同时加载32位。

  • 为了更加困惑,CPU缓存也可以改变结果。通常,当您从内存中读取一个值时,会将几个内存位置的“行”读入缓存,以便后续读取可以从快速缓存中提供,而不需要从RAM完全获取。在这种情况下,如果您按顺序访问许多值,使用32位值会更快,因为将缓存两倍的值,从而减少缓存未命中。

<强>计算

  • 处理器硬件针对处理64位值进行了优化,因此使用32位计算值可能会使其更加麻烦,从而可能减慢速度。例如它可能能够“本地”处理双(64位)值,但必须先将float(32位)值转换为double才能处理它,然后将结果转换回float。

  • 或者,通过CPU可能有32位和64位路径,或者CPU可能能够以不影响指令总体执行时间的方式进行所需的任何转换,在哪种情况下,它们可以以相同的速度计算。

  • 这可能会影响复杂操作(浮点)但不太可能是简单操作(AND,OR等)的问题

答案 1 :(得分:2)

一般而言,64位操作或32位操作将具有相同的成本。 32位操作最终可能需要额外的指令,具体取决于编译器是否需要确保64位寄存器的高32位被清除(或符号扩展),但该操作通常成本很低。 / p>

指令编码可能会有一些差异,可能会使一个人占用更多的空间,但那个(以及优势所在的方式)将取决于许多因素。

答案 2 :(得分:2)

它取决于 - 屏蔽标志通常会使用AND指令,一旦数据在寄存器中,它将快速执行(~1个周期)。从内存加载64位数据通常比加载32位数据慢 - 但是如果你使用超过32个标志,你必须加载超过32位的数据,并在一个处理掩码循环将改善在两个或三个指令中执行它的速度。这些是否会对整体速度产生影响通常取决于周围的指令 - 例如,如果数据已经在缓存中,您可能不需要从内存中加载它。

换句话说,很难进行概括 - 你只需要查看一个特定的代码序列(不只是一条指令,而是整个序列)来说什么 - 而且该序列的结果可能并不意味着很多关于最初几乎相同的另一个序列。