From f33137a55e434b5a397fb6b19cc565e96e6dcce5 Mon Sep 17 00:00:00 2001 From: Rodrigo Arias Mallo Date: Thu, 15 Oct 2020 18:51:55 +0200 Subject: [PATCH] WIP: Add experimental figure pipeline --- garlic/fig/nbody/test.nix | 65 +++++++++++++++++++++++++++++++++++++++ overlay.nix | 30 +++++++++++++----- 2 files changed, 87 insertions(+), 8 deletions(-) create mode 100644 garlic/fig/nbody/test.nix diff --git a/garlic/fig/nbody/test.nix b/garlic/fig/nbody/test.nix new file mode 100644 index 0000000..37810f9 --- /dev/null +++ b/garlic/fig/nbody/test.nix @@ -0,0 +1,65 @@ +{ + stdenv +, gnuplot +, jq +, experiments +, garlicTools +, getExpResult +, writeText +}: + +with garlicTools; +with stdenv.lib; + +let + experiment = builtins.elemAt experiments 0; + expResult = getExpResult { + garlicTemp = "/tmp/garlic-temp"; + inherit experiment; + }; + #set xrange [16:1024] + plotScript = writeText "plot.plg" '' + set terminal png size 800,800 + set output 'out.png' + set xrange [*:*] + + set nokey + set logscale x 2 + set logscale y 2 + set grid + + set xlabel "blocksize" + set ylabel "time (s)" + + plot filename using 1:2 with points + ''; + +in stdenv.mkDerivation { + name = "plot"; + phases = [ "installPhase" ]; + buildInputs = [ jq gnuplot ]; + preferLocalBuild = true; + dontPatchShebangs = true; + installPhase = '' + mkdir $out + for unit in ${expResult}/*/*; do + name=$(basename $unit) + log="$unit/stdout.log" + conf="$unit/garlic_config.json" + bs=$(jq .blocksize $conf) + awk "/^time /{print $bs, \$2}" $log >> $out/data.csv + done + gnuplot -e "filename='$out/data.csv'" ${plotScript} + cp out.png $out/out.png + ''; + #installPhase = '' + # mkdir $out + # for unit in ${expResult}/*/*; do + # name=$(basename $unit) + # log="$unit/stdout.log" + # bs=$(jq .blocksize $log) + # awk "/^time /{print $bs, \$2}" $log >> $out/data.csv + # done + #''; + #gnuplot -e "filename='$out/data.csv'" ${plotScript} +} diff --git a/overlay.nix b/overlay.nix index da52829..c046d4a 100644 --- a/overlay.nix +++ b/overlay.nix @@ -260,12 +260,11 @@ let mpi = self.bsc.mpi; }; - # Post processing tools - hist = callPackage ./garlic/postprocess/hist { }; - + # Experiments exp = { nbody = { test = callPackage ./garlic/exp/nbody/test.nix { }; + tampi = callPackage ./garlic/exp/nbody/tampi.nix { }; }; saiph = { @@ -286,13 +285,29 @@ let mpi_omp = callPackage ./garlic/exp/hpcg/mpi+omp.nix { }; oss = callPackage ./garlic/exp/hpcg/oss.nix { }; }; + }; - test = { - exec = callPackage ./test/garlic/exec.nix { - exec = self.bsc.garlic.stages.exec; + # Post processing tools + hist = callPackage ./garlic/postprocess/hist { }; + getExpResult = callPackage ./garlic/postprocess/result.nix { }; + fetchExperiment = callPackage ./garlic/postprocess/fetch.nix { }; + + # Figures generated from the experiments + fig = { + nbody = { + test = callPackage ./garlic/fig/nbody/test.nix { + experiments = [ + self.bsc.garlic.exp.nbody.tampi + ]; }; }; }; + + test = { + exec = callPackage ./test/garlic/exec.nix { + exec = self.bsc.garlic.stages.exec; + }; + }; }; }; @@ -302,6 +317,5 @@ in # Aliases garlic = bsc.garlic; - exp = bsc.garlic.exp; - apps = bsc.garlic.apps; + inherit (bsc.garlic) exp fig apps; }