forked from danieljprice/phantom
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile_qscripts
317 lines (314 loc) · 9.05 KB
/
Makefile_qscripts
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
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
#----------------------------------------------------
# target to write appropriate queue submission script
#
ifndef QSYS
QSYS=pbs
endif
ifndef WALLTIME
WALLTIME='1000:00:00'
endif
ifndef MAXMEM
MAXMEM='16G'
endif
ifeq ($(OPENMP),yes)
ifndef NOMP
ifdef OMP_NUM_THREADS
NOMP=$(OMP_NUM_THREADS)
else
NOMP=2
endif
endif
ifndef OMP_SCHEDULE
OMP_SCHEDULE=dynamic
endif
ifndef QPE
QPE=omp
endif
ifndef NPAR
NPAR=$(NOMP)
endif
endif
ifeq ($(USEMPI),yes)
ifndef NMPI
NMPI=4
NOMP=8
endif
ifndef QPE
QPE=mpi
endif
ifndef NPAR
NPAR=$(NMPI)
endif
ifeq ($(QSYS),slurm)
MPIEXEC=srun
else ifndef MPIEXEC
MPIEXEC=mpiexec -np ${NMPI}
endif
else
ifndef NMPI
NMPI=1
endif
endif
ifndef OUTFILE
ifeq ($(QSYS),sge)
OUTFILE=$(INFILE)'.sgeout'
else
ifeq ($(QSYS),pbs)
OUTFILE=$(INFILE)'.pbsout'
else
OUTFILE=$(INFILE)'.qout'
endif
endif
endif
ifndef MAILTO
MAILTO=`git config --get user.email`
endif
GETLOG='`grep logfile "$(INFILE)" | sed "s/logfile =//g" | sed "s/\\!.*//g" | sed "s/\s//g"`'
ifndef CMD
CMD='./phantom $(INFILE) >& $$outfile'
endif
.PHONY: qscript
qscript:
ifneq ($(KNOWN_SYSTEM), yes)
@echo "Error: qscript needs known SYSTEM variable set"
@${MAKE} err;
endif
ifndef INFILE
@echo
@echo "Usage: make qscript INFILE=infile"
@echo
@${MAKE} err;
endif
# set default values for variables not set
ifeq ($(QSHELL),tcsh)
@echo '#!/bin/tcsh'
else
@echo '#!/bin/bash'
endif
ifeq ($(QSYS),sge)
@echo '## Sun Grid Engine Script, created by "make qscript" '`date`
ifeq ($(QSHELL),tcsh)
@echo '#$$ -S /bin/tcsh'
else
@echo '#$$ -S /bin/bash'
endif
@echo '#$$ -cwd'
@echo '#$$ -N '`../scripts/randomword.pl`
@echo '#$$ -o '$(OUTFILE)' -j y'
@echo '#$$ -l h_rt='$(WALLTIME)
@echo '#$$ -l h_vmem='$(MAXMEM)
ifdef MAILTO
@echo '#$$ -m ae'
@echo '#$$ -M '$(MAILTO)
endif
ifdef QPE
@echo '#$$ -pe '$(QPE) $(NPAR)
endif
ifdef QEXTRA
@echo '#$$ '$(QEXTRA)
endif
@echo
@echo 'echo "SGE: HOSTS = "`cat $$PE_HOSTFILE`'
@echo 'echo "SGE: NHOSTS = $$NHOSTS"'
@echo 'echo "SGE: NSLOTS = $$NSLOTS"'
@echo 'echo "SGE: NQUEUES = $$NQUEUES"'
else ifeq ($(QSYS),pbs)
@echo '## PBS Job Submission Script, created by "make qscript" '`date`
ifdef QNODES
@echo '#PBS -l '$(QNODES)
else
ifeq ($(SYSTEM),zen)
@echo '#PBS -l nodes='$(NMPI)':ppn=8:StandardMem'
else
@echo '#PBS -l nodes='$(NMPI)':ppn='$(NOMP)
endif
endif
ifdef JOBNAME
@echo '#PBS -N '$(JOBNAME)
else
@echo '#PBS -N '`../scripts/randomword.pl`
endif
ifdef QNAME
@echo '#PBS -q '$(QNAME)
endif
ifdef QPROJECT
@echo '#PBS -P '$(QPROJECT)
endif
@echo '#PBS -o '$(OUTFILE)
@echo '#PBS -j oe'
ifdef MAILTO
@echo '#PBS -m e'
@echo '#PBS -M '$(MAILTO)
endif
@echo '#PBS -l walltime='$(WALLTIME)
@echo '#PBS -l mem='$(MAXMEM)
ifdef QEXTRA
@echo '#PBS '$(QEXTRA)
endif
ifdef QSTORAGE
@echo '#PBS -l storage='$(QSTORAGE)
endif
@echo '## phantom jobs can be restarted:'
@echo '#PBS -r y'
ifeq ($(PBSRESUBMIT),yes)
ifeq ($(QSHELL),tcsh)
$(error error: resubmittable scripts require bash, cannot use QSHELL=tcsh);
endif
@echo '#PBS -v NJOBS,NJOB'
@echo
@echo '#------------------------------------------------------------------------------'
@echo '# this is a self-resubmitting PBS script'
@echo '# use qsub -v NJOBS=10 <scriptname> to submit'
@echo '# with an appropriate value for NJOBS'
@echo '#'
@echo '# These variables are assumed to be set:'
@echo '# NJOBS is the total number of jobs in a sequence of jobs (defaults to 1)'
@echo '# NJOB is the number of the previous job in the sequence (defaults to 0)'
@echo '#------------------------------------------------------------------------------'
@echo 'if [ X$$NJOBS == X ]; then'
@echo ' echo "NJOBS (total number of jobs in sequence) is not set - defaulting to 1"'
@echo ' export NJOBS=1'
@echo 'fi'
@echo 'if [ X$$NJOB == X ]; then'
@echo ' echo "NJOB (previous job number in sequence) is not set - defaulting to 0"'
@echo ' export NJOB=0'
@echo 'fi'
@echo '#'
@echo '# Quick termination of job sequence - look for a file called STOP_SEQUENCE'
@echo '#'
@echo 'if [ -f $$PBS_O_WORKDIR/STOP_SEQUENCE ]; then'
@echo ' echo "Terminating sequence after $$NJOB jobs"'
@echo ' exit 0'
@echo 'fi'
@echo '#'
@echo '# Increment the counter to get current job number'
@echo '#'
@echo 'NJOB=$$(($$NJOB+1))'
@echo '#'
@echo '# Are we in an incomplete job sequence - more jobs to run ?'
@echo '#'
@echo 'if [ $$NJOB -lt $$NJOBS ]; then'
@echo ' #'
@echo ' # Now submit the next job'
@echo ' #'
@echo ' NEXTJOB=$$(($$NJOB+1))'
@echo ' echo "Submitting job number $$NEXTJOB in sequence of $$NJOBS jobs"'
@echo ' qsub -z -W depend=afterany:$$PBS_JOBID $$0'
@echo 'else'
@echo ' echo "Running last job in sequence of $NJOBS jobs"'
@echo 'fi'
# @echo '#'
# @echo '# File manipulation prior to job commencing, eg. clean up previous output files,'
# @echo '# check for consistency of checkpoint files, ...'
# @echo '#'
# @echo 'if [ $$NJOB -gt 1 ]; then'
# @echo ' echo " "'
# @echo ' # .... USER INSERTION HERE '
# @echo 'fi'
@echo '#------------------------------------------------------------------------------'
endif
@echo
@echo 'cd $$PBS_O_WORKDIR'
@echo 'echo "PBS_O_WORKDIR is $$PBS_O_WORKDIR"'
@echo 'echo "PBS_JOBNAME is $$PBS_JOBNAME"'
@echo 'env | grep PBS'
@echo 'cat $$PBS_NODEFILE > nodefile'
else
ifdef QNODES
@echo '#SBATCH --nodes='$(QNODES)
@echo '#SBATCH --cpus-per-task=1'
else
@echo '#SBATCH --ntasks='$(NMPI)
@echo '#SBATCH --cpus-per-task='$(NOMP)
endif
ifdef JOBNAME
@echo '#SBATCH --job-name='$(JOBNAME)
else
@echo '#SBATCH --job-name='`../scripts/randomword.pl`
endif
ifdef QNAME
@echo '#SBATCH --queue='$(QNAME)
endif
ifdef QPROJECT
@echo '#SBATCH --account='$(QPROJECT)
endif
ifdef QPARTITION
@echo '#SBATCH --partition='$(QPARTITION)
endif
@echo '#SBATCH --output='$(OUTFILE)
ifdef MAILTO
@echo '#SBATCH --mail-type=BEGIN'
@echo '#SBATCH --mail-type=FAIL'
@echo '#SBATCH --mail-type=END'
@echo '#SBATCH --mail-user='$(MAILTO)
endif
@echo '#SBATCH --time=0-'$(WALLTIME)
@echo '#SBATCH --mem='$(MAXMEM)
ifdef QEXTRA
@echo '#SBATCH '$(QEXTRA)
endif
endif
@echo 'echo "HOSTNAME = $$HOSTNAME"'
@echo 'echo "HOSTTYPE = $$HOSTTYPE"'
@echo 'echo Time is `date`'
@echo 'echo Directory is `pwd`'
@echo
ifeq ($(QSHELL),tcsh)
@echo 'limit stacksize unlimited'
else
@echo 'ulimit -s unlimited'
endif
#-- set openMP environment variables
ifeq ($(OPENMP),yes)
ifeq ($(QSHELL),tcsh)
@echo 'setenv OMP_SCHEDULE "'$(OMP_SCHEDULE)'"'
@echo 'setenv OMP_NUM_THREADS '$(NOMP)
@echo 'setenv OMP_STACKSIZE 1024m'
else
@echo 'export OMP_SCHEDULE="'$(OMP_SCHEDULE)'"'
@echo 'export OMP_NUM_THREADS='$(NOMP)
@echo 'export OMP_STACKSIZE=1024m'
endif
endif
@echo
#-- add lines specific to particular machines
ifeq ($(SYSTEM),msg)
ifeq ($(QSHELL),bash)
@echo 'source /etc/profile'
@echo 'export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}'
else
@echo 'setenv LD_LIBRARY_PATH '${LD_LIBRARY_PATH}
endif
@cat ~/.modules
endif
@echo
#--final line is code execution
@echo 'echo "starting phantom run..."'
ifeq ($(QSHELL),tcsh)
@echo 'setenv outfile '$(GETLOG)
else
@echo 'export outfile='$(GETLOG)
endif
@echo 'echo "writing output to $$outfile"'
ifeq ($(USEMPI),yes)
@echo $(MPIEXEC)' '$(CMD)
else
@echo $(CMD)
endif
ifeq ($(PBSRESUBMIT),yes)
@echo
@echo '#------------------------------------------------------------------------------'
@echo '# Not expected to reach this point in general but if we do, check that all '
@echo '# is OK. If the job command exited with an error, terminate the job'
@echo '#'
@echo 'errstat=$$?'
@echo 'if [ $$errstat -ne 0 ]; then'
@echo ' # A brief nap so PBS kills us in normal termination. Prefer to '
@echo ' # be killed by PBS if PBS detected some resource excess'
@echo ' sleep 5 '
@echo ' echo "Job number $$NJOB returned an error status $$errstat - stopping job sequence."'
@echo ' touch $$PBS_O_WORKDIR/STOP_SEQUENCE'
@echo ' exit $$errstat'
@echo 'fi'
@echo '#------------------------------------------------------------------------------'
endif