diff --git a/garlic/exp/nbody/test.nix b/garlic/exp/nbody/granularity-mpi.nix similarity index 92% rename from garlic/exp/nbody/test.nix rename to garlic/exp/nbody/granularity-mpi.nix index 724328a..9b152a3 100644 --- a/garlic/exp/nbody/test.nix +++ b/garlic/exp/nbody/granularity-mpi.nix @@ -11,13 +11,13 @@ with stdenv.lib; let # Initial variable configuration varConf = with bsc; { - blocksize = [ 1024 2048 ]; + blocksize = [ 128 256 512 1024 2048 4096 ]; }; # Generate the complete configuration for each unit genConf = with bsc; c: targetMachine.config // rec { # nbody options - particles = 1024 * 4; + particles = 1024 * 64; timesteps = 10; inherit (c) blocksize; cc = icc; @@ -29,7 +29,7 @@ let # Resources qos = "debug"; - ntasksPerNode = 2; + ntasksPerNode = 48; nodes = 1; time = "02:00:00"; cpuBind = "sockets,verbose"; @@ -57,5 +57,5 @@ let pipeline = stdexp.stdPipeline ++ [ exec program ]; in - + stdexp.genExperiment { inherit configs pipeline; } diff --git a/garlic/exp/nbody/granularity-oss.nix b/garlic/exp/nbody/granularity-oss.nix new file mode 100644 index 0000000..1becb3a --- /dev/null +++ b/garlic/exp/nbody/granularity-oss.nix @@ -0,0 +1,61 @@ +{ + stdenv +, stdexp +, bsc +, targetMachine +, stages +}: + +with stdenv.lib; + +let + # Initial variable configuration + varConf = with bsc; { + blocksize = [ 128 256 512 1024 2048 4096 ]; + }; + + # Generate the complete configuration for each unit + genConf = with bsc; c: targetMachine.config // rec { + # nbody options + particles = 1024 * 64; + timesteps = 10; + inherit (c) blocksize; + cc = icc; + mpi = impi; + gitBranch = "garlic/oss+task"; + + # Repeat the execution of each unit 30 times + loops = 30; + + # Resources + qos = "debug"; + ntasksPerNode = 1; + nodes = 1; + time = "02:00:00"; + cpuBind = "sockets,verbose"; + jobName = "nbody-bs-${toString blocksize}-${gitBranch}"; + }; + + # Compute the array of configurations + configs = stdexp.buildConfigs { + inherit varConf genConf; + }; + + exec = {nextStage, conf, ...}: with conf; stages.exec { + inherit nextStage; + argv = [ "-t" timesteps "-p" particles ]; + }; + + program = {nextStage, conf, ...}: with conf; + let + customPkgs = stdexp.replaceMpi conf.mpi; + in + customPkgs.apps.nbody.override { + inherit cc blocksize mpi gitBranch; + }; + + pipeline = stdexp.stdPipeline ++ [ exec program ]; + +in + + stdexp.genExperiment { inherit configs pipeline; } diff --git a/garlic/exp/nbody/strong-scaling-mpi.nix b/garlic/exp/nbody/strong-scaling-mpi.nix new file mode 100644 index 0000000..b7e77c2 --- /dev/null +++ b/garlic/exp/nbody/strong-scaling-mpi.nix @@ -0,0 +1,62 @@ +{ + stdenv +, stdexp +, bsc +, targetMachine +, stages +}: + +with stdenv.lib; + +let + # Initial variable configuration + varConf = with bsc; { + numProcsAndParticles = [ 1 2 4 8 16 32 48 ]; + }; + + # Generate the complete configuration for each unit + genConf = with bsc; c: targetMachine.config // rec { + # nbody options + inherit (c) numProcsAndParticles; + particles = 1024 * numProcsAndParticles * 2; + timesteps = 10; + blocksize = 1024; + cc = icc; + mpi = impi; + gitBranch = "garlic/mpi+send"; + + # Repeat the execution of each unit 30 times + loops = 30; + + # Resources + qos = "debug"; + ntasksPerNode = numProcsAndParticles; + nodes = 1; + time = "02:00:00"; + cpuBind = "sockets,verbose"; + jobName = "nbody-bs-${toString numProcsAndParticles}-${gitBranch}"; + }; + + # Compute the array of configurations + configs = stdexp.buildConfigs { + inherit varConf genConf; + }; + + exec = {nextStage, conf, ...}: with conf; stages.exec { + inherit nextStage; + argv = [ "-t" timesteps "-p" particles ]; + }; + + program = {nextStage, conf, ...}: with conf; + let + customPkgs = stdexp.replaceMpi conf.mpi; + in + customPkgs.apps.nbody.override { + inherit cc blocksize mpi gitBranch; + }; + + pipeline = stdexp.stdPipeline ++ [ exec program ]; + +in + + stdexp.genExperiment { inherit configs pipeline; } diff --git a/garlic/exp/nbody/strong-scaling-oss.nix b/garlic/exp/nbody/strong-scaling-oss.nix new file mode 100644 index 0000000..9739fff --- /dev/null +++ b/garlic/exp/nbody/strong-scaling-oss.nix @@ -0,0 +1,71 @@ +{ + stdenv +, stdexp +, bsc +, targetMachine +, stages +}: + +with stdenv.lib; + +let + # Initial variable configuration + varConf = with bsc; { + numProcsAndParticles = [ 1 2 4 8 16 32 48 ]; + input = [ + { numParticles=1 ; cpuMask="0x1"; } + { numParticles=2 ; cpuMask="0x3"; } + { numParticles=4 ; cpuMask="0xf"; } + { numParticles=8 ; cpuMask="0xff"; } + { numParticles=16; cpuMask="0xffff"; } + { numParticles=32; cpuMask="0xffffffff"; } + { numParticles=48; cpuMask="0xffffffffffff"; } + ]; + }; + + # Generate the complete configuration for each unit + genConf = with bsc; c: targetMachine.config // rec { + # nbody options + inherit (c.input) numParticles cpuMask; + particles = 1024 * numParticles * 2; + timesteps = 10; + blocksize = 1024; + cc = icc; + mpi = impi; + gitBranch = "garlic/oss+task"; + + # Repeat the execution of each unit 30 times + loops = 30; + + # Resources + qos = "debug"; + ntasksPerNode = 1; + nodes = 1; + time = "02:00:00"; + cpuBind = "verbose,mask_cpu:${cpuMask}"; + jobName = "nbody-bs-${toString numParticles}-${gitBranch}"; + }; + + # Compute the array of configurations + configs = stdexp.buildConfigs { + inherit varConf genConf; + }; + + exec = {nextStage, conf, ...}: with conf; stages.exec { + inherit nextStage; + argv = [ "-t" timesteps "-p" particles ]; + }; + + program = {nextStage, conf, ...}: with conf; + let + customPkgs = stdexp.replaceMpi conf.mpi; + in + customPkgs.apps.nbody.override { + inherit cc blocksize mpi gitBranch; + }; + + pipeline = stdexp.stdPipeline ++ [ exec program ]; + +in + + stdexp.genExperiment { inherit configs pipeline; } diff --git a/garlic/exp/nbody/weak-scaling-mpi.nix b/garlic/exp/nbody/weak-scaling-mpi.nix new file mode 100644 index 0000000..ecbd768 --- /dev/null +++ b/garlic/exp/nbody/weak-scaling-mpi.nix @@ -0,0 +1,62 @@ +{ + stdenv +, stdexp +, bsc +, targetMachine +, stages +}: + +with stdenv.lib; + +let + # Initial variable configuration + varConf = with bsc; { + numProcs = [ 1 2 4 8 16 32 48 ]; + }; + + # Generate the complete configuration for each unit + genConf = with bsc; c: targetMachine.config // rec { + # nbody options + particles = 1024 * 64; + timesteps = 10; + blocksize = 1024; + inherit (c) numProcs; + cc = icc; + mpi = impi; + gitBranch = "garlic/mpi+send"; + + # Repeat the execution of each unit 30 times + loops = 30; + + # Resources + qos = "debug"; + ntasksPerNode = numProcs; + nodes = 1; + time = "02:00:00"; + cpuBind = "sockets,verbose"; + jobName = "nbody-bs-${toString numProcs}-${gitBranch}"; + }; + + # Compute the array of configurations + configs = stdexp.buildConfigs { + inherit varConf genConf; + }; + + exec = {nextStage, conf, ...}: with conf; stages.exec { + inherit nextStage; + argv = [ "-t" timesteps "-p" particles ]; + }; + + program = {nextStage, conf, ...}: with conf; + let + customPkgs = stdexp.replaceMpi conf.mpi; + in + customPkgs.apps.nbody.override { + inherit cc blocksize mpi gitBranch; + }; + + pipeline = stdexp.stdPipeline ++ [ exec program ]; + +in + + stdexp.genExperiment { inherit configs pipeline; } diff --git a/garlic/exp/nbody/weak-scaling-oss.nix b/garlic/exp/nbody/weak-scaling-oss.nix new file mode 100644 index 0000000..a96d708 --- /dev/null +++ b/garlic/exp/nbody/weak-scaling-oss.nix @@ -0,0 +1,62 @@ +{ + stdenv +, stdexp +, bsc +, targetMachine +, stages +}: + +with stdenv.lib; + +let + # Initial variable configuration + varConf = with bsc; { + cpuMask = [ "0x1" "0x3" "0xf" "0xff" "0xffff" "0xffffffff" "0xffffffffffff" ]; + }; + + # Generate the complete configuration for each unit + genConf = with bsc; c: targetMachine.config // rec { + # nbody options + particles = 1024 * 64; + timesteps = 10; + blocksize = 1024; + inherit (c) cpuMask; + cc = icc; + mpi = impi; + gitBranch = "garlic/oss+task"; + + # Repeat the execution of each unit 30 times + loops = 30; + + # Resources + qos = "debug"; + ntasksPerNode = 1; + nodes = 1; + time = "02:00:00"; + cpuBind = "verbose,mask_cpu:${cpuMask}"; + jobName = "nbody-bs-${cpuMask}-${gitBranch}"; + }; + + # Compute the array of configurations + configs = stdexp.buildConfigs { + inherit varConf genConf; + }; + + exec = {nextStage, conf, ...}: with conf; stages.exec { + inherit nextStage; + argv = [ "-t" timesteps "-p" particles ]; + }; + + program = {nextStage, conf, ...}: with conf; + let + customPkgs = stdexp.replaceMpi conf.mpi; + in + customPkgs.apps.nbody.override { + inherit cc blocksize mpi gitBranch; + }; + + pipeline = stdexp.stdPipeline ++ [ exec program ]; + +in + + stdexp.genExperiment { inherit configs pipeline; }