代码之家  ›  专栏  ›  技术社区  ›  nonopolarity

为什么有些Ruby代码在2.53GHz处理器上的运行速度是在2.2GHz Core2Duo处理器上的两倍?

  •  9
  • nonopolarity  · 技术社区  · 14 年前

    (这个问题试图找出为什么一个程序在不同的处理器上运行是不同的,所以它与编程的性能方面有关。)

    以下程序将需要3.6秒在一台拥有2.2GHz Core 2 Duo的Macbook上运行,1.8秒在一台拥有2.53GHz Core 2 Duo的Macbook Pro上运行。为什么?

    有点奇怪。。。当CPU的时钟速度只有15%时,为什么要加倍?我仔细检查了CPU仪表,以确保两个内核都没有100%使用(以便看到CPU不忙于运行其他东西)。可能是因为一个是MacOSX豹,一个是MacOSX雪豹(64位)?两者都在运行Ruby1.9.2。

    p RUBY_VERSION
    p RUBY_DESCRIPTION if defined? RUBY_DESCRIPTION
    n = 9_999_999
    p n
    
    t = 0; 1.upto(n) {|i| t += i if i%3==0 || i%5==0}; p t
    

    以下只是程序的输出:

    更新: Macbook标识符:MacBook3,1,因此可能是Intel Core 2 Duo(T7300/T7500)

    $ time ruby 1.rb
    "1.9.2"
    "ruby 1.9.2p0 (2010-08-18 revision 29036) [i386-darwin9.8.0]"
    9999999
    23333331666668
    
    real  0m3.784s
    user  0m3.751s
    sys  0m0.021s
    

    2.53GHz Intel Core 2双核:( 更新:

    $ time ruby 1.rb
    "1.9.2"
    "ruby 1.9.2p0 (2010-08-18 revision 29036) [x86_64-darwin10.4.0]"
    9999999
    23333331666668
    
    real  0m1.893s
    user  0m1.809s
    sys  0m0.012s
    

    time_start = Time.now
    
    p RUBY_VERSION
    p RUBY_DESCRIPTION if defined? RUBY_DESCRIPTION
    
    n = 9_999_999
    p n
    
    t = 0; 1.upto(n) {|i| t += i if i%3==0 || i%5==0}; p t
    
    print "Took #{Time.now - time_start} seconds to run\n"
    

    英特尔Q6600四核2.4GHz,运行Windows 7,64位:

    C:\> ruby try.rb
    "1.9.2"
    "ruby 1.9.2p0 (2010-08-18) [i386-mingw32]"
    9999999
    23333331666668
    Took 3.248186 seconds to run
    

    英特尔920 i7 2.67GHz,运行Windows 7,64位:

    C:\> ruby try.rb
    "1.9.2"
    "ruby 1.9.2p0 (2010-08-18) [i386-mingw32]"
    9999999
    23333331666668
    Took 2.044117 seconds to run
    

    5 回复  |  直到 13 年前
        1
  •  12
  •   ergosys    14 年前

    我怀疑ruby正在切换到任意精度整数实现 稍后在64位操作系统上。

    引用Fixnum ruby文档:

    Fixnum保存的整数值可以 代表 (减1位)。如果有任何操作 如果Fixnum超出此范围,则 比格努姆。

    在这里,本机字从技术上讲是64位的,但是解释器被编译为在32位处理器上运行。

        2
  •  2
  •   stakx - no longer contributing Saravana Kumar    14 年前

    当CPU的时钟速度只有15%时,为什么要加倍?

    很简单,因为计算机的性能不仅仅取决于CPU的时钟速度。

    • CPU体系结构,包括CPU上的核数,或并行运行多个指令的一般能力
    • CPU缓存大小
    • 已安装的内存芯片(有些比其他快)
    • 额外安装的硬件(可能会因硬件中断而减慢系统速度)
    • 不同的操作系统

    我相信在上面的列表中还有很多东西要添加。我不想再详细说明这一点,但如果有人喜欢,请随意添加到上面的列表中。

        3
  •  2
  •   krosenvold    14 年前

    我得出的唯一结论是,不同的CPU组合将有不同的热步进阈值;一些“最佳”芯片的性能更好。我还怀疑其他“小”硬件故障/变化在这里起了作用。也许慢盒有稍微不同的组件,在一起玩得不太好?

    有一些工具会告诉你,如果你的CPU是节流热的原因。

        4
  •  2
  •   Klinky    14 年前

    举个例子,如果2.2Ghz的CPU是Intel Core2 E4500,它有以下规格:

    • 时钟:2.2Ghz
    • FSB:800MT/秒
    • 工艺尺寸:65nm

    与你的MacBook Pro中的T9400相比

    • 时钟:2.53Ghz
    • FSB:1066MT/秒
    • 工艺尺寸:45nm

    另外,你在达尔文的x64上运行它。所有这些事情加起来肯定会使一个微不足道的小脚本执行得更快。

        5
  •  1
  •   Dani    14 年前

    你需要完全相同的操作系统,相同的进程,相同的内存。