99
|
1 #!/bin/bash
|
|
2 # This runs on the compute nodes...
|
|
3 # Args: [-a i] wd [-d] [-t nthreads] [-b CMDS] [-i input] CMDS
|
|
4 # See ug4/azure/notes.txt for documentation
|
|
5
|
|
6 N=$SLURM_JOB_NUM_NODES
|
|
7 n=$SLURM_NTASKS
|
|
8 c=$SLURM_CPUS_PER_TASK
|
|
9 nodename=$SLURMD_NODENAME
|
|
10 local=$SLURM_LOCALID
|
|
11 node=$SLURM_NODEID
|
|
12 task=$SLURM_PROCID
|
|
13
|
|
14 if [ "$1" = "-a" ]
|
|
15 then
|
|
16 shift
|
|
17 xarg="$1"
|
|
18 shift
|
|
19 else
|
|
20 xarg=
|
|
21 fi
|
|
22
|
|
23 cd "$1"
|
|
24 shift
|
|
25
|
|
26 if [ "$1" = "-d" ]
|
|
27 then
|
|
28 shift
|
|
29 debug=1
|
|
30 fi
|
|
31
|
|
32 if [ "$1" = "-t" ]
|
|
33 then
|
|
34 shift
|
|
35 threadsPerTask=$1
|
|
36 shift
|
|
37 else
|
|
38 threadsPerTask=2
|
|
39 fi
|
|
40
|
|
41 pjobs=$((c / $threadsPerTask))
|
|
42
|
|
43 echo $(date) task $n.$task on $nodename:$N.$node start $pjobs jobs 1>&2
|
|
44
|
|
45 PATH=$W/$USER/bin:$W/shared/bin:$PATH
|
|
46 export task PATH n xarg
|
|
47
|
|
48 if [ "$1" = "-b" ]
|
|
49 then
|
|
50 shift
|
|
51 eval "$1"
|
|
52 shift
|
|
53 fi
|
|
54
|
|
55 input="seq 1 $pjobs" # default to make sure something runs
|
|
56
|
|
57 if [ "$1" = "-i" ]
|
|
58 then
|
|
59 shift
|
|
60 input="$1"
|
|
61 shift
|
|
62 if [ "$debug" ]
|
|
63 then
|
|
64 echo $(date) task $n.$task input "|$input|"
|
|
65 fi
|
|
66 fi
|
|
67
|
|
68 export cmd="$1"
|
|
69 shift
|
|
70
|
|
71 doit () {
|
|
72 arg="$1"
|
|
73 echo $(date) start $task $PARALLEL_SEQ "|$cmd|$xarg|$arg|"
|
|
74 eval "$cmd"
|
|
75 echo $(date) end $task $PARALLEL_SEQ
|
|
76 }
|
|
77
|
|
78 export -f doit
|
|
79
|
|
80 if [ "$debug" ]
|
|
81 then
|
|
82 echo $(date) task $n.$task cmd "|$cmd|" doit $(type doit)
|
|
83 fi
|
|
84
|
|
85 source $HOME/.csing_init
|
|
86
|
|
87 eval "$input" | \
|
|
88 if [ "$debug" ]
|
|
89 then
|
|
90 tee >(cat 1>&2)
|
|
91 else
|
|
92 cat
|
|
93 fi | \
|
|
94 if [ $pjobs -le 1 ]
|
|
95 then
|
|
96 xargs -I ^ -n 1 bash -lc "doit ^"
|
|
97 else
|
|
98 parallel --line-buffer -j $pjobs doit '{}'
|
|
99 fi
|
|
100
|
|
101 echo $(date) task $n.$task on $nodename:$N.$node end 1>&2
|
|
102
|