/mobile Handheld Friendly website
x64 Ubuntu : Intel® Q6600® one core |
Each table row shows performance measurements for this Ruby JRuby program with a particular command-line input value N.
| N | CPU secs | Elapsed secs | Memory KB | Code B | ≈ CPU Load |
|---|---|---|---|---|---|
| 60,000 | 5.74 | 5.77 | 113,828 | 928 | 0% 0% 1% 100% |
| 600,000 | 8.51 | 8.55 | 288,824 | 928 | 0% 0% 1% 100% |
| 6,000,000 | 31.73 | 31.79 | 479,572 | 928 | 1% 0% 0% 100% |
Read the ↓ make, command line, and program output logs to see how this program was run.
Read chameneos-redux benchmark to see what this program should do.
jruby 1.7.2 (1.9.3p327) 2013-01-04 302c706 on Java HotSpot(TM) 64-Bit Server VM 1.7.0_11-b21 [linux-amd64]
# The Computer Language Benchmarks Game # http://benchmarksgame.alioth.debian.org/ # contributed by Michael Barker # based on a Java contribution by Luzius Meisser # converted to C by dualamd # converted to Ruby by Eugene Pimenov require 'thread' COLORS = [:blue, :red, :yellow, :invalid].freeze COMPLIMENT = { :blue => {:blue => :blue, :red => :yellow, :yellow => :red}.freeze, :red => {:blue => :yellow, :red => :red, :yellow => :blue}.freeze, :yellow => {:blue => :red, :red => :blue, :yellow => :yellow}.freeze }.freeze $creature_id = 0 NUMBERS = %w{zero one two three four five six seven eight nine}.freeze # convert integer to number string: 1234 -> "one two three four" def format_number(num) out = [] begin out << NUMBERS[num%10] num /= 10 end while num > 0 out.reverse.join(" ") end class MeetingPlace attr_reader :mutex attr_accessor :meetings_left, :first_creature def initialize(meetings) @mutex = Mutex.new @meetings_left = meetings end end class Creature attr_accessor :place, :thread, :count, :same_count, :color, :id, :two_met, :sameid def initialize(place, color) @place = place @count = @same_count = 0 @id = ($creature_id += 1) @color = color @two_met = FALSE @thread = Thread.new do loop do if meet Thread.pass while @two_met == false @same_count += 1 if @sameid @count += 1 else break end end end end def meet @place.mutex.lock if @place.meetings_left > 0 if @place.first_creature first = @place.first_creature new_color = COMPLIMENT[@color][first.color] @sameid = first.sameid = @id == first.id @color = first.color = new_color @two_met = first.two_met = true @place.first_creature = nil @place.meetings_left -= 1 else @two_met = false @place.first_creature = self end true else false end ensure @place.mutex.unlock end def result '' << @count.to_s << ' ' << format_number(@same_count) end end def run_game(n_meeting, colors) place = MeetingPlace.new(n_meeting) creatures = [] colors.each do |color| print color, " " creatures << Creature.new(place, color) end puts # wait for them to meet creatures.each { |c| c.thread.join} total = 0 # print meeting times of each creature creatures.each do |c| puts c.result total += c.count end # print total meeting times, should be equal n_meeting print ' ', format_number(total), "\n\n" end def print_colors_table [:blue, :red, :yellow].each do |c1| [:blue, :red, :yellow].each do |c2| puts "#{c1} + #{c2} -> #{COMPLIMENT[c1][c2]}" end end end n = (ARGV[0] || 600).to_i print_colors_table puts run_game n, [:blue, :red, :yellow] run_game n, [:blue, :red, :yellow, :red, :yellow, :blue, :red, :yellow, :red, :blue]
Sat, 19 Jan 2013 03:05:51 GMT MAKE: mv chameneosredux.jruby chameneosredux.rb 0.01s to complete and log all make actions COMMAND LINE: /usr/local/src/jruby-1.7.2/bin/jruby -Xcompile.invokedynamic=true -J-server -J-Xmn512m -J-Xms2048m -J-Xmx2048m chameneosredux.rb 6000000 PROGRAM OUTPUT: blue + blue -> blue blue + red -> yellow blue + yellow -> red red + blue -> yellow red + red -> red red + yellow -> blue yellow + blue -> red yellow + red -> blue yellow + yellow -> yellow blue red yellow 3941604 zero 4008445 zero 4049951 zero one two zero zero zero zero zero zero blue red yellow red yellow blue red yellow red blue 1182445 zero 1190153 zero 1217321 zero 1212837 zero 1186130 zero 1229270 zero 1201210 zero 1212219 zero 1181346 zero 1187069 zero one two zero zero zero zero zero zero