Dominik Bathon
7/13/2006 12:42:00 AM
On Wed, 12 Jul 2006 20:11:53 +0200, Stephan Wehner
<stephanwehner@gmail.com> wrote:
> I ran this simple ruby script
>
> max = 5000
> z = 0
> 1.upto(max) do |x|
> 1.upto(max) do |y|
> z = (x+y-z) % 32000
> end
> end
> puts 'Got z = ' + z.to_s
>
> Results on an Intel Pentium 4 CPU 3.00GHz.
>
> 33 seconds -- ruby 1.8.4 (2005-12-24) [i386-linux]
>
> 20 seconds -- ruby 1.9.0 (2006-07-07) [i686-linux]
>
> 10 seconds -- ruby-yarv / ruby 2.0.0 (Base: Ruby 1.9.0 2006-04-08)
> [i686-linux]
> YARVCore 0.4.0 Rev: 510 (2006-07-06) [opts: ]
>
> 5 seconds -- ruby-yarv / ruby 2.0.0 (Base: Ruby 1.9.0 2006-04-08)
> [i686-linux]
> YARVCore 0.4.1 Rev: 519 (2006-07-12) [opts: [direct threaded code]
> [inline method cache] ]
Here are the results with Ruby2CExtension (HEAD revision, not 0.1.0) on a
Pentium M 1.5 GHz:
$ ruby -v
ruby 1.8.4 (2005-12-24) [i686-linux]
$ time ruby test.rb
Got z = 20000
real 0m31.163s
user 0m30.829s
sys 0m0.056s
$ rb2cx test.rb
$ time ruby -r test.so -e ""
Got z = 20000
real 0m11.980s
user 0m11.824s
sys 0m0.021s
And it is even faster with while loops:
$ cat test_while.rb
max = 5000
z = x = 0
while (x+=1) <= max
y = 0
while (y+=1) <= max
z = (x+y-z) % 32000
end
end
puts 'Got z = ' + z.to_s
$ time ruby test_while.rb
Got z = 20000
real 0m35.067s
user 0m34.705s
sys 0m0.059s
$ rb2cx test_while.rb
$ time ruby -r test_while.so -e ""
Got z = 20000
real 0m5.075s
user 0m5.019s
sys 0m0.015s
Dominik