miller/scripts/early-multi-language-timings/tn.rb
2021-12-27 10:30:06 -05:00

90 lines
2.6 KiB
Ruby
Executable file

#!/usr/bin/ruby
require 'time'
# ================================================================
# Notes:
# * mlr --onidx --ofs ' ' filter '$experiment=="sort1b"' then cut -x -f experiment tn.out |pgr -nc -title cut -xlabel nlines -ylabel seconds -legend 'a b' -lop
#
# ...
# experiment=cat,nlines=100,mlrcat_seconds=3,awkcat_seconds=4
# experiment=cat,nlines=200,mlrcat_seconds=3,awkcat_seconds=4
# experiment=cat,nlines=300,mlrcat_seconds=3,awkcat_seconds=4
# experiment=cat,nlines=400,mlrcat_seconds=3,awkcat_seconds=4
# experiment=cut,nlines=100,mlrcut_seconds=3,awkcut_seconds=4
# experiment=cut,nlines=200,mlrcut_seconds=3,awkcut_seconds=4
# experiment=cut,nlines=300,mlrcut_seconds=3,awkcut_seconds=4
# experiment=cut,nlines=400,mlrcut_seconds=3,awkcut_seconds=4
# ...
# ================================================================
def run_progs_for_linecounts(experiment, linecounts, progdesc_map)
linecounts.each do |linecount|
run_progs_for_linecount(experiment, linecount, progdesc_map)
end
end
def run_progs_for_linecount(experiment, linecount, progdesc_map)
timing_fields = progdesc_map.collect do |progdesc, prog|
seconds = run_prog(experiment, linecount, progdesc, prog)
"#{progdesc}=#{seconds}"
end
puts "experiment=#{experiment},linecount=#{linecount},#{timing_fields.join(',')}"
end
def run_prog(experiment, linecount, progdesc, prog)
filename = "data/nlines/#{linecount}"
cmd = "#{prog} < #{filename} > /dev/null"
seconds = run_cmd(progdesc, cmd)
seconds
end
def run_cmd(desc, cmd)
t1 = Time.new
system(cmd)
status = $?
t2 = Time.new
secs = t2.to_f - t1.to_f
if status.to_i == 0
secs
else
'error'
end
end
# ----------------------------------------------------------------
linecounts = [1, 100000, 200000, 300000, 400000, 500000, 600000, 700000, 800000, 900000, 1000000]
run_progs_for_linecounts('cat', linecounts, {
"cat" => "cat",
"catc0" => "catc0",
"catc" => "catc",
"awkcat" => "awk -F , '{print}'",
"mlrcat" => "mlr cat"
})
run_progs_for_linecounts('cut', linecounts, {
"cut" => "cut -d , -f 1,4",
"awkcut" => "awk -F , '{print $1,$4}'",
"mlrcat" => "mlr cut -f a,x"
})
run_progs_for_linecounts('add', linecounts, {
"awkadd" => "awk -F, '{gsub(\"x=\",\"\",$4);gsub(\"y=\",\"\",$5);print $4+$5}'",
"mlradd" => "mlr put '$z=$x+$y'"
})
run_progs_for_linecounts('sort2', linecounts, {
"sort" => "sort -t, -k 1,4",
"mlrsort" => "mlr sort a,x"
})
run_progs_for_linecounts('sort1s', linecounts, {
"sort" => "sort -t, -k 1",
"mlrsort" => "mlr sort a"
})
run_progs_for_linecounts('sort1b', linecounts, {
"sort" => "sort -t, -k 4",
"mlrsort" => "mlr sort x"
})