diff --git a/garlic/exp/index.nix b/garlic/exp/index.nix index e88f8ee..aeb0e1d 100644 --- a/garlic/exp/index.nix +++ b/garlic/exp/index.nix @@ -90,4 +90,8 @@ slurm = { cpu = callPackage ./slurm/cpu.nix { }; }; + + lulesh = { + test = callPackage ./lulesh/test.nix { }; + }; } diff --git a/garlic/exp/lulesh/test.nix b/garlic/exp/lulesh/test.nix new file mode 100644 index 0000000..595be9d --- /dev/null +++ b/garlic/exp/lulesh/test.nix @@ -0,0 +1,84 @@ +{ + stdenv +, stdexp +, bsc +, targetMachine +, stages +}: + +with stdenv.lib; + +let + + # Initial variable configuration + varConf = with bsc; { + gitBranch = [ + "garlic/mpi+isend+seq" + "garlic/tampi+isend+oss+taskloop" + "garlic/tampi+isend+oss+taskfor" + "garlic/tampi+isend+oss+task" + "garlic/mpi+isend+seq" + "garlic/mpi+isend+oss+task" + "garlic/mpi+isend+omp+fork" + "garlic/tampi+isend+oss+taskloopfor" + ]; + }; + + machineConfig = targetMachine.config; + + # Generate the complete configuration for each unit + genConf = with bsc; c: targetMachine.config // rec { + expName = "lulesh"; + unitName = "${expName}-test"; + inherit (machineConfig) hw; + + # options + iterations = 10; + size = 30; + gitBranch = c.gitBranch; + + # Repeat the execution of each unit several times + loops = 10; + + # Resources + qos = "debug"; + cpusPerTask = hw.cpusPerSocket; + ntasksPerNode = 1; + nodes = 1; + time = "02:00:00"; + jobName = unitName; + }; + + # Compute the array of configurations + configs = stdexp.buildConfigs { + inherit varConf genConf; + }; + + /* Lulesh options: + -q : quiet mode - suppress all stdout + -i : number of cycles to run + -s : length of cube mesh along side + -r : Number of distinct regions (def: 11) + -b : Load balance between regions of a domain (def: 1) + -c : Extra cost of more expensive regions (def: 1) + -f : Number of files to split viz dump into (def: (np+10)/9) + -p : Print out progress + -v : Output viz file (requires compiling with -DVIZ_MESH + -h : This message + */ + exec = {nextStage, conf, ...}: with conf; stages.exec { + inherit nextStage; + argv = [ "-i" iterations "-s" size ]; + }; + + apps = bsc.garlic.apps; + + program = {nextStage, conf, ...}: apps.lulesh.override { + inherit (conf) gitBranch; + }; + + pipeline = stdexp.stdPipeline ++ [ exec program ]; + +in + + stdexp.genExperiment { inherit configs pipeline; }