From 46536548ca7613fa4763df8ef2d50b6bf1eba0cc Mon Sep 17 00:00:00 2001 From: Sandra Date: Fri, 12 Mar 2021 15:15:53 +0100 Subject: [PATCH] saiph: update scaling exp and figures --- garlic/exp/index.nix | 2 + garlic/exp/saiph/debug.nix | 89 ++++++++++++++ garlic/exp/saiph/scaling.nix | 45 +++++-- garlic/exp/saiph/scaling2.nix | 104 ++++++++++++++++ garlic/fig/index.nix | 14 ++- garlic/fig/saiph/scaling.R | 94 +++++++++++--- garlic/fig/saiph/scaling2.R | 210 ++++++++++++++++++++++++++++++++ garlic/fig/saiph/scalingnblyz.R | 162 ++++++++++++++++++++++++ 8 files changed, 684 insertions(+), 36 deletions(-) create mode 100644 garlic/exp/saiph/debug.nix create mode 100644 garlic/exp/saiph/scaling2.nix create mode 100644 garlic/fig/saiph/scaling2.R create mode 100644 garlic/fig/saiph/scalingnblyz.R diff --git a/garlic/exp/index.nix b/garlic/exp/index.nix index c8335fb..6a2f6bd 100644 --- a/garlic/exp/index.nix +++ b/garlic/exp/index.nix @@ -35,6 +35,8 @@ numcomm = callPackage ./saiph/numcomm.nix { }; granularity = callPackage ./saiph/granularity.nix { }; scaling = callPackage ./saiph/scaling.nix { }; + scaling2 = callPackage ./saiph/scaling2.nix { }; + debug = callPackage ./saiph/debug.nix { }; blockingY = callPackage ./saiph/blocking_Y.nix { }; blockingZ = callPackage ./saiph/blocking_Z.nix { }; blockingYZ = callPackage ./saiph/blocking_YZ.nix { }; diff --git a/garlic/exp/saiph/debug.nix b/garlic/exp/saiph/debug.nix new file mode 100644 index 0000000..1866801 --- /dev/null +++ b/garlic/exp/saiph/debug.nix @@ -0,0 +1,89 @@ +{ + stdenv +, stdexp +, bsc +, targetMachine +, stages +}: + +with stdenv.lib; + +let + # Initial variable configuration + varConf = with bsc; { + }; + + # Generate the complete configuration for each unit + genConf = with bsc; c: targetMachine.config // rec { + expName = "saiph"; + unitName = "${expName}-debug"; + +# unitName = if (gitCommit == "3b52a616d44f4b86880663e2d951ad89c1dcab4f") +# then "${expName}-N${toString nodes}" + "-nblx${toString nblx}-nbly${toString nbly}" + "-par-init" +# else "${expName}-N${toString nodes}" + "-nblx${toString nblx}-nbly${toString nbly}" + "-seq-init"; + + inherit (targetMachine.config) hw; + + # saiph options + manualDist = 1; + nbgx = 1; + nbgy = 1; + nbgz = 8; + nblx = 1; + nbly = 4; + nblz = 96; + nbltotal = 384; + mpi = impi; + gitBranch = "garlic/tampi+isend+oss+task+simd"; + gitCommit = "3fa116620f1c7fbd1127d785c8bdc5d2372837b3"; + #gitCommit = c.gitCommit; # if exp involves more than 1 commit + #inherit (c) gitCommit; # if exp fixes the commit + + # Repeat the execution of each unit 50 times + loops = 1; + + # Resources + qos = "debug"; + ntasksPerNode = hw.socketsPerNode; + nodes = 4; + cpusPerTask = hw.cpusPerSocket; + jobName = "${unitName}"; + + # Compile flags + debugFlags = 1; + asanFlags = 0; + }; + + # Compute the array of configurations + configs = stdexp.buildConfigs { + inherit varConf genConf; + }; + + exec = {nextStage, conf, ...}: with conf; stages.exec { + inherit nextStage; + env = '' + export OMP_NUM_THREADS=${toString hw.cpusPerSocket} + export ASAN_SYMBOLIZER_PATH=${bsc.clangOmpss2Unwrapped}/bin/llvm-symbolizer + ''; + pre = '' + ulimit -c unlimited + ''; + }; + + valgrind = {nextStage, ...}: stages.valgrind { + inherit nextStage; + }; + + program = {nextStage, conf, ...}: + let + customPkgs = stdexp.replaceMpi conf.mpi; + in + customPkgs.apps.saiph.override { + inherit (conf) manualDist nbgx nbgy nbgz nblx nbly nblz nbltotal mpi gitBranch gitCommit debugFlags asanFlags; + }; + + pipeline = stdexp.stdPipeline ++ [ exec valgrind program ]; + +in + + stdexp.genExperiment { inherit configs pipeline; } diff --git a/garlic/exp/saiph/scaling.nix b/garlic/exp/saiph/scaling.nix index 64ee9a6..3f062ed 100644 --- a/garlic/exp/saiph/scaling.nix +++ b/garlic/exp/saiph/scaling.nix @@ -11,9 +11,29 @@ with stdenv.lib; let # Initial variable configuration varConf = with bsc; { - nbl = [ 1 2 4 8 16 32 64 ]; + #nbl = [ 1 2 4 8 16 32 64 ]; nodes = [ 1 2 4 8 ]; - #gitCommit = [ "3ecae7c209ec3e33d1108ae4783d7e733d54f2ca" "3b52a616d44f4b86880663e2d951ad89c1dcab4f" ]; + + input = [ + { nbly=12 ; nblz=1; nbltotal=12 ; } + { nbly=24 ; nblz=1; nbltotal=24 ; } + { nbly=48 ; nblz=1; nbltotal=48 ; } + { nbly=96 ; nblz=1; nbltotal=96 ; } + + { nbly=6 ; nblz=2; nbltotal=12 ; } + { nbly=12 ; nblz=2; nbltotal=24 ; } + { nbly=24 ; nblz=2; nbltotal=48 ; } + { nbly=48 ; nblz=2; nbltotal=96 ; } + { nbly=96 ; nblz=2; nbltotal=192 ; } + + { nbly=3 ; nblz=4; nbltotal=12 ; } + { nbly=6 ; nblz=4; nbltotal=24 ; } + { nbly=12 ; nblz=4; nbltotal=48 ; } + { nbly=24 ; nblz=4; nbltotal=96 ; } + { nbly=48 ; nblz=4; nbltotal=192 ; } + { nbly=96 ; nblz=4; nbltotal=384 ; } + ]; + }; # Generate the complete configuration for each unit @@ -30,31 +50,33 @@ let manualDist = 1; nbgx = 1; nbgy = 1; - nbgz = nodes; + nbgz = nodes*2; nblx = 1; - nbly = c.nbl; - nblz = c.nbl; + #nbly = c.nbl; + #nblz = c.nbl; mpi = impi; gitBranch = "garlic/tampi+isend+oss+task+simd"; #gitCommit = c.gitCommit; # if exp involves more than 1 commit + gitCommit = "3fa116620f1c7fbd1127d785c8bdc5d2372837b3"; #inherit (c) gitCommit; # if exp fixes the commit + inherit (c.input) nbly nblz nbltotal ; # Repeat the execution of each unit 50 times loops = 10; # Resources qos = "bsc_cs"; - ntasksPerNode = 1; + ntasksPerNode = hw.socketsPerNode; nodes = c.nodes; cpusPerTask = hw.cpusPerSocket; jobName = "${unitName}"; }; # Compute the array of configurations - configs = stdexp.buildConfigs { + configsAll = stdexp.buildConfigs { inherit varConf genConf; }; - #configs = filter (el: if el.nbly == 1 && el.nblz == 1 && el.nodes == 1 && el.gitCommit == "3b52a616d44f4b86880663e2d951ad89c1dcab4f" then false else true) configsAll; + configs = filter (el: if (el.nbly == 24 && el.nblz == 4) && el.nodes == 4 then false else true) configsAll; exec = {nextStage, conf, ...}: with conf; stages.exec { inherit nextStage; @@ -69,11 +91,14 @@ let customPkgs = stdexp.replaceMpi conf.mpi; in customPkgs.apps.saiph.override { - inherit (conf) manualDist nbgx nbgy nbgz nblx nbly nblz mpi gitBranch; + inherit (conf) manualDist nbgx nbgy nbgz nblx nbly nblz nbltotal mpi gitBranch gitCommit; }; pipeline = stdexp.stdPipeline ++ [ exec program ]; in - stdexp.genExperiment { inherit configs pipeline; } + stdexp.genExperiment { inherit configs pipeline; } + + +# last plot hash: f5xb7jv1c4mbrcy6d9s9j10msfz3kkj0-plot diff --git a/garlic/exp/saiph/scaling2.nix b/garlic/exp/saiph/scaling2.nix new file mode 100644 index 0000000..4109664 --- /dev/null +++ b/garlic/exp/saiph/scaling2.nix @@ -0,0 +1,104 @@ +{ + stdenv +, stdexp +, bsc +, targetMachine +, stages +}: + +with stdenv.lib; + +let + # Initial variable configuration + varConf = with bsc; { + #nbl = [ 1 2 4 8 16 32 64 ]; + nodes = [ 1 2 4 8 ]; + + input = [ + { nblz=12 ; nbly=1; nbltotal=12 ; } + { nblz=24 ; nbly=1; nbltotal=24 ; } + { nblz=48 ; nbly=1; nbltotal=48 ; } + { nblz=96 ; nbly=1; nbltotal=96 ; } + + { nblz=6 ; nbly=2; nbltotal=12 ; } + { nblz=12 ; nbly=2; nbltotal=24 ; } + { nblz=24 ; nbly=2; nbltotal=48 ; } + { nblz=48 ; nbly=2; nbltotal=96 ; } + { nblz=96 ; nbly=2; nbltotal=192 ; } + + { nblz=3 ; nbly=4; nbltotal=12 ; } + { nblz=6 ; nbly=4; nbltotal=24 ; } + { nblz=12 ; nbly=4; nbltotal=48 ; } + { nblz=24 ; nbly=4; nbltotal=96 ; } + { nblz=48 ; nbly=4; nbltotal=192 ; } + { nblz=96 ; nbly=4; nbltotal=384 ; } + ]; + + }; + + # Generate the complete configuration for each unit + genConf = with bsc; c: targetMachine.config // rec { + expName = "saiph"; + unitName = "${expName}-N${toString nodes}" + "-nblx${toString nblx}-nbly${toString nbly}" + "-par-init-One-dimensionalDistribution"; +# unitName = if (gitCommit == "3b52a616d44f4b86880663e2d951ad89c1dcab4f") +# then "${expName}-N${toString nodes}" + "-nblx${toString nblx}-nbly${toString nbly}" + "-par-init" +# else "${expName}-N${toString nodes}" + "-nblx${toString nblx}-nbly${toString nbly}" + "-seq-init"; + + inherit (targetMachine.config) hw; + + # saiph options + manualDist = 1; + nbgx = 1; + nbgy = 1; + nbgz = nodes*2; + nblx = 1; + #nbly = c.nbl; + #nblz = c.nbl; + mpi = impi; + gitBranch = "garlic/tampi+isend+oss+task+simd"; + #gitCommit = c.gitCommit; # if exp involves more than 1 commit + gitCommit = "3fa116620f1c7fbd1127d785c8bdc5d2372837b3"; + #inherit (c) gitCommit; # if exp fixes the commit + inherit (c.input) nbly nblz nbltotal ; + + # Repeat the execution of each unit 50 times + loops = 10; + + # Resources + qos = "bsc_cs"; + ntasksPerNode = hw.socketsPerNode; + nodes = c.nodes; + cpusPerTask = hw.cpusPerSocket; + jobName = "${unitName}"; + }; + + # Compute the array of configurations + configs = stdexp.buildConfigs { + inherit varConf genConf; + }; + #configs = filter (el: if (el.nbly == 24 && el.nblz == 4) && el.nodes == 4 then false else true) configsAll; + + exec = {nextStage, conf, ...}: with conf; stages.exec { + inherit nextStage; + env = '' + export OMP_NUM_THREADS=${toString hw.cpusPerSocket} + export ASAN_SYMBOLIZER_PATH=${bsc.clangOmpss2Unwrapped}/bin/llvm-symbolizer + ''; + }; + + program = {nextStage, conf, ...}: + let + customPkgs = stdexp.replaceMpi conf.mpi; + in + customPkgs.apps.saiph.override { + inherit (conf) manualDist nbgx nbgy nbgz nblx nbly nblz nbltotal mpi gitBranch gitCommit; + }; + + pipeline = stdexp.stdPipeline ++ [ exec program ]; + +in + + stdexp.genExperiment { inherit configs pipeline; } + + +# last plot hash: f5xb7jv1c4mbrcy6d9s9j10msfz3kkj0-plot diff --git a/garlic/fig/index.nix b/garlic/fig/index.nix index 3ef184d..5f73a33 100644 --- a/garlic/fig/index.nix +++ b/garlic/fig/index.nix @@ -42,12 +42,14 @@ in }; saiph = with exp.saiph; { - granularity = rPlotExp ./saiph/granularity.R [ granularity ]; - scaling = rPlotExp ./saiph/scaling.R [ scaling ]; - blockingY = rPlotExp ./saiph/granularityY.R [ blockingY ]; - blockingZ = rPlotExp ./saiph/granularityZ.R [ blockingZ ]; - blockingYZ = rPlotExp ./saiph/granularityYZ.R [ blockingYZ ]; - blockingZY = rPlotExp ./saiph/granularityZY.R [ blockingZY ]; + granularity = stdPlot ./saiph/granularity.R [ granularity ]; + scaling = stdPlot ./saiph/scaling.R [ scaling ]; + scaling2 = stdPlot ./saiph/scaling2.R [ scaling2 ]; + scalingnblyz = stdPlot ./saiph/scalingnblyz.R [ scaling scaling2 ]; + blockingY = stdPlot ./saiph/granularityY.R [ blockingY ]; + blockingZ = stdPlot ./saiph/granularityZ.R [ blockingZ ]; + blockingYZ = stdPlot ./saiph/granularityYZ.R [ blockingYZ ]; + blockingZY = stdPlot ./saiph/granularityZY.R [ blockingZY ]; }; heat = with exp.heat; { diff --git a/garlic/fig/saiph/scaling.R b/garlic/fig/saiph/scaling.R index f9e1b03..216d036 100644 --- a/garlic/fig/saiph/scaling.R +++ b/garlic/fig/saiph/scaling.R @@ -15,15 +15,22 @@ dataset = jsonlite::stream_in(file(input_file)) %>% # We only need the nblocks and time -df = select(dataset, config.nby, config.nodes, time, total_time, config.gitCommit) %>% - rename(nby=config.nby, nnodes=config.nodes, gitCommit=config.gitCommit) +#df = select(dataset, config.nbly, config.nodes, time, total_time, config.gitCommit) %>% +# rename(nbly=config.nbly, nnodes=config.nodes, gitCommit=config.gitCommit) -df$nby = as.factor(df$nby) +df = select(dataset, config.nbly, config.nblz, config.nbltotal, config.nodes, time, total_time) %>% + rename(nbly=config.nbly, nblz=config.nblz, nbltotal=config.nbltotal, nnodes=config.nodes) + +df$nbly = as.factor(df$nbly) +df$nblz = as.factor(df$nblz) +df$nblPerProc = as.factor(df$nbltotal / 24) +df$nbltotal = as.factor(df$nbltotal) df$nodes = as.factor(df$nnodes) -df$gitCommit = as.factor(df$gitCommit) +#df$gitCommit = as.factor(df$gitCommit) # Normalize the time by the median -D=group_by(df, nby, nodes, gitCommit) %>% +#D=group_by(df, nbly, nodes, gitCommit) %>% +D=group_by(df, nbly, nblz, nbltotal, nodes) %>% mutate(tmedian = median(time)) %>% mutate(ttmedian = median(total_time)) %>% mutate(tnorm = time / tmedian - 1) %>% @@ -33,7 +40,6 @@ D=group_by(df, nby, nodes, gitCommit) %>% D$bad = as.factor(D$bad) - print(D) ppi=300 @@ -45,10 +51,10 @@ png("box.png", width=w*ppi, height=h*ppi, res=ppi) # # # Create the plot with the normalized time vs nblocks -p = ggplot(data=D, aes(x=nby, y=tnorm, color=bad)) + +p = ggplot(data=D, aes(x=nbly, y=tnorm, color=bad)) + # Labels - labs(x="nby", y="Normalized time", + labs(x="nbly", y="Normalized time", title=sprintf("Saiph-Heat3D normalized time"), subtitle=input_file) + @@ -86,9 +92,9 @@ dev.off() png("scatter.png", width=w*ppi, height=h*ppi, res=ppi) # ## Create the plot with the normalized time vs nblocks -p = ggplot(D, aes(x=nby, y=time)) + +p = ggplot(D, aes(x=nbltotal, y=time)) + - labs(x="nby", y="Time (s)", + labs(x="nbltotal", y="Time (s)", title=sprintf("Saiph-Heat3D granularity"), subtitle=input_file) + theme_bw() + @@ -97,8 +103,8 @@ p = ggplot(D, aes(x=nby, y=time)) + geom_point(aes(color=nodes), shape=21, size=3) + #scale_x_continuous(trans=log2_trans()) + - scale_y_continuous(trans=log2_trans()) + - facet_wrap( ~ gitCommit) + scale_y_continuous(trans=log2_trans()) +# facet_wrap( ~ gitCommit) # Render the plot @@ -107,12 +113,37 @@ print(p) # Save the png image dev.off() +png("scatter1.png", width=w*ppi, height=h*ppi, res=ppi) +# +## Create the plot with the normalized time vs nblocks +p = ggplot(D, aes(x=nblPerProc, y=time)) + + + labs(x="nblPerProc", y="Time (s)", + title=sprintf("Saiph-Heat3D granularity per nodes"), + subtitle=input_file) + + theme_bw() + + theme(plot.subtitle=element_text(size=8)) + + theme(legend.position = c(0.5, 0.5)) + + + geom_point(aes(color=nblz), shape=21, size=3) + + #scale_x_continuous(trans=log2_trans()) + + scale_y_continuous(trans=log2_trans()) + + facet_wrap( ~ nodes) + + +# Render the plot +print(p) + +# Save the png image +dev.off() + + png("wasted.png", width=w*ppi, height=h*ppi, res=ppi) # ## Create the plot with the normalized time vs nblocks -p = ggplot(D, aes(x=nby, y=time)) + +p = ggplot(D, aes(x=nbly, y=time)) + - labs(x="nby", y="Time (s)", + labs(x="nbly", y="Time (s)", title=sprintf("Saiph-Heat3D granularity"), subtitle=input_file) + theme_bw() + @@ -123,8 +154,8 @@ p = ggplot(D, aes(x=nby, y=time)) + geom_line(aes(y=tmedian, color=nodes, group=nodes)) + geom_line(aes(y=ttmedian, color=nodes, group=nodes)) + #scale_x_continuous(trans=log2_trans()) + - scale_y_continuous(trans=log2_trans()) + - facet_wrap( ~ gitCommit) + scale_y_continuous(trans=log2_trans()) +# facet_wrap( ~ gitCommit) # Render the plot print(p) @@ -135,9 +166,9 @@ dev.off() png("test.png", width=w*ppi, height=h*ppi, res=ppi) # ## Create the plot with the normalized time vs nblocks -p = ggplot(D, aes(x=nby, y=tn)) + +p = ggplot(D, aes(x=nbltotal, y=tn)) + - labs(x="nby", y="Time (s) * nodes", + labs(x="nbltotal", y="Time (s) * nodes", title=sprintf("Saiph-Heat3D granularity"), subtitle=input_file) + theme_bw() + @@ -146,8 +177,31 @@ p = ggplot(D, aes(x=nby, y=tn)) + geom_point(shape=21, size=3) + geom_line(aes(color=nodes, group=nodes)) + #scale_x_continuous(trans=log2_trans()) + - scale_y_continuous(trans=log2_trans()) + - facet_wrap( ~ gitCommit) + scale_y_continuous(trans=log2_trans()) +# facet_wrap( ~ gitCommit) + +# Render the plot +print(p) + +# Save the png image +dev.off() + +png("test1.png", width=w*ppi, height=h*ppi, res=ppi) +# +## Create the plot with the normalized time vs nblocks +p = ggplot(D, aes(x=nblPerProc, y=tn)) + + + labs(x="nblPerProc", y="Time (s) * nodes", + title=sprintf("Saiph-Heat3D granularity per nblz blocks"), + subtitle=input_file) + + theme_bw() + + theme(plot.subtitle=element_text(size=8)) + + + geom_point(shape=21, size=3) + + geom_line(aes(color=nodes, group=nodes)) + + #scale_x_continuous(trans=log2_trans()) + + scale_y_continuous(trans=log2_trans()) + + facet_wrap( ~ nblz) # Render the plot print(p) diff --git a/garlic/fig/saiph/scaling2.R b/garlic/fig/saiph/scaling2.R new file mode 100644 index 0000000..e391759 --- /dev/null +++ b/garlic/fig/saiph/scaling2.R @@ -0,0 +1,210 @@ +library(ggplot2) +library(dplyr) +library(scales) +library(jsonlite) + +args=commandArgs(trailingOnly=TRUE) + +# Read the timetable from args[1] +input_file = "input.json" +if (length(args)>0) { input_file = args[1] } + +# Load the dataset in NDJSON format +dataset = jsonlite::stream_in(file(input_file)) %>% + jsonlite::flatten() + + +# We only need the nblocks and time +#df = select(dataset, config.nbly, config.nodes, time, total_time, config.gitCommit) %>% +# rename(nbly=config.nbly, nnodes=config.nodes, gitCommit=config.gitCommit) + +df = select(dataset, config.nbly, config.nblz, config.nbltotal, config.nodes, time, total_time) %>% + rename(nbly=config.nbly, nblz=config.nblz, nbltotal=config.nbltotal, nnodes=config.nodes) + +df$nbly = as.factor(df$nbly) +df$nblz = as.factor(df$nblz) +df$nblPerProc = as.factor(df$nbltotal / 24) +df$nbltotal = as.factor(df$nbltotal) +df$nodes = as.factor(df$nnodes) +#df$gitCommit = as.factor(df$gitCommit) + +# Normalize the time by the median +#D=group_by(df, nbly, nodes, gitCommit) %>% +D=group_by(df, nbly, nblz, nbltotal, nodes) %>% + mutate(tmedian = median(time)) %>% + mutate(ttmedian = median(total_time)) %>% + mutate(tnorm = time / tmedian - 1) %>% + mutate(bad = max(ifelse(abs(tnorm) >= 0.01, 1, 0))) %>% + mutate(tn = tmedian * nnodes) %>% + ungroup() + +D$bad = as.factor(D$bad) + +print(D) + +ppi=300 +h=5 +w=8 + +png("box.png", width=w*ppi, height=h*ppi, res=ppi) +# +# +# +# Create the plot with the normalized time vs nblocks +p = ggplot(data=D, aes(x=nbly, y=tnorm, color=bad)) + + + # Labels + labs(x="nbly", y="Normalized time", + title=sprintf("Saiph-Heat3D normalized time"), + subtitle=input_file) + + + # Center the title + #theme(plot.title = element_text(hjust = 0.5)) + + + # Black and white mode (useful for printing) + #theme_bw() + + + # Add the maximum allowed error lines + geom_hline(yintercept=c(-0.01, 0.01), + linetype="dashed", color="gray") + + + # Draw boxplots + geom_boxplot() + + scale_color_manual(values=c("black", "brown")) + + + #scale_y_continuous(breaks = scales::pretty_breaks(n = 10)) + + + theme_bw() + + + theme(plot.subtitle=element_text(size=8)) + + theme(legend.position = "none") + #theme(legend.position = c(0.85, 0.85)) + + + + +# Render the plot +print(p) + +## Save the png image +dev.off() +# +png("scatter.png", width=w*ppi, height=h*ppi, res=ppi) +# +## Create the plot with the normalized time vs nblocks +p = ggplot(D, aes(x=nbltotal, y=time)) + + + labs(x="nbltotal", y="Time (s)", + title=sprintf("Saiph-Heat3D granularity"), + subtitle=input_file) + + theme_bw() + + theme(plot.subtitle=element_text(size=8)) + + theme(legend.position = c(0.5, 0.88)) + + + geom_point(aes(color=nodes), shape=21, size=3) + + #scale_x_continuous(trans=log2_trans()) + + scale_y_continuous(trans=log2_trans()) +# facet_wrap( ~ gitCommit) + + +# Render the plot +print(p) + +# Save the png image +dev.off() + +png("scatter1.png", width=w*ppi, height=h*ppi, res=ppi) +# +## Create the plot with the normalized time vs nblocks +p = ggplot(D, aes(x=nblPerProc, y=time)) + + + labs(x="nblPerProc", y="Time (s)", + title=sprintf("Saiph-Heat3D granularity per nodes"), + subtitle=input_file) + + theme_bw() + + theme(plot.subtitle=element_text(size=8)) + + theme(legend.position = c(0.5, 0.5)) + + + geom_point(aes(color=nbly), shape=21, size=3) + + #scale_x_continuous(trans=log2_trans()) + + scale_y_continuous(trans=log2_trans()) + + facet_wrap( ~ nodes) + + +# Render the plot +print(p) + +# Save the png image +dev.off() + + +png("wasted.png", width=w*ppi, height=h*ppi, res=ppi) +# +## Create the plot with the normalized time vs nblocks +p = ggplot(D, aes(x=nbly, y=time)) + + + labs(x="nbly", y="Time (s)", + title=sprintf("Saiph-Heat3D granularity"), + subtitle=input_file) + + theme_bw() + + theme(plot.subtitle=element_text(size=8)) + + + geom_point(shape=21, size=3) + + geom_point(aes(y=total_time), shape=1, size=3, color="red") + + geom_line(aes(y=tmedian, color=nodes, group=nodes)) + + geom_line(aes(y=ttmedian, color=nodes, group=nodes)) + + #scale_x_continuous(trans=log2_trans()) + + scale_y_continuous(trans=log2_trans()) +# facet_wrap( ~ gitCommit) + +# Render the plot +print(p) + +# Save the png image +dev.off() + +png("test.png", width=w*ppi, height=h*ppi, res=ppi) +# +## Create the plot with the normalized time vs nblocks +p = ggplot(D, aes(x=nbltotal, y=tn)) + + + labs(x="nbltotal", y="Time (s) * nodes", + title=sprintf("Saiph-Heat3D granularity"), + subtitle=input_file) + + theme_bw() + + theme(plot.subtitle=element_text(size=8)) + + + geom_point(shape=21, size=3) + + geom_line(aes(color=nodes, group=nodes)) + + #scale_x_continuous(trans=log2_trans()) + + scale_y_continuous(trans=log2_trans()) +# facet_wrap( ~ gitCommit) + +# Render the plot +print(p) + +# Save the png image +dev.off() + +png("test1.png", width=w*ppi, height=h*ppi, res=ppi) +# +## Create the plot with the normalized time vs nblocks +p = ggplot(D, aes(x=nblPerProc, y=tn)) + + + labs(x="nblPerProc", y="Time (s) * nodes", + title=sprintf("Saiph-Heat3D granularity per nbly blocks"), + subtitle=input_file) + + theme_bw() + + theme(plot.subtitle=element_text(size=8)) + + + geom_point(shape=21, size=3) + + geom_line(aes(color=nodes, group=nodes)) + + #scale_x_continuous(trans=log2_trans()) + + scale_y_continuous(trans=log2_trans()) + + facet_wrap( ~ nbly) + +# Render the plot +print(p) + +# Save the png image +dev.off() diff --git a/garlic/fig/saiph/scalingnblyz.R b/garlic/fig/saiph/scalingnblyz.R new file mode 100644 index 0000000..b28c7a0 --- /dev/null +++ b/garlic/fig/saiph/scalingnblyz.R @@ -0,0 +1,162 @@ +library(ggplot2) +library(dplyr) +library(scales) +library(jsonlite) +library(viridis) + +args=commandArgs(trailingOnly=TRUE) + +# Read the timetable from args[1] +input_file = "input.json" +if (length(args)>0) { input_file = args[1] } + +# Load the dataset in NDJSON format +dataset = jsonlite::stream_in(file(input_file)) %>% + jsonlite::flatten() + + +# We only need the nblocks and time +#df = select(dataset, config.nbly, config.nodes, time, total_time, config.gitCommit) %>% +# rename(nbly=config.nbly, nnodes=config.nodes, gitCommit=config.gitCommit) + +df = select(dataset, config.nbly, config.nblz, config.nbltotal, config.nodes, time, total_time) %>% + rename(nbly=config.nbly, nblz=config.nblz, nbltotal=config.nbltotal, nnodes=config.nodes) + +df2 = df[df$nblz == 1 | df$nblz == 2 | df$nblz == 4, ] +df3 = df[df$nbly == 1 | df$nbly == 2 | df$nbly == 4, ] + +# df2 data frame +df2$nblsetZ = as.factor(df2$nblz) +df2$nblPerProcZ = as.factor(df2$nbltotal / 24) +df2$nbltotal = as.factor(df2$nbltotal) +df2$nodes = as.factor(df2$nnodes) + +# df3 data frame +df3$nblsetY = as.factor(df3$nbly) +df3$nblPerProcY = as.factor(df3$nbltotal / 24) +df3$nbltotalY = as.factor(df3$nbltotal) +df3$nodes = as.factor(df3$nnodes) + +df$nbly = as.factor(df$nbly) +df$nblz = as.factor(df$nblz) +df$nblPerProc = as.factor(df$nbltotal / 24) +df$nbltotal = as.factor(df$nbltotal) +df$nodes = as.factor(df$nnodes) +#df$gitCommit = as.factor(df$gitCommit) + +# Normalize the time by the median +#D=group_by(df, nbly, nodes, gitCommit) %>% +D=group_by(df, nbly, nblz, nbltotal, nodes) %>% + mutate(tmedian = median(time)) %>% + mutate(ttmedian = median(total_time)) %>% + mutate(tnorm = time / tmedian - 1) %>% + mutate(bad = max(ifelse(abs(tnorm) >= 0.01, 1, 0))) %>% + mutate(tn = tmedian * nnodes) %>% + ungroup() + +D$bad = as.factor(D$bad) + +print(D) + +ppi=300 +h=5 +w=8 + + +png("scatter_nbly.png", width=w*ppi, height=h*ppi, res=ppi) +# +## Create the plot with the normalized time vs nblocks +p = ggplot() + + geom_point(data=df2, aes(x=nblPerProcZ, y=time, color=nblsetZ), shape=21, size=3, show.legend=TRUE) + + geom_point(data=df3, aes(x=nblPerProcY, y=time, color=nblsetY), shape=4, size=2, show.legend=TRUE) + + labs(x="nblPerProc", y="Time (s)", + title=sprintf("Saiph-Heat3D granularity per nodes"), + subtitle=input_file) + + theme_bw() + + theme(plot.subtitle=element_text(size=8)) + + theme(legend.position = c(0.5, 0.5)) + + scale_y_continuous(trans=log2_trans()) + + facet_wrap( ~ nodes) + + +# Render the plot +print(p) + +# Save the png image +dev.off() + + + + + + + +png("scatter_nbly.png", width=w*ppi, height=h*ppi, res=ppi) +# +## Create the plot with the normalized time vs nblocks +p = ggplot() + + geom_point(data=df2, aes(x=nblPerProcZ, y=time, color=nblsetZ), shape=21, size=3, show.legend=TRUE) + + geom_point(data=df3, aes(x=nblPerProcY, y=time, color=nblsetY), shape=4, size=2, show.legend=TRUE) + + labs(x="nblPerProc", y="Time (s)", + title=sprintf("Saiph-Heat3D granularity per nodes"), + subtitle=input_file) + + theme_bw() + + theme(plot.subtitle=element_text(size=8)) + + theme(legend.position = c(0.5, 0.5)) + + scale_y_continuous(trans=log2_trans()) + + facet_wrap( ~ nodes) + + +# Render the plot +print(p) + +# Save the png image +dev.off() + +png("test1.png", width=w*ppi, height=h*ppi, res=ppi) +# +## Create the plot with the normalized time vs nblocks +p = ggplot(D, aes(x=nblPerProc, y=tn)) + + + labs(x="nblPerProc", y="Time (s) * nodes", + title=sprintf("Saiph-Heat3D granularity per nbly blocks"), + subtitle=input_file) + + theme_bw() + + theme(plot.subtitle=element_text(size=8)) + + + geom_point(shape=21, size=3) + + geom_line(aes(color=nodes, group=nodes)) + + #scale_x_continuous(trans=log2_trans()) + + scale_y_continuous(trans=log2_trans()) + + facet_wrap( ~ nbly) + +# Render the plot +print(p) + +# Save the png image +dev.off() + + +heatmap_plot = function(df, colname, title) { + p = ggplot(df, aes(x=nbly, y=nblz, fill=!!ensym(colname))) + + geom_raster() + + #scale_fill_gradient(high="black", low="white") + + scale_fill_viridis(option="plasma") + + coord_fixed() + + theme_bw() + + theme(axis.text.x=element_text(angle = -45, hjust = 0)) + + theme(plot.subtitle=element_text(size=8)) + + #guides(fill = guide_colorbar(barwidth=15, title.position="top")) + + guides(fill = guide_colorbar(barwidth=12, title.vjust=0.8)) + + labs(x="nbly", y="nblz", + title=sprintf("Heat granularity: %s", title), + subtitle=input_file) + + theme(legend.position="bottom")+ + facet_wrap( ~ nodes) + + k=1 + ggsave(sprintf("%s.png", colname), plot=p, width=4.8*k, height=5*k, dpi=300) + ggsave(sprintf("%s.pdf", colname), plot=p, width=4.8*k, height=5*k, dpi=300) +} + +heatmap_plot(D, "tmedian", "time")