Add generators for experiments

This commit is contained in:
Rodrigo Arias 2020-07-27 11:14:33 +02:00
parent bbc851db78
commit 979888eede
2 changed files with 47 additions and 6 deletions

View File

@ -6,19 +6,26 @@
let let
callPackage = pkgs.lib.callPackageWith (pkgs // bsc // garlic); callPackage = pkgs.lib.callPackageWith (pkgs // bsc // garlic);
callPackages = pkgs.lib.callPackagesWith (pkgs // bsc // garlic); callPackages = pkgs.lib.callPackagesWith (pkgs // bsc // garlic);
# Load some helper functions to generate app variants
inherit (import ./gen.nix) genApps genConfigs;
garlic = rec { garlic = rec {
mpptest = callPackage ./mpptest { }; mpptest = callPackage ./mpptest { };
ppong = callPackage ./ppong { }; ppong = callPackage ./ppong { };
experiments = callPackage ./experiments { exp = {
apps = [ mpiImpl = callPackage ./experiments {
(ppong.override { mpi=bsc.intel-mpi;}) apps = genApps [ ppong ] (
(ppong.override { mpi=pkgs.mpich;}) genConfigs {
]; mpi = [ bsc.intel-mpi pkgs.mpich pkgs.openmpi ];
}
);
};
};
}; };
};
in in
garlic garlic

34
bsc/garlic/gen.nix Normal file
View File

@ -0,0 +1,34 @@
let
lib = import <nixpkgs/lib>;
gen = rec {
# genAttrSets "a" ["hello" "world"]
# [ { a = "hello"; } { a = "world"; } ]
genAttrSets = (name: arr: (map (x: {${name}=x; })) arr);
# addAttrSets "a" [1 2] {e=4;}
# [ { a = 1; e = 4; } { a = 2; e = 4; } ]
addAttrSets = (name: arr: set: (map (x: set // {${name}=x; })) arr);
# attrToList {a=1;}
# [ { name = "a"; value = 1; } ]
attrToList = (set: map (name: {name=name; value=set.${name};} ) (builtins.attrNames set));
# mergeConfig [{e=1;}] {name="a"; value=[1 2]
# [ { a = 1; e = 1; } { a = 2; e = 1; } ]
mergeConfig = (arr: new: lib.flatten ( map (x: addAttrSets new.name new.value x) arr));
# genConfigs {a=[1 2]; b=[3 4];}
# [ { a = 1; b = 3; } { a = 1; b = 4; } { a = 2; b = 3; } { a = 2; b = 4; } ]
genConfigs = (config: lib.foldl mergeConfig [{}] (attrToList config));
# Generate multiple app versions by override with each config
genApp = (app: configs: map (conf: app.override conf) configs);
# Generate app version from an array of apps
genApps = (apps: configs:
lib.flatten (map (app: genApp app configs) apps));
};
in
gen