bscpkgs/bsc/garlic/exp/nbody/bs.nix
Rodrigo Arias Mallo 09c2b9005a Testing nbody blocksize with impi
Weird run times with srun: Two exceed 20%. Relative times:

0.998649        0.998936        0.999409        1.00018         1.00191
0.998684        0.998936        0.999432        1.00041         1.00222
0.998776        0.999065        0.999527        1.00126         1.0024
0.998786        0.999084        0.999558        1.00138         1.00242
0.998856        0.999102        0.999727        1.00155         1.25585
0.998895        0.9992          0.999849        1.0018          1.27138
2020-08-25 18:39:31 +02:00

82 lines
1.6 KiB
Nix

{
bsc
, nbody
, genApp
, genConfigs
# Wrappers
, launchWrapper
, sbatchWrapper
, srunWrapper
, argvWrapper
, controlWrapper
, nixsetupWrapper
}:
let
# Set the configuration for the experiment
config = {
cc = [ bsc.icc ];
blocksize = [ 1024 ];
};
extraConfig = {
gitBranch = "garlic/mpi+send";
mpi = bsc.impi;
particles = 1024*128;
timesteps = 10;
ntasksPerNode = "48";
nodes = "1";
time = "02:00:00";
qos = "debug";
};
# Compute the cartesian product of all configurations
allConfigs = genConfigs config;
filteredConfigs = with builtins; filter (c: c.blocksize <= 4096) allConfigs;
configs = map (conf: conf // extraConfig) filteredConfigs;
sbatch = conf: app: with conf; sbatchWrapper {
app = app;
nixPrefix = "/gpfs/projects/bsc15/nix";
exclusive = true;
inherit ntasksPerNode nodes time qos;
};
srun = app: srunWrapper {
app = app;
nixPrefix = "/gpfs/projects/bsc15/nix";
};
argv = conf: app:
with conf;
argvWrapper {
app = app;
env = ''
set -e
export I_MPI_THREAD_SPLIT=1
'';
argv = ''(-t ${toString timesteps} -p ${toString particles})'';
};
nbodyFn = conf:
with conf;
nbody.override { inherit cc mpi blocksize gitBranch; };
pipeline = conf:
sbatch conf (
nixsetupWrapper (
controlWrapper (
srun (
nixsetupWrapper (
argv conf (
nbodyFn conf))))));
# Ideally it should look like this:
#pipeline = sbatch nixsetup control argv nbodyFn;
jobs = map pipeline configs;
in
launchWrapper jobs