experiments #1

Merged
rubydragon merged 39 commits from experiments into main 2024-05-08 12:03:28 +02:00
20 changed files with 231 additions and 0 deletions
Showing only changes of commit 961b616ad1 - Show all commits

View File

@ -0,0 +1,200 @@
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'",
]
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 "QED Compton Scattering Process " * L"%$prefix \rightarrow %$new_suffix" * sufsuffix
end
input_file = ARGS[1]
df = CSV.read(input_file, DataFrame)
n_inputs = df[:, "n_inputs"][1]
gpus = df.gpu_devices[1]
cpus = df.cpu_threads[1]
power = Int(round(log2(n_inputs)))
chunk_sizes = ["1024", "4096", "16384", "65536", "262144", "1048576"]
best_times = Vector{Float64}()
best_times_std = Vector{Float64}()
# plotting with threads as x axis
for process_name in processes
df_filt = filter(:process_name => x -> x == process_name, df)
df_filt.cpu_ratio = df_filt.cpu_chunks ./ (df_filt.cpu_chunks .+ df_filt.gpu_chunks) .* 100.0
df_filt.gpu_ratio = df_filt.gpu_chunks ./ (df_filt.cpu_chunks .+ df_filt.gpu_chunks) .* 100.0
push!(best_times, minimum(df_filt.time))
bar(chunk_sizes, df_filt.cpu_ratio, label = "workload completed by \$$(cpus)\$ CPU threads (%)")
bar!(
chunk_sizes,
[100, 100, 100, 100, 100, 100],
label = "workload completed by $(gpus) GPUs (%)",
fillto = df_filt.cpu_ratio,
)
plot!(
title = "$(beautify_title(process_name))\nComputing $(n_inputs) (\$2^{$(power)}\$) Matrix Elements",
yscale = :linear,
#xticks = [1024 4096 16384 65536 262144 1048576],
ylim = (0, 105),
legend = :outerbottom,
legendcolumns = 1,
legend_font_pointsize = 10,
size = (800, 600),
ylabel = "contribution (%)",
xlabel = "chunk size (#)",
)
savefig("full_node_chunk_size_$(process_name)_ratio.pdf")
scatter(
chunk_sizes,
df_filt.rate,
label = "total execution rate (\$s^{-1}\$)",
title = "$(beautify_title(process_name))\nComputing $(n_inputs) (\$2^{$(power)}\$) Matrix Elements",
yscale = :log10,
#xticks = [1024 4096 16384 65536 262144 1048576],
legend = :outerbottom,
legendcolumns = 1,
legend_font_pointsize = 10,
size = (800, 600),
ylabel = "rate (\$s^{-1}\$)",
xlabel = "chunk size (#)",
markersize = 7,
)
savefig("full_node_chunk_size_$(process_name)_rate.pdf")
scatter(
chunk_sizes,
df_filt.time,
yerror = df_filt.std,
label = "total execution time (s)",
title = "$(beautify_title(process_name))\nComputing $(n_inputs) (\$2^{$(power)}\$) Matrix Elements",
#xticks = [1024 4096 16384 65536 262144 1048576],
ylim = (0, maximum(df_filt.time) * 1.05),
legend = :outerbottom,
legendcolumns = 1,
legend_font_pointsize = 10,
size = (800, 600),
ylabel = "time (s)",
xlabel = "chunk size (#)",
markersize = 7,
)
savefig("full_node_chunk_size_$(process_name)_time.pdf")
end
# plotting with process size as x axis
A100_rates = [2.530045276927587e9, 1.16972304616864e9, 2.0002725972692013e8, 3.495722925446318e7, 4.792187095617111e6]
CPU_32threads_rates =
[3.2691139045711152e7, 1.1578342663759507e7, 3.1670680975577887e6, 731037.7069429948, 115001.5594731802]
theory_rates = (A100_rates .+ CPU_32threads_rates) .* 4
scatter(
proc_to_n.(processes),
best_times,
label = "full node best achieved time (s)",
title = "QED N-Photon Compton Scattering\nComputing $(n_inputs) (\$2^{$(power)}\$) Matrix Elements",
ylim = (0, maximum(best_times) * 1.05),
legend = :outerbottom,
legendcolumns = 1,
legend_font_pointsize = 10,
size = (800, 600),
ylabel = "time (s)",
xlabel = "process size (#)",
markersize = 7,
)
savefig("full_node_process_best_time.pdf")
scatter(
proc_to_n.(processes),
(n_inputs ./ best_times),
label = "full node best achieved rate (\$s^{-1}\$)",
title = "QED N-Photon Compton Scattering\nComputing $(n_inputs) (\$2^{$(power)}\$) Matrix Elements",
ylim = (0, maximum(n_inputs ./ best_times) * 1.05),
legend = :outerbottom,
legendcolumns = 1,
legend_font_pointsize = 10,
size = (800, 600),
ylabel = "rate (\$s^{-1}\$)",
xlabel = "process size (#)",
markersize = 7,
)
savefig("full_node_process_best_rate.pdf")
scatter(
proc_to_n.(processes),
[(n_inputs ./ best_times) theory_rates],
label = ["full node best achieved rate (\$s^{-1}\$)" "theoretical rate from previous benchmarks (\$s^{-1}\$)"],
title = "QED N-Photon Compton Scattering\nComputing $(n_inputs) (\$2^{$(power)}\$) Matrix Elements",
#ylim = (0, max(maximum(n_inputs ./ best_times), maximum(theory_rates)) * 1.05),
yscale = :log10,
legend = :outerbottom,
legendcolumns = 1,
legend_font_pointsize = 10,
size = (800, 600),
ylabel = "rate (\$s^{-1}\$)",
xlabel = "process size (#)",
markersize = 7,
)
savefig("full_node_process_best_rate_plus_theory.pdf")

