(这个问题试图找出为什么程序的运行在不同的处理器上会有所不同,因此它与编程的性能方面有关.)
以下程序需要3.6秒才能在拥有2.2GHz Core 2 Duo的Macbook上运行,并且在拥有2.53GHz Core 2 Duo的Macbook Pro上运行需要1.8秒.这是为什么?
这有点奇怪...当CPU的时钟速度仅快15%时为什么速度加倍?我仔细检查了CPU计量器,以确保2个核心都没有100%使用(以便看到CPU没有忙于运行其他东西).可能是因为一个是Mac OS X Leopard,一个是Mac OS X Snow Leopard(64位)?两者都运行Ruby 1.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
Run Code Online (Sandbox Code Playgroud)
以下是该程序的输出:
在2.2GHz Core 2 Duo :( 更新: 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
Run Code Online (Sandbox Code Playgroud)
2.53GHz Intel Core 2 Duo :( 更新: Macbook标识符:MacBookPro5,4,因此可能是Intel Core 2 Duo Penryn,带有3 MB片上L2缓存)
$ 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
Run Code Online (Sandbox Code Playgroud)
在Windows 7上运行测试:
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"
Run Code Online (Sandbox Code Playgroud)
英特尔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
Run Code Online (Sandbox Code Playgroud)
英特尔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
Run Code Online (Sandbox Code Playgroud)
同样奇怪的是,2.67GHz的i7比2.53GHz的Core 2 Duo慢.
erg*_*sys 12
我怀疑ruby后来在64位操作系统上切换到任意精度整数实现.
引用Fixnum ruby doc:
Fixnum保存可以在本机机器字(减1位)中表示的整数值.如果Fixnum上的任何操作超出此范围,则该值将自动转换为Bignum.
这里,本机机器字在技术上是64位,但是解释器被编译为在32位处理器上运行.
归档时间: |
|
查看次数: |
844 次 |
最近记录: |