Hi!

I wrote a little ruby script to measure Ruby/JRuby performance in
different interpreters/platforms: a script to compute the N:th prime.
I guessed that it should  run almost equally fast on Windows and
Linux. But to my surprise there was a big difference. The same
computation with JRuby (the 100_000:th prime) took:

    Linux:        11 seconds
    Windows:   34 seconds

I used two machine with exactly the same hardware: " Intel(R)
Core(TM)2 Quad CPU    Q6600  @ 2.40GHz". One running Ubuntu 7.10, the
other Windows XP Professional. And I had almost the same Java version
too (I think):

-------------- Windows ---------------
c:\> java -version
java version "1.6.0_04"
Java(TM) SE Runtime Environment (build 1.6.0_04-b12)
Java HotSpot(TM) Client VM (build 10.0-b19, mixed mode, sharing)
-------------- Linux ---------------
% java -version
java version "1.6.0_03"
Java(TM) SE Runtime Environment (build 1.6.0_03-b05)
Java HotSpot(TM) Server VM (build 1.6.0_03-b05, mixed mode)
--------------------------------

To compare the Java versions I also rewrote the algorithm in Java, and
then they were equally fast on Windows and Ubuntu. But when I run my
ruby-script in JRuby Linux is three times faster.

Can you explain this to me? I don't understand the reason for this difference.

In both cases I use r5863 of JRuby, built locally on each machine.

/Johan Holmberg

I attach my script in case it matters:

-----------------------------------------
#!/usr/local/bin/ruby

require "monitor"

def is_prime(i)
    d = 3
    while d*d <= i
        if i % d == 0
            return false
        end
        d += 2
    end
    return true
end


def nth_prime(n)
    i = 1
    count = 1
    while count != n
        i += 2
        if is_prime(i)
            count += 1
        end
    end
    return i
end

threads = []
threads.extend(MonitorMixin)

t1 = Time.now

for str in ARGV
    threads << Thread.new(str) do |str2|
        if str2 == "sleep"
            sleep(5)
            threads.synchronize do
                puts "[%f]  sleep done " % [
                    (Time.now - t1),
                ]
            end
        else
            x2 = str2.to_i
            nth = nth_prime(x2)
            threads.synchronize do
                puts "[%f]  %d ---> %d" % [
                    (Time.now - t1),
                    x2,
                    nth,
                ]
            end
        end
    end
end

for t in threads
    t.join
end

puts "finishing ..."
-----------------------------------------

---------------------------------------------------------------------
To unsubscribe from this list, please visit:

    http://xircles.codehaus.org/manage_email


Reply via email to