View File

@ -0,0 +1,31 @@
process_name,cpu_threads,gpu_devices,n_inputs,chunk_size,time,std,rate,cpu_chunks,gpu_chunks,memory_est
QED Process: 'ke->ke',124,4,67108864,1024,3.498023189,0.3076721764605935,1.9184796776371513e7,45294.0,20242.0,1.447298688e10
QED Process: 'ke->ke',124,4,67108864,4096,2.401494263,0.17013104933519752,2.7944628073425464e7,8872.5,7511.5,1.340607224e10
QED Process: 'ke->ke',124,4,67108864,16384,2.040338948,0.11818602853354224,3.2891037082726903e7,1942.0,2154.0,1.2850894448e10
QED Process: 'ke->ke',124,4,67108864,65536,1.9094240825,0.0703634619424293,3.514612841382763e7,431.0,593.0,1.2549270576e10
QED Process: 'ke->ke',124,4,67108864,262144,1.663800835,0.09683669072918406,4.033467383131828e7,124.0,132.0,1.3304598192e10
QED Process: 'ke->ke',124,4,67108864,1048576,4.363178006,0.15362201468327347,1.5380730263059545e7,60.0,4.0,1.635789408e10
QED Process: 'ke->kke',124,4,67108864,1024,3.595792702,0.22982494201906578,1.8663162635230247e7,38403.0,27133.0,1.6004835648e10
QED Process: 'ke->kke',124,4,67108864,4096,2.759823507,0.1517042378902089,2.431636074907887e7,7680.5,8703.5,1.521632832e10
QED Process: 'ke->kke',124,4,67108864,16384,2.438895872,0.2675005760041791,2.7516084130712736e7,1666.0,2430.0,1.4017263776e10
QED Process: 'ke->kke',124,4,67108864,65536,2.102141753,0.19062540340211018,3.19240431356391e7,372.0,652.0,1.4542648832e10
QED Process: 'ke->kke',124,4,67108864,262144,1.963817117,0.270899103650203,3.417266476550423e7,124.0,132.0,1.5452095984e10
QED Process: 'ke->kke',124,4,67108864,1048576,4.678252536,0.24347387468900175,1.4344857077206746e7,60.0,4.0,1.885768088e10
QED Process: 'ke->kkke',124,4,67108864,1024,3.922357603,0.5369159040482943,1.7109318117417965e7,25347.0,40189.0,1.672316376e10
QED Process: 'ke->kkke',124,4,67108864,4096,2.363901747,0.2856164398652175,2.8389024241454653e7,3829.0,12555.0,1.5615308512e10
QED Process: 'ke->kkke',124,4,67108864,16384,1.893031068,0.15072532448179204,3.545048210481879e7,744.0,3352.0,1.5101105104e10
QED Process: 'ke->kkke',124,4,67108864,65536,2.137146225,0.12041389223719733,3.140115693300303e7,248.0,776.0,1.5780112288e10
QED Process: 'ke->kkke',124,4,67108864,262144,2.776542017,0.01817299764175009,2.4169943616596095e7,124.0,132.0,1.7599575872e10
QED Process: 'ke->kkke',124,4,67108864,1048576,9.735021382,0.14312958275274476,6.89355075522319e6,60.0,4.0,2.1005184928e10
QED Process: 'ke->kkkke',124,4,67108864,1024,13.24530958,1.1412505488619353,5.066613475107616e6,24940.0,40596.0,1.8619863968e10
QED Process: 'ke->kkkke',124,4,67108864,4096,6.654388343,2.053901855132858,1.0084903456317563e7,3588.5,12795.5,1.7528517888e10
QED Process: 'ke->kkkke',124,4,67108864,16384,4.255322572,0.4138751997857821,1.5770570353837797e7,496.0,3600.0,1.7020825088e10
QED Process: 'ke->kkkke',124,4,67108864,65536,3.756418218,2.7132996417968327,1.78651204699274e7,124.0,900.0,1.701754576e10
QED Process: 'ke->kkkke',124,4,67108864,262144,12.8016601195,0.06866851952937757,5.24220010323326e6,124.0,132.0,1.974705816e10
QED Process: 'ke->kkkke',124,4,67108864,1048576,45.664600753,0.4542000947311946,1.4696036512613369e6,62.0,2.0,2.3504986032e10
QED Process: 'ke->kkkkke',124,4,67108864,1024,56.517159165,NaN,1.1874068865364918e6,24819.0,40717.0,2.1017071136e10
QED Process: 'ke->kkkkke',124,4,67108864,4096,30.239194471,8.720258576297342,2.2192675821559583e6,2980.0,13404.0,1.940682472e10
QED Process: 'ke->kkkkke',124,4,67108864,16384,12.192125241,2.800688574554207,5.5042794158908855e6,275.0,3821.0,1.8713809728e10
QED Process: 'ke->kkkkke',124,4,67108864,65536,19.262260871,0.18994391422350254,3.483955723029103e6,124.0,900.0,1.9165067936e10
QED Process: 'ke->kkkkke',124,4,67108864,262144,74.888312523,NaN,896119.3240853072,124.0,132.0,2.1894531872e10
QED Process: 'ke->kkkkke',124,4,67108864,1048576,269.327736071,NaN,249171.7525235084,61.5,2.5,2.5652469296e10
1 process_name cpu_threads gpu_devices n_inputs chunk_size time std rate cpu_chunks gpu_chunks memory_est
2 QED Process: 'ke->ke' 124 4 67108864 1024 3.498023189 0.3076721764605935 1.9184796776371513e7 45294.0 20242.0 1.447298688e10
3 QED Process: 'ke->ke' 124 4 67108864 4096 2.401494263 0.17013104933519752 2.7944628073425464e7 8872.5 7511.5 1.340607224e10
4 QED Process: 'ke->ke' 124 4 67108864 16384 2.040338948 0.11818602853354224 3.2891037082726903e7 1942.0 2154.0 1.2850894448e10
5 QED Process: 'ke->ke' 124 4 67108864 65536 1.9094240825 0.0703634619424293 3.514612841382763e7 431.0 593.0 1.2549270576e10
6 QED Process: 'ke->ke' 124 4 67108864 262144 1.663800835 0.09683669072918406 4.033467383131828e7 124.0 132.0 1.3304598192e10
7 QED Process: 'ke->ke' 124 4 67108864 1048576 4.363178006 0.15362201468327347 1.5380730263059545e7 60.0 4.0 1.635789408e10
8 QED Process: 'ke->kke' 124 4 67108864 1024 3.595792702 0.22982494201906578 1.8663162635230247e7 38403.0 27133.0 1.6004835648e10
9 QED Process: 'ke->kke' 124 4 67108864 4096 2.759823507 0.1517042378902089 2.431636074907887e7 7680.5 8703.5 1.521632832e10
10 QED Process: 'ke->kke' 124 4 67108864 16384 2.438895872 0.2675005760041791 2.7516084130712736e7 1666.0 2430.0 1.4017263776e10
11 QED Process: 'ke->kke' 124 4 67108864 65536 2.102141753 0.19062540340211018 3.19240431356391e7 372.0 652.0 1.4542648832e10
12 QED Process: 'ke->kke' 124 4 67108864 262144 1.963817117 0.270899103650203 3.417266476550423e7 124.0 132.0 1.5452095984e10
13 QED Process: 'ke->kke' 124 4 67108864 1048576 4.678252536 0.24347387468900175 1.4344857077206746e7 60.0 4.0 1.885768088e10
14 QED Process: 'ke->kkke' 124 4 67108864 1024 3.922357603 0.5369159040482943 1.7109318117417965e7 25347.0 40189.0 1.672316376e10
15 QED Process: 'ke->kkke' 124 4 67108864 4096 2.363901747 0.2856164398652175 2.8389024241454653e7 3829.0 12555.0 1.5615308512e10
16 QED Process: 'ke->kkke' 124 4 67108864 16384 1.893031068 0.15072532448179204 3.545048210481879e7 744.0 3352.0 1.5101105104e10
17 QED Process: 'ke->kkke' 124 4 67108864 65536 2.137146225 0.12041389223719733 3.140115693300303e7 248.0 776.0 1.5780112288e10
18 QED Process: 'ke->kkke' 124 4 67108864 262144 2.776542017 0.01817299764175009 2.4169943616596095e7 124.0 132.0 1.7599575872e10
19 QED Process: 'ke->kkke' 124 4 67108864 1048576 9.735021382 0.14312958275274476 6.89355075522319e6 60.0 4.0 2.1005184928e10
20 QED Process: 'ke->kkkke' 124 4 67108864 1024 13.24530958 1.1412505488619353 5.066613475107616e6 24940.0 40596.0 1.8619863968e10
21 QED Process: 'ke->kkkke' 124 4 67108864 4096 6.654388343 2.053901855132858 1.0084903456317563e7 3588.5 12795.5 1.7528517888e10
22 QED Process: 'ke->kkkke' 124 4 67108864 16384 4.255322572 0.4138751997857821 1.5770570353837797e7 496.0 3600.0 1.7020825088e10
23 QED Process: 'ke->kkkke' 124 4 67108864 65536 3.756418218 2.7132996417968327 1.78651204699274e7 124.0 900.0 1.701754576e10
24 QED Process: 'ke->kkkke' 124 4 67108864 262144 12.8016601195 0.06866851952937757 5.24220010323326e6 124.0 132.0 1.974705816e10
25 QED Process: 'ke->kkkke' 124 4 67108864 1048576 45.664600753 0.4542000947311946 1.4696036512613369e6 62.0 2.0 2.3504986032e10
26 QED Process: 'ke->kkkkke' 124 4 67108864 1024 56.517159165 NaN 1.1874068865364918e6 24819.0 40717.0 2.1017071136e10
27 QED Process: 'ke->kkkkke' 124 4 67108864 4096 30.239194471 8.720258576297342 2.2192675821559583e6 2980.0 13404.0 1.940682472e10
28 QED Process: 'ke->kkkkke' 124 4 67108864 16384 12.192125241 2.800688574554207 5.5042794158908855e6 275.0 3821.0 1.8713809728e10
29 QED Process: 'ke->kkkkke' 124 4 67108864 65536 19.262260871 0.18994391422350254 3.483955723029103e6 124.0 900.0 1.9165067936e10
30 QED Process: 'ke->kkkkke' 124 4 67108864 262144 74.888312523 NaN 896119.3240853072 124.0 132.0 2.1894531872e10
31 QED Process: 'ke->kkkkke' 124 4 67108864 1048576 269.327736071 NaN 249171.7525235084 61.5 2.5 2.5652469296e10

Binary file not shown.

Binary file not shown.