From 05ce36e1586fd9a4058469f6a004a45e438bf6f6 Mon Sep 17 00:00:00 2001 From: Antoni Navarro Date: Thu, 29 Oct 2020 16:31:21 +0100 Subject: [PATCH] Add the MPI-weak scaling experiment and strong scaling experiments --- garlic/exp/nbody/strong-scaling-mpi.nix | 62 +++++++++++++++++++++ garlic/exp/nbody/strong-scaling-oss.nix | 71 +++++++++++++++++++++++++ garlic/exp/nbody/weak-scaling-mpi.nix | 62 +++++++++++++++++++++ 3 files changed, 195 insertions(+) create mode 100644 garlic/exp/nbody/strong-scaling-mpi.nix create mode 100644 garlic/exp/nbody/strong-scaling-oss.nix create mode 100644 garlic/exp/nbody/weak-scaling-mpi.nix 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; }