[macruby-changes] [3855] MacRuby/trunk/sample-macruby/Scripts/gcd/benchmarks.rb
source_changes at macosforge.org
source_changes at macosforge.org
Wed Mar 24 13:38:08 PDT 2010
Revision: 3855
http://trac.macosforge.org/projects/ruby/changeset/3855
Author: ernest.prabhakar at gmail.com
Date: 2010-03-24 13:38:08 -0700 (Wed, 24 Mar 2010)
Log Message:
-----------
CSV output for gcd/benchmarks.rb sample
Modified Paths:
--------------
MacRuby/trunk/sample-macruby/Scripts/gcd/benchmarks.rb
Modified: MacRuby/trunk/sample-macruby/Scripts/gcd/benchmarks.rb
===================================================================
--- MacRuby/trunk/sample-macruby/Scripts/gcd/benchmarks.rb 2010-03-24 20:38:06 UTC (rev 3854)
+++ MacRuby/trunk/sample-macruby/Scripts/gcd/benchmarks.rb 2010-03-24 20:38:08 UTC (rev 3855)
@@ -8,7 +8,7 @@
raise "count: #{count} < 1" if count < 1
block.call
t = measure {count.times &block} / count
- Tms.new(*t.to_a[1..-1], label).inspect
+ Tms.new(*t.to_a[1..-1], label)
end
end
@@ -17,9 +17,12 @@
$folds = 32
$results = nil#[]
-puts "GCD Benchmarks"
-puts "Tasks: #{$max_tasks}\tFolded: #{$folds}\tReps:\t#{$reps}"
+METHODS = %w(iter p_iter apply concur serial nqueue njobs)
+puts "GCD BENCHMARKS"
+puts "Folds,\t#{$folds},\tMaxTasks,\t#{$max_tasks},\tReps,\t#{$reps}"
+puts "TYPE,\tTASKS,\t'TIME µsec'"
+
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))))) }
@@ -39,9 +42,12 @@
end
def concur(n)
- j = Dispatch::Job.new
- n.times {|i| j.add { work_function(i) }}
- j.join
+ g = Dispatch::Group.new
+ q = Dispatch::Queue.concurrent
+ n.times do |i|
+ q.async(g) {work_function(i)}
+ end
+ g.wait
end
def serial(n)
@@ -50,7 +56,7 @@
q.sync { }
end
-def multiq(n)
+def nqueue(n)
g = Dispatch::Group.new
n.times do |i|
Dispatch::Queue.new("org.macruby.gcd.multi.#{i}").async(g) {work_function(i)}
@@ -58,19 +64,21 @@
g.wait
end
+def njobs(n)
+ j = Dispatch::Job.new
+ n.times {|i| j.add { work_function(i) }}
+ j.join
+end
+
def bench(method, count=1)
proc = Proc.new { send(method.to_sym, count) }
- t = Benchmark.measure("%6s" % method, &proc)
- t_msec = t.real*1000
- puts "#{t.label}: %5.2f millisec (avg: %5.2f microsec)" % [t_msec, t_msec*1000/count]
+ t = Benchmark.repeat($reps, "%6s" % method, &proc)
+ puts "#{method},\t#{count},\t%6.2f" % (t.real*1e6/count)
end
n = 1
while n <= $max_tasks do
- puts "\n#{n} tasks"
- %w(iter p_iter apply concur serial multiq).each do |s|
- bench(s, n)
- end
+ METHODS.each { |method| bench(method, n) }
n *= 2
end
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20100324/2afb7d9a/attachment-0001.html>
More information about the macruby-changes
mailing list