bscpkgs/bsc/garlic/srunner.nix

65 lines
1.1 KiB
Nix
Raw Normal View History

2020-08-01 00:47:33 +08:00
{
stdenv
2020-08-04 17:51:09 +08:00
, numactl
2020-08-01 00:47:33 +08:00
}:
{
app
, prefix ? ""
2020-08-01 00:47:33 +08:00
, argv ? ""
, binary ? "/bin/run"
, ntasks ? null
, exclusive ? true # By default we run in exclusive mode
2020-08-05 00:38:33 +08:00
, chdir ? "."
2020-08-01 00:47:33 +08:00
, qos ? null
, time ? null
, output ? "job_%j.out"
, error ? "job_%j.err"
, contiguous ? null
, extra ? null
}:
with stdenv.lib;
let
sbatchOpt = name: value: optionalString (value!=null)
"#SBATCH --${name}=${value}\n";
sbatchEnable = name: value: optionalString (value!=null)
"#SBATCH --${name}\n";
in
stdenv.mkDerivation rec {
name = "${app.name}-job";
preferLocalBuild = true;
src = ./.;
buildInputs = [ app ];
#SBATCH --tasks-per-node=48
#SBATCH --ntasks-per-socket=24
#SBATCH --cpus-per-task=1
dontBuild = true;
installPhase = ''
2020-08-05 00:38:33 +08:00
mkdir -p $out
cat > $out/job <<EOF
2020-08-01 00:47:33 +08:00
#!/bin/bash
#SBATCH --job-name="${name}"
''
+ sbatchOpt "ntasks" ntasks
2020-08-05 00:38:33 +08:00
+ sbatchOpt "chdir" chdir
2020-08-01 00:47:33 +08:00
+ sbatchOpt "output" output
+ sbatchOpt "error" error
+ sbatchEnable "exclusive" exclusive
+ sbatchOpt "time" time
+ sbatchOpt "qos" qos
+ optionalString (extra!=null) extra
+
''
srun ${prefix}${app}${binary} ${argv}
2020-08-01 00:47:33 +08:00
EOF
'';
}