-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathrun
executable file
·140 lines (123 loc) · 2.35 KB
/
run
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
#!/bin/bash
set -e
function usage {
echo "p/run [--print] [--wait] model example.xml"
exit 2
}
PP=$(dirname $0)
test -f $PP/conf.ini || $PP/config
test -f $PP/conf.ini || exit -1
. $PP/lib.bash
source_conf
ENGINE="$ENGINE_RUN"
ONLY_PRINT=false
RUN_WAIT=false
TIME="1:00:00"
for arg
do
shift
case "$arg" in
-h|--help) usage;;
--slurm) ENGINE="slurm" ;;
--pbs) ENGINE="pbs" ;;
--local) ENGINE="local" ;;
--print) ONLY_PRINT=true;;
--wait) RUN_WAIT=true;;
--time=*) TIME="${arg#--time=}";;
--name=*) NAME="${arg#--name=}";;
--queue=*) MAIN_PARTITION="${arg#--queue=}";;
--xpath=*) XPATH="${arg#--xpath=}";;
*) set -- "$@" "$arg";;
esac
done
set -e
MODEL=$1
if test -z "$MODEL"
then
usage
fi
SOLVER=$TCLB/CLB/$MODEL/main
if [ ! -f "$SOLVER" ]
then
echo "Model '$MODEL' not found ('$SOLVER' doesn't exist)"
usage
fi
shift
CASE=$1
if test -z "$CASE"
then
usage
fi
if [ ! -f "$CASE" ]
then
echo "Case file '$CASE' doesn't exist"
usage
fi
shift
TASKS=$1
if [ -z "$TASKS" ]
then
TASKS=1
else
shift
fi
if [ $TASKS -gt $MAX_TASKS_PER_NODE ]
then
TASKS_PER_NODE=$MAX_TASKS_PER_NODE
NODES=$[$TASKS/$TASKS_PER_NODE]
CORES_PER_TASK=$CORES_PER_TASK_FULL
else
TASKS_PER_NODE=$TASKS
NODES=1
fi
# REMAINDER=$[($NODES*$TASKS_PER_NODE)%$TASKS]
if [ $TASKS -ne $[$NODES*$TASKS_PER_NODE] ]
then
echo Requested number of cores/gpus \($TASKS\) is not $NODES x $TASKS_PER_NODE
exit -1
fi
CORES=$[$NODES*$TASKS_PER_NODE*$CORES_PER_TASK]
if test -z "$NAME"
then
NAME="TCLB:$CASE"
fi
GPU_PER_TASK=0
if test "$RUN_GPU" == "y"
then
GPU_PER_TASK=1
fi
echo "Running:"
echo " case file: $CASE"
echo " model : $MODEL"
echo " MPI ranks: $TASKS"
echo " CPU cores per rank: $CORES_PER_TASK"
echo " GPUs per rank : $GPU_PER_TASK"
echo " memory per rank : $MEMORY_PER_TASK"
echo " Walltime : $TIME"
if ! test -z "$1"
then
echo " Options :" "$@"
fi
echo
source_engine $ENGINE
(
set -e
q_header $Q_HEADER_SHELL_FLAGS
q_name $NAME
q_queue $MAIN_PARTITION
q_grant $GRANT
q_qos $MAIN_QOS
q_units $NODES $TASKS_PER_NODE $CORES_PER_TASK $GPU_PER_TASK
q_mem $NODES $TASKS_PER_NODE $MEMORY_PER_TASK
q_walltime $TIME
echo
echo "ulimit -l unlimited"
echo "echo \"running on:\""
echo "hostname"
echo
echo "date"
env_prepare
echo "cd $PWD"
echo "$RUN_COMMAND $MPI_OPTS $SINGULARITY_COMMAND $SOLVER $CASE $XPATH"
) >tmp.job.scr
q_run "$@" "tmp.job.scr"