bscpkgs/garlic/exp/fwi/ss.nix
Rodrigo Arias Mallo 788dd13ebd fwi: merge mpi pure experiment
The getResources function is used to assign the proper cpu binding
depending on the version. However, additional contraints are required to
ensure that we have enough points in Y.

By default the mpi+send+seq branch is disabled.
2021-04-12 15:37:39 +02:00

95 lines
2.0 KiB
Nix

# Strong scaling test for FWI variants based on tasks. This
# experiment explores a range of block sizes deemed as efficient
# according to the granularity experiment.
{
stdenv
, stdexp
, bsc
, targetMachine
, stages
, garlicTools
, callPackage
, enableExtended ? false
}:
with stdenv.lib;
with garlicTools;
let
common = callPackage ./common.nix {};
inherit (common) getConfigs getResources pipeline;
inherit (targetMachine) fs;
# Initial variable configuration
varConf = {
gitBranch = [
"garlic/tampi+isend+oss+task"
] ++ optionals (enableExtended) [
"garlic/tampi+send+oss+task"
"garlic/mpi+send+omp+task"
"garlic/mpi+send+oss+task"
"garlic/mpi+send+omp+fork"
# FIXME: the mpi pure version has additional constraints with the
# number of planes in Y. By now is disabled.
#"garlic/mpi+send+seq"
];
blocksize = if (enableExtended)
then range2 1 16
else [ 2 ];
n = [ { nx=100; ny=8000; nz=100; } ];
nodes = range2 1 16;
};
machineConfig = targetMachine.config;
# Generate the complete configuration for each unit
genConf = c: machineConfig // rec {
expName = "fwi-ss";
unitName = "${expName}"
+ "-nodes${toString nodes}"
+ "-bs${toString blocksize}"
+ "-${toString gitBranch}";
inherit (machineConfig) hw;
inherit (c) gitBranch blocksize;
inherit (c.n) nx ny nz;
fwiInput = bsc.apps.fwi.input.override {
inherit (c.n) nx ny nz;
};
# Other FWI parameters
ioFreq = -1;
# Repeat the execution of each unit several times
loops = 10;
# Resources
inherit (getResources { inherit gitBranch hw; })
cpusPerTask ntasksPerNode;
nodes = c.nodes;
qos = "debug";
time = "02:00:00";
jobName = unitName;
enableCTF = false;
# Enable permissions to write in the local storage
extraMounts = [ fs.local.temp ];
tempDir = fs.local.temp;
};
configs = getConfigs {
inherit varConf genConf;
};
in
stdexp.genExperiment { inherit configs pipeline; }