blob: a76704d2c15003775b8b4ee595033ea33aedc17d [file] [log] [blame]
-- run benchmark scripts.
--
local write = io.write
local use_profiler = false
local profile_mode = 2
local profile_all = true
local prof_start = function(file,mode) end
local prof_stop = function() end
local output_fd = io.stdout
local old_print = print
local script_print = old_print
--local run_type = (arg and arg[1]) or "bench"
local run_type="test"
local function redirect_print(...)
for i,val in ipairs(...) do
write(val)
write("\t")
end
write("\n")
end
if use_profiler then
require("profiler")
if profile_all then
profiler.start("Stats.log", profile_mode)
else
prof_start = profiler.start
prof_stop = profiler.stop
end
end
local function run_bench(filename, input, ...)
local old_arg=arg
local old_input=io.input()
local title=nil
local sclock,eclock
for i,val in ipairs(...) do
if run_type ~= "bench" then
title=string.format("run script: '%s', with arg='%s'\n", filename, val)
write(title)
end
io.flush()
sclock=os.clock()
-- load script.
local func=loadfile(filename)
-- create arg environment variable for script.
local arg={}
arg[0]=filename
arg[1]=val
local env=getfenv(func)
env['arg'] = arg
env['print'] = script_print
-- redirect stdin
io.input(input)
io.flush()
-- redirect stdout
if output_fd ~= io.stdout then
io.output(output_fd)
if title then
write(title)
end
end
-- start script.
prof_start(filename .. '_arg_' .. val .. "_profile.log", profile_mode)
local res= {pcall(func,{val})}
prof_stop()
-- LLVM local begin
-- eclock=os.clock()
eclock=sclock
print(filename);
-- LLVM local end
io.output(io.stdout)
-- script finished.
io.flush()
print("results = ", unpack(res))
local idx=filename:find(".lua")
write(string.format("%s:%0.2f\n", filename:sub(7, idx-1), eclock - sclock))
collectgarbage("collect")
io.flush()
io.input(old_input)
end
arg=old_arg
end
local function print_script_list(list)
for i,v in ipairs(list) do
if v then
local script,input,params = unpack(v)
local idx=script:find(".lua")
if script:find("bench/") == 1 then
script = script:sub(7,idx-1)
if input == io.stdin then input = "" end
params = table.concat(params,",")
write(script)
write(":")
write(input)
write(":")
write(params)
write("\n")
end
end
end
end
local scripts_full={
{"tests/echo.lua", io.stdin, {"test","23425","908798","test"}},--only in full
{"bench/ackermann.lua", io.stdin, {9,10,11}},
{"bench/ary.lua", io.stdin, {3000,5000,7000,9000}},
{"bench/binarytrees.lua", io.stdin, {12,14,16}},
{"bench/chameneos.lua", io.stdin, {10000,100000,1000000}},
{"bench/except.lua", io.stdin, {100000,150000,200000,250000}},
{"bench/fannkuch.lua", io.stdin, {9,10,11}},
{"bench/fasta.lua", io.stdin, {25000,250000,2500000}},--only in full
{"bench/fibo.lua", io.stdin, {12,24,32}},
{"bench/harmonic.lua", io.stdin, {6000000,8000000,10000000}},
{"bench/hash.lua", io.stdin, {40000,60000,80000,100000}},
{"bench/hash2.lua", io.stdin, {50,100,150,200}},
{"bench/heapsort.lua", io.stdin, {20000,40000,60000,80000,100000}},
{"bench/hello.lua", io.stdin, {1,50,100,150,200}},
{"bench/knucleotide.lua", "input/knucleotide-input20000.txt", {1}},
{"bench/lists.lua", io.stdin, {4,8,12,16,18}},
{"bench/mandelbrot.lua", io.stdin, {200,400,600}},--only in full
{"bench/matrix.lua", io.stdin, {10,200,400,600}},
-- {"bench/message.lua", io.stdin, {1000,2000,3000}},
{"bench/meteor.lua", io.stdin, {0}},
{"bench/methcall.lua", io.stdin, {100000,400000,700000,1000000}},
{"bench/moments.lua", "input/moments-input400000.txt", {1}},
{"bench/nbody.lua", io.stdin, {200000,2000000,20000000}},
{"bench/nestedloop.lua", io.stdin, {8,12,16,18}},
{"bench/nsieve.lua", io.stdin, {7,8,9}},
{"bench/nsievebits.lua", io.stdin, {7,8,9}},
{"bench/objinst.lua", io.stdin, {400000,700000,1000000,1500000}},
{"bench/partialsums.lua", io.stdin, {25000,250000,2500000}},
{"bench/pidigits.lua", io.stdin, {600,800,1000}},
{"bench/process.lua", io.stdin, {1000,2000,3000}},
{"bench/prodcons.lua", io.stdin, {30000,70000,100000,150000}},
{"bench/random.lua", io.stdin, {9000,300000,600000,900000}},
{"bench/recursive.lua", io.stdin, {3,7,11}},
{"bench/regexdna.lua", "input/regexdna-input100000.txt", {1}},
{"bench/regexmatch.lua", "input/regexmatch-input2000.txt", {1}},
{"bench/revcomp.lua", "input/revcomp-input250000.txt", {1}},
{"bench/reversefile.lua", "input/reversefile-input50.txt", {1}},
{"bench/sieve.lua", io.stdin, {300,600,900,1200}},
{"bench/spectralnorm.lua", io.stdin, {500,1500,2500}},
{"bench/spellcheck.lua", "input/spellcheck-input30.txt", {1}},
{"bench/strcat.lua", io.stdin, {10000,20000,30000,40000}},
{"bench/sumcol.lua", "input/sumcol-input.txt", {1}},
{"bench/takfp.lua", io.stdin, {8,9,10}},
-- {"bench/tcprequest.lua", io.stdin, {120,160,200}},
{"bench/wc.lua", "input/wc-input3000.txt", {1}},
{"bench/wordfreq.lua", "input/wordfreq-input20.txt", {1}}
}
local scripts_medium={
{"bench/ackermann.lua", io.stdin, {9,10,11}},
{"bench/ary.lua", io.stdin, {7000,8000,9000,10000}},
{"bench/binarytrees.lua", io.stdin, {12,14,15}},
{"bench/chameneos.lua", io.stdin, {1000000,2000000,3000000}},
{"bench/except.lua", io.stdin, {500000,1000000,2000000,3000000}},
{"bench/fannkuch.lua", io.stdin, {9,10,11}},
{"bench/fibo.lua", io.stdin, {32,34,36}},
{"bench/harmonic.lua", io.stdin, {20000000,30000000,50000000}},
{"bench/hash.lua", io.stdin, {100000,200000,300000,400000}},
{"bench/hash2.lua", io.stdin, {300,400,500,600}},
{"bench/heapsort.lua", io.stdin, {200000,400000,600000,800000,1000000}},
{"bench/hello.lua", io.stdin, {1,50,100,150,200}},
{"bench/knucleotide.lua", "input/knucleotide-input20000.txt", {1}},
{"bench/lists.lua", io.stdin, {20,30,40,50,60}},
{"bench/matrix.lua", io.stdin, {200,400,600,700}},
{"bench/meteor.lua", io.stdin, {0}},
{"bench/methcall.lua", io.stdin, {700000,1000000,1500000,3000000}},
{"bench/moments.lua", "input/moments-input400000.txt", {1}},
{"bench/nbody.lua", io.stdin, {60000,200000,500000}},
{"bench/nestedloop.lua", io.stdin, {17,18,19,20}},
{"bench/nsieve.lua", io.stdin, {7,8,9}},
{"bench/nsievebits.lua", io.stdin, {7,8,9}},
{"bench/objinst.lua", io.stdin, {400000,700000,1000000,1500000}},
{"bench/partialsums.lua", io.stdin, {250000,2500000,5000000}},
{"bench/pidigits.lua", io.stdin, {600,800,1000}},
{"bench/process.lua", io.stdin, {10000,20000,30000}},
{"bench/prodcons.lua", io.stdin, {700000,800000,1000000,1500000}},
{"bench/random.lua", io.stdin, {3000000,5000000,7000000,9000000}},
{"bench/recursive.lua", io.stdin, {5,7,9}},
{"bench/regexdna.lua", "input/regexdna-input100000.txt", {1}},
{"bench/regexmatch.lua", "input/regexmatch-input2000.txt", {1}},
{"bench/revcomp.lua", "input/revcomp-input250000.txt", {1}},
{"bench/reversefile.lua", "input/reversefile-input50.txt", {1}},
{"bench/sieve.lua", io.stdin, {300,600,900,1200}},
{"bench/spectralnorm.lua", io.stdin, {500,1000}},
{"bench/spellcheck.lua", "input/spellcheck-input30.txt", {1}},
{"bench/strcat.lua", io.stdin, {1500000,4000000,7000000}},
{"bench/sumcol.lua", "input/sumcol-input2000.txt", {1}},
{"bench/takfp.lua", io.stdin, {8,9,10}},
{"bench/wc.lua", "input/wc-input3000.txt", {1}},
{"bench/wordfreq.lua", "input/wordfreq-input20.txt", {1}}
}
local scripts_short={
{"bench/ackermann.lua", io.stdin, {9}},
{"bench/ary.lua", io.stdin, {7000}},
{"bench/binarytrees.lua", io.stdin, {12}},
{"bench/chameneos.lua", io.stdin, {350000}},
{"bench/except.lua", io.stdin, {500000}},
{"bench/fannkuch.lua", io.stdin, {9}},
{"bench/fibo.lua", io.stdin, {31}},
{"bench/harmonic.lua", io.stdin, {20000000}},
{"bench/hash.lua", io.stdin, {200000}},
{"bench/hash2.lua", io.stdin, {250}},
{"bench/heapsort.lua", io.stdin, {150000}},
{"bench/hello.lua", io.stdin, {1}},
{"bench/knucleotide.lua", "input/knucleotide-input20000.txt", {1}},
{"bench/lists.lua", io.stdin, {35}},
{"bench/matrix.lua", io.stdin, {250}},
{"bench/meteor.lua", io.stdin, {0}},
{"bench/methcall.lua", io.stdin, {1000000}},
{"bench/moments.lua", "input/moments-input400000.txt", {1}},
{"bench/nbody.lua", io.stdin, {70000}},
{"bench/nestedloop.lua", io.stdin, {17}},
{"bench/nsieve.lua", io.stdin, {7}},
{"bench/nsievebits.lua", io.stdin, {6}},
{"bench/objinst.lua", io.stdin, {400000}},
{"bench/partialsums.lua", io.stdin, {800000}},
{"bench/pidigits.lua", io.stdin, {150}},
{"bench/process.lua", io.stdin, {60000}},
{"bench/prodcons.lua", io.stdin, {1000000}},
{"bench/random.lua", io.stdin, {3000000}},
{"bench/recursive.lua", io.stdin, {5}},
{"bench/regexdna.lua", "input/regexdna-input100000.txt", {1}},
{"bench/regexmatch.lua", "input/regexmatch-input2000.txt", {1}},
{"bench/revcomp.lua", "input/revcomp-input250000.txt", {1}},
{"bench/reversefile.lua", "input/reversefile-input50.txt", {1}},
{"bench/sieve.lua", io.stdin, {400}},
{"bench/spectralnorm.lua", io.stdin, {300}},
{"bench/spellcheck.lua", "input/spellcheck-input30.txt", {1}},
{"bench/strcat.lua", io.stdin, {1500000}},
{"bench/sumcol.lua", "input/sumcol-input2000.txt", {1}},
{"bench/takfp.lua", io.stdin, {8}},
{"bench/wc.lua", "input/wc-input3000.txt", {1}},
{"bench/wordfreq.lua", "input/wordfreq-input20.txt", {1}}
}
-- local scripts = scripts_full
--local scripts = scripts_medium
local scripts = scripts_short
local sclock,eclock
if run_type == "bench" then
output_fd = io.open("/dev/null","a")
script_print = function(...) end
elseif run_type == "test" then
if arg[2] then
output_fd = io.open(arg[2],"a")
script_print = redirect_print
end
end
if run_type ~= "script_lists" then
sclock=os.clock()
for i,v in ipairs(scripts) do
if v then
run_bench(unpack(v))
end
end
if profile_all and use_profiler then
profiler.stop()
end
--LLVM local begin
--eclock=os.clock()
eclock=sclock
--LLVM local end
write(string.format("Total bench time = %f\n", eclock - sclock))
io.close(output_fd)
else
write("#!/bin/sh\n\n")
write('SCRIPT_FULL_LIST="\n')
print_script_list(scripts_full)
write('"\n\n')
write('SCRIPT_MEDIUM_LIST="\n')
print_script_list(scripts_medium)
write('"\n\n')
write('SCRIPT_SHORT_LIST="\n')
print_script_list(scripts_short)
write('"\n\n')
end