171 lines
5.9 KiB
Julia
171 lines
5.9 KiB
Julia
|
using CSV
|
||
|
using DataFrames
|
||
|
using Plots
|
||
|
using StatsPlots
|
||
|
using LaTeXStrings
|
||
|
|
||
|
if (length(ARGS) < 1)
|
||
|
println("Please use with \"input_file.csv\"")
|
||
|
end
|
||
|
|
||
|
processes = [
|
||
|
"QED Process: 'ke->ke'",
|
||
|
"QED Process: 'ke->kke'",
|
||
|
"QED Process: 'ke->kkke'",
|
||
|
#"QED Process: 'ke->kkkke'",
|
||
|
#"QED Process: 'ke->kkkkke'",
|
||
|
#"QED Process: 'ke->kkkkkke'",
|
||
|
#"QED Process: 'ke->kkkkkkke'",
|
||
|
"ABC Process: 'AB->AB'",
|
||
|
"ABC Process: 'AB->ABBB'",
|
||
|
#"ABC Process: 'AB->ABBBBB'",
|
||
|
]
|
||
|
|
||
|
function proc_to_n(str::AbstractString)
|
||
|
parts = split(str, "'")
|
||
|
parts = split(parts[2], "->")
|
||
|
k_count = count(c -> c == 'k', parts[2])
|
||
|
return k_count
|
||
|
end
|
||
|
|
||
|
function beautify_title(str::AbstractString)
|
||
|
parts = split(str, "'")
|
||
|
|
||
|
preprefix = parts[1]
|
||
|
infix = parts[2]
|
||
|
sufsuffix = parts[3]
|
||
|
|
||
|
parts = split(infix, "->")
|
||
|
|
||
|
prefix = parts[1]
|
||
|
suffix = parts[2]
|
||
|
|
||
|
k_count = count(c -> c == 'k', suffix)
|
||
|
B_count = count(c -> c == 'B', suffix)
|
||
|
|
||
|
if k_count == 1 || B_count == 1
|
||
|
new_suffix = suffix
|
||
|
elseif k_count >= 1
|
||
|
new_suffix = replace(suffix, r"k+" => "k^$k_count")
|
||
|
elseif B_count >= 1
|
||
|
new_suffix = replace(suffix, r"B+" => "B^$B_count")
|
||
|
end
|
||
|
|
||
|
return preprefix * L"%$prefix \rightarrow %$new_suffix" * sufsuffix
|
||
|
end
|
||
|
|
||
|
input_file = ARGS[1]
|
||
|
df = CSV.read(input_file, DataFrame)
|
||
|
n_inputs = df[:, "n_inputs"][1]
|
||
|
|
||
|
# plotting with threads as x axis
|
||
|
for process_name in processes
|
||
|
title_string = "$(beautify_title(process_name)), $n_inputs samples"
|
||
|
println("$title_string")
|
||
|
|
||
|
process_no_opt = process_name * " not optimized"
|
||
|
process_red = process_name * " reduced"
|
||
|
process_tape_no_opt = process_name * " not optimized tape"
|
||
|
process_tape_red = process_name * " reduced tape"
|
||
|
|
||
|
df_no_opt = filter(:process_name => x -> x == process_no_opt, df)
|
||
|
df_red = filter(:process_name => x -> x == process_red, df)
|
||
|
df_tape_no_opt = filter(:process_name => x -> x == process_tape_no_opt, df)
|
||
|
df_tape_red = filter(:process_name => x -> x == process_tape_red, df)
|
||
|
|
||
|
@df df_no_opt scatter(:cpu_threads, :cpu_time, label = "unoptimized function", markershape = :circle)
|
||
|
@df df_red scatter!(:cpu_threads, :cpu_time, label = "reduced function", markershape = :rect)
|
||
|
@df df_tape_no_opt scatter!(:cpu_threads, :cpu_time, label = "unoptimized tape", markershape = :utriangle)
|
||
|
@df df_tape_red scatter!(:cpu_threads, :cpu_time, label = "reduced tape", markershape = :star)
|
||
|
|
||
|
plot!(
|
||
|
title = title_string,
|
||
|
yscale = :linear,
|
||
|
legend = :outerright,
|
||
|
legendcolumns = 1,
|
||
|
legend_font_pointsize = 10,
|
||
|
size = (800, 600),
|
||
|
ylabel = "execution time (s)",
|
||
|
xlabel = "threads (#)",
|
||
|
)
|
||
|
|
||
|
savefig("$(process_name)_time.pdf")
|
||
|
|
||
|
|
||
|
@df df_no_opt scatter(:cpu_threads, :cpu_rate, label = "unoptimized function", markershape = :circle)
|
||
|
@df df_red scatter!(:cpu_threads, :cpu_rate, label = "reduced function", markershape = :rect)
|
||
|
@df df_tape_no_opt scatter!(:cpu_threads, :cpu_rate, label = "unoptimized tape", markershape = :utriangle)
|
||
|
@df df_tape_red scatter!(:cpu_threads, :cpu_rate, label = "reduced tape", markershape = :star)
|
||
|
|
||
|
plot!(
|
||
|
title = "Sample rate, " * title_string,
|
||
|
yscale = :log10,
|
||
|
legend = :outerright,
|
||
|
legendcolumns = 1,
|
||
|
legend_font_pointsize = 10,
|
||
|
size = (800, 600),
|
||
|
ylabel = "rate (" * L"s^{-1}" * ")",
|
||
|
xlabel = "threads (#)",
|
||
|
)
|
||
|
|
||
|
savefig("$(process_name)_rate.pdf")
|
||
|
|
||
|
|
||
|
@df df_no_opt scatter(:cpu_threads, :cpu_gflops, label = "unoptimized function", markershape = :circle)
|
||
|
@df df_red scatter!(:cpu_threads, :cpu_gflops, label = "reduced function", markershape = :rect)
|
||
|
@df df_tape_no_opt scatter!(:cpu_threads, :cpu_gflops, label = "unoptimized tape", markershape = :utriangle)
|
||
|
@df df_tape_red scatter!(:cpu_threads, :cpu_gflops, label = "reduced tape", markershape = :star)
|
||
|
|
||
|
plot!(
|
||
|
title = "CPU performance, " * title_string,
|
||
|
yscale = :linear,
|
||
|
legend = :outerright,
|
||
|
legendcolumns = 1,
|
||
|
legend_font_pointsize = 10,
|
||
|
size = (800, 600),
|
||
|
ylabel = "CPU performance (GFLOPS)",
|
||
|
xlabel = "threads (#)",
|
||
|
)
|
||
|
|
||
|
savefig("$(process_name)_performance.pdf")
|
||
|
|
||
|
end
|
||
|
|
||
|
# plotting with process size as x axis
|
||
|
THREADS = [1, 2, 4, 8, 16]
|
||
|
|
||
|
for threads in THREADS
|
||
|
title_string = "$threads threads, $n_inputs samples"
|
||
|
|
||
|
df_filt = filter(:cpu_threads => x -> x == threads, df)
|
||
|
df_filt = filter(:process_name => x -> proc_to_n(x) >= 1, df_filt)
|
||
|
|
||
|
df_filt.process_size = @. proc_to_n(df_filt.process_name)
|
||
|
|
||
|
df_no_opt = filter(:process_name => x -> match(r" not optimized$", x) !== nothing, df_filt)
|
||
|
df_red = filter(:process_name => x -> match(r" reduced$", x) !== nothing, df_filt)
|
||
|
df_tape_no_opt = filter(:process_name => x -> match(r" not optimized tape$", x) !== nothing, df_filt)
|
||
|
df_tape_red = filter(:process_name => x -> match(r" reduced tape$", x) !== nothing, df_filt)
|
||
|
|
||
|
|
||
|
@df df_no_opt scatter(:process_size, :graph_gen_time, label = "graph generation time")
|
||
|
@df df_red scatter!(:process_size, :optimization_time, label = "optimization time")
|
||
|
@df df_no_opt scatter!(:process_size, :function_generation_time, label = "unoptimized function generation time")
|
||
|
@df df_tape_no_opt scatter!(:process_size, :function_generation_time, label = "unoptimized tape generation time")
|
||
|
@df df_red scatter!(:process_size, :function_generation_time, label = "reduced function generation time")
|
||
|
@df df_tape_red scatter!(:process_size, :function_generation_time, label = "reduced tape generation time")
|
||
|
|
||
|
plot!(
|
||
|
title = "function generation times, " * title_string,
|
||
|
yscale = :log10,
|
||
|
legend = :outerbottom,
|
||
|
legendcolumns = 2,
|
||
|
legend_font_pointsize = 10,
|
||
|
size = (800, 600),
|
||
|
ylabel = "time (s)",
|
||
|
xlabel = "process size (#)",
|
||
|
)
|
||
|
|
||
|
savefig("gen_times_$(threads)_threads.pdf")
|
||
|
end
|