diff --git a/bsc/garlic/default.nix b/bsc/garlic/default.nix index 90b2ad2..0485cc0 100644 --- a/bsc/garlic/default.nix +++ b/bsc/garlic/default.nix @@ -7,11 +7,11 @@ let callPackage = pkgs.lib.callPackageWith (pkgs // bsc // garlic); callPackages = pkgs.lib.callPackagesWith (pkgs // bsc // garlic); - # Load some helper functions to generate app variants - inherit (import ./gen.nix) genApps genApp genConfigs; - garlic = rec { + # Load some helper functions to generate app variants + inherit (import ./gen.nix) genApps genApp genConfigs; + mpptest = callPackage ./mpptest { }; ppong = callPackage ./ppong { @@ -23,75 +23,14 @@ let gitBranch = "garlic/seq"; }; - srunner = callPackage ./srunner.nix { }; - - ppong-job = srunner { app=ppong; }; + sbatch = callPackage ./sbatch.nix { }; + sbatchLauncher = callPackage ./sbatch-launcher.nix { }; exp = { - - jobs = callPackage ./experiments { - apps = map (app: srunner {app=app;}) ( - genApps [ ppong ] ( - genConfigs { - mpi = [ bsc.intel-mpi pkgs.mpich pkgs.openmpi ]; - } - ) - ); - }; - - mpiImpl = callPackage ./experiments { - apps = genApps [ ppong ] ( - genConfigs { - mpi = [ bsc.intel-mpi pkgs.mpich pkgs.openmpi ]; - } - ); - }; - - nbodyExp = callPackage ./experiments { - apps = genApp nbody [ - { cc=bsc.icc; - cflags="-march=core-avx2"; } - { cc=bsc.clang-ompss2; - cflags="-O3 -march=core-avx2 -ffast-math -Rpass-analysis=loop-vectorize"; } - ]; - }; - - nbodyBS = callPackage ./experiments { - apps = genApp nbody ( - genConfigs { - cc = [ bsc.icc ]; - blocksize = [ 1024 2048 4096 ]; - }); - }; - - nbodyBSjob = callPackage ./dispatcher.nix { - jobs = map (app: srunner { - app=app; - prefix="/gpfs/projects/bsc15/nix"; - exclusive=false; - ntasks = "1"; - } - ) ( - genApp nbody ( - genConfigs { - cc = [ bsc.icc ]; - blocksize = [ 1024 2048 4096 ]; - } - ) - ); - }; - - - # Test if there is any difference between intel -march and -xCORE - # with target avx2. - march = callPackage ./experiments { - apps = genApps [ nbody ] (( genConfigs { - cc = [ bsc.icc ]; - cflags = [ "-march=core-avx2" "-xCORE-AVX2" ]; - }) ++ ( genConfigs { - cc = [ bsc.clang-ompss2 ]; - cflags = [ "-O3 -march=core-avx2 -Rpass-analysis=loop-vectorize" ]; - })); + nbody = { + bs = callPackage ./exp/nbody/bs.nix { + inherit bsc; + }; }; }; }; diff --git a/bsc/garlic/exp/nbody/bs.nix b/bsc/garlic/exp/nbody/bs.nix new file mode 100644 index 0000000..e34453d --- /dev/null +++ b/bsc/garlic/exp/nbody/bs.nix @@ -0,0 +1,38 @@ +{ + bsc +, nbody +, genApp +, genConfigs +, sbatch +, sbatchLauncher +}: + +let + # Set the configuration for the experiment + config = { + cc = [ bsc.icc ]; + blocksize = [ 1024 2048 4096 ]; + }; + + # Compute the cartesian product of all configurations + configList = genConfigs config; + # Generate each app variant via override + appList = genApp nbody configList; + + # Job generator helper function + genJobs = map (app: + sbatch { + app = app; + prefix = "/gpfs/projects/bsc15/nix"; + exclusive = false; + ntasks = "1"; + } + ); + + # Generate one job for each app variant + jobList = genJobs appList; + + # And merge all jobs in a script to lauch them all with sbatch + launcher = sbatchLauncher jobList; +in + launcher diff --git a/bsc/garlic/experiments/config.nix b/bsc/garlic/experiments/config.nix deleted file mode 100644 index 7681a8c..0000000 --- a/bsc/garlic/experiments/config.nix +++ /dev/null @@ -1,61 +0,0 @@ -let - lib = import ; - - inputParams = { - # MPI implementation - mpi = [ - "impi" - "mpich" - ]; - - # Gcc compiler - gcc = [ - "gcc9" - "gcc7" - ]; - - # Additional cflags - cflags = [ - ["-O3" "-fnobugs"] - ["-Ofast"] - ]; - - # Which git branches -# branches = [ -# "mpi+seq" -# "seq" -# ]; - }; - - apps = [ - "dummy" - ]; - - # genAttrSets "a" ["hello" "world"] - # [ { a = "hello"; } { a = "world"; } ] - genAttrSets = (name: arr: (map (x: {${name}=x; })) arr); - - # addAttrSets "a" [1 2] {e=4;} - # [ { a = 1; e = 4; } { a = 2; e = 4; } ] - addAttrSets = (name: arr: set: (map (x: set // {${name}=x; })) arr); - - # attrToList {a=1;} - # [ { name = "a"; value = 1; } ] - attrToList = (set: map (name: {name=name; value=set.${name};} ) (builtins.attrNames set)); - - # mergeConfig [{e=1;}] {name="a"; value=[1 2] - # [ { a = 1; e = 1; } { a = 2; e = 1; } ] - mergeConfig = (arr: new: lib.flatten ( map (x: addAttrSets new.name new.value x) arr)); - - # genConfigs {a=[1 2]; b=[3 4];} - # [ { a = 1; b = 3; } { a = 1; b = 4; } { a = 2; b = 3; } { a = 2; b = 4; } ] - genConfigs = (config: lib.foldl mergeConfig [{}] (attrToList config)); - - - # Generates all configs from inputParams - allConfigs = (genConfigs inputParams); - -in - { - inherit allConfigs; - } diff --git a/bsc/garlic/experiments/default.nix b/bsc/garlic/experiments/default.nix deleted file mode 100644 index e7c165f..0000000 --- a/bsc/garlic/experiments/default.nix +++ /dev/null @@ -1,41 +0,0 @@ -{ - stdenv -, mpi -, fetchurl -, apps -}: - -stdenv.mkDerivation { - name = "garlic-experiments"; - preferLocalBuild = true; - - src = ./.; - - buildInputs = [] ++ apps; - apps = apps; - - buildPhase = '' - for app in $apps; do - test -e $app/bin/run || (echo $app/bin/run not found; exit 1) - done - ''; - - installPhase = '' - mkdir -p $out/apps - for app in $apps; do - ln -s $app $out/apps/$(basename $app) - done - - mkdir -p $out/bin - cat > $out/bin/run < $out/bin/execute-all-jobs < $out/bin/run <