pp_perfs.rb
1.06 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#!/usr/bin/env ruby
# encoding: UTF-8
class String
def / other
File.join(self, other)
end
end
def mean(values)
values.inject(:+) / values.size.to_f
end
def parse_output(file)
values = Hash.new { |h, k| h[k] = [] }
range = 0
IO.foreach(file) do |line|
case line
when /range: (\d+)/
range = $1
when /pp_step/
time = line.scan(/time\[(\d+)\]/).first.first.to_i
values[range] << time
end
end
p values
results = Hash.new
values.each do |k, v|
p k, mean(v)
results[k] = mean(v)
end
results
end
unless ARGV.size == 1
$stderr.puts "Usage: #$0 <pp result dir>"
exit 1
end
DEST_DIR = ARGV.first
cpu = parse_output(DEST_DIR / "perf_preypredator_cpu.txt")
gpu = parse_output(DEST_DIR / "perf_preypredator_gpu.txt")
output = DEST_DIR / "perfs.txt"
File.open(output, "w") do |out|
cpu.each_key do |key|
puts [key, cpu[key], gpu[key]].join(" ")
out.puts [key, cpu[key], gpu[key]].join(" ")
end
end