[macruby-changes] [3853] MacRuby/trunk/sample-macruby/Scripts/gcd/benchmarks.rb
source_changes at macosforge.org
source_changes at macosforge.org
Wed Mar 24 13:37:58 PDT 2010
Revision: 3853
http://trac.macosforge.org/projects/ruby/changeset/3853
Author: ernest.prabhakar at gmail.com
Date: 2010-03-24 13:37:55 -0700 (Wed, 24 Mar 2010)
Log Message:
-----------
Update benchmark for new dispatch library
Added Paths:
-----------
MacRuby/trunk/sample-macruby/Scripts/gcd/benchmarks.rb
Added: MacRuby/trunk/sample-macruby/Scripts/gcd/benchmarks.rb
===================================================================
--- MacRuby/trunk/sample-macruby/Scripts/gcd/benchmarks.rb (rev 0)
+++ MacRuby/trunk/sample-macruby/Scripts/gcd/benchmarks.rb 2010-03-24 20:37:55 UTC (rev 3853)
@@ -0,0 +1,76 @@
+#!/usr/local/bin/macruby
+
+require 'benchmark'
+require 'dispatch'
+
+$max_tasks = 256
+$benched = $reps = 100
+$folds = 32
+$results = nil#[]
+
+puts "GCD Benchmarks"
+puts "Tasks: #{$max_tasks}\tFolded: #{$folds}\tReps:\t#{$reps}\n"
+
+def work_function(i)
+ x = 1.0+i*i
+ $folds.times {|j| x = Math::tan(Math::PI/2 - Math::atan(Math::exp(2*Math::log(Math::sqrt(x))))) }
+ $results[i] = x if not $results.nil?
+end
+
+def iter(n)
+ n.times {|i| work_function(i)}
+end
+
+def p_iter(n)
+ n.p_times {|i| work_function(i)}
+end
+
+def apply(n)
+ Dispatch::Queue.concurrent.apply(n) {|i| work_function(i)}
+end
+
+def job(n)
+ j = Dispatch::Job.new
+ n.times {|i| j.add { work_function(i) }}
+ j.join
+end
+
+def queue(n)
+ q = Dispatch::Queue.new('org.macruby.gcd.serial')
+ n.times {|i| q.async {work_function(i)}}
+ q.sync { }
+end
+
+def multi(n)
+ g = Dispatch::Group.new
+ n.times do |i|
+ Dispatch::Queue.new("org.macruby.gcd.multi.#{i}").async(g) {work_function(i)}
+ end
+ g.wait
+end
+
+
+def run(x, label, &block)
+ (x.nil?) ? yield : x.report(label) {$reps.times &block}
+end
+
+def run_all(x, n)
+ puts "#{n} tasks" if not x.nil?
+ run(x,"looped") { iter(n) }
+ run(x,"p_loop") { p_iter(n) }
+ run(x," apply") { apply(n) }
+ run(x,"concur") { job(n) }
+ run(x,"serial") { queue(n) }
+ run(x,"multiq") { multi(n) }
+ puts
+end
+
+n = 1
+width = 6
+while n <= $max_tasks do
+ run_all(nil, n)
+ Benchmark.bm(width) { |x| run_all(x, n) }
+ n *= 2
+end
+
+puts "Results: #{$results}" if not $results.nil?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20100324/e6cbaf77/attachment.html>
More information about the macruby-changes
mailing list