source: EcnlProtoTool/trunk/mruby-1.2.0/tasks/benchmark.rake@ 321

Last change on this file since 321 was 321, checked in by coas-nagasima, 7 years ago

文字コードを設定

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/x-ruby;charset=UTF-8
File size: 2.0 KB
Line 
1module MRuby
2 BENCHMARK_REPEAT = 4
3end
4
5$dat_files = []
6
7def bm_files
8 Dir.glob("#{MRUBY_ROOT}/benchmark/bm_*.rb")
9end
10
11def build_config_name
12 if ENV['MRUBY_CONFIG']
13 File.basename(ENV['MRUBY_CONFIG'], '.rb').gsub('build_config_', '')
14 else
15 "build"
16 end
17end
18
19def plot_file
20 File.join(MRUBY_ROOT, 'benchmark', "#{build_config_name}.png")
21end
22
23def plot
24 opts_file = "#{MRUBY_ROOT}/benchmark/plot.gpl"
25 opts = File.read(opts_file).each_line.to_a.map(&:strip).join(';')
26
27 dat_files = $dat_files.group_by {|f| File.dirname(f).split(File::SEPARATOR)[-1]}
28
29 opts += ";set output '#{plot_file}'"
30
31 opts += ';plot '
32
33 opts += dat_files.keys.map do |data_file|
34 %Q['-' u 2:3:4:xtic(1) w hist title columnheader(1)]
35 end.join(',')
36 opts += ';'
37
38 cmd = %Q{gnuplot -p -e "#{opts}"}
39
40 IO.popen(cmd, 'w') do |p|
41 dat_files.each do |target_name, bm_files|
42 p.puts target_name.gsub('_', '-')
43 bm_files.each do |bm_file|
44 p.write File.read(bm_file)
45 end
46 p.puts "e"
47 end
48 end
49end
50
51
52MRuby.each_target do |target|
53 next if target.name == 'host'
54 mruby_bin = "#{target.build_dir}/bin/mruby"
55
56 bm_files.each do |bm_file|
57 bm_name = File.basename bm_file, ".rb"
58
59 dat_dir = File.join('benchmark', build_config_name, target.name)
60 dat_file = File.join(dat_dir, "#{bm_name}.dat")
61 $dat_files << dat_file
62
63 directory dat_dir
64
65 file dat_file => [bm_file, dat_dir, mruby_bin] do |task|
66 print bm_name
67 puts "..."
68
69 data = (0...MRuby::BENCHMARK_REPEAT).map do |n|
70 str = %x{(time -f "%e %S %U" #{mruby_bin} #{bm_file}) 2>&1 >/dev/null}
71 str.split(' ').map(&:to_f)
72 end
73
74 File.open(task.name, "w") do |f|
75 data = data.map {|_,r,s| (r + s) / 2.0}
76 min = data.min
77 max = data.max
78 avg = data.inject(&:+) / data.size
79 f.puts "#{bm_name.gsub('_', '-')} #{avg} #{min} #{max}"
80 end
81 end
82 end
83end
84
85file plot_file => $dat_files do
86 plot
87end
88
89task :benchmark => plot_file do
90 plot
91end
Note: See TracBrowser for help on using the repository browser.