Source code for abed.pbs

# -*- coding: utf-8 -*-

"""
Functions for working with PBS files.

Note: this pbs file depends on the `timeout` command to be available. In some 
cases (such as on LISA) it must be loaded separately through a module. This must 
be in the configuration file then.

"""

from .conf import settings


[docs]def sec2str(seconds): hours = seconds // 3600 minutes = (seconds - 3600 * hours) // 60 secs = (seconds % 60) // 1 return "%02i:%02i:%02i" % (hours, minutes, secs)
[docs]def generate_pbs_text(): txt = [] # create pbs line pbs_line = "#PBS -lnodes=%i" % settings.PBS_NODES if not settings.PBS_CPUTYPE is None: pbs_line += ":%s" % settings.PBS_CPUTYPE if not settings.PBS_CORETYPE is None: pbs_line += ":%s" % settings.PBS_CORETYPE if not settings.PBS_PPN is None: if isinstance(settings.PBS_PPN, int): pbs_line += ":ppn=%i" % settings.PBS_PPN else: pbs_line += ":%s" % settings.PPN pbs_line += " -lwalltime=%s" % sec2str(settings.PBS_WALLTIME * 60) txt.append(pbs_line) txt.append("") # export variables (before loading modules!) for export in settings.PBS_EXPORTS: txt.append("export %s" % export) txt.append("") # load modules for module in settings.PBS_MODULES: txt.append("module load %s" % module) txt.append("") # current directory variable txt.append("CURRENT=%s/releases/current" % settings.REMOTE_DIR) txt.append("") # result dir txt.append("mkdir -p ${CURRENT}/results") txt.append("mkdir -p ${TMPDIR}/results") txt.append("") # Extra user supplied commands for line in settings.PBS_LINES_BEFORE: txt.append(line) # copy files to nodes cp_line = "mpicopy " + " ".join( ["${CURRENT}/" + x for x in settings.PBS_MPICOPY] ) txt.append(cp_line) txt.append("") # start email txt.append('summary=$(abed status | sed -e "s/\\x1b\\[.\\{1,5\\}m//g")') txt.append( 'echo -e "Job $PBS_JOBID started at `date`\\n\\n${summary}"' ' | mail $USER -s "Job $PBS_JOBID started"' ) txt.append("") # calculate reduced runtime ttr = settings.PBS_WALLTIME * 60 - settings.PBS_TIME_REDUCE # run line txt.append("timeout %i mpiexec abed run" % ttr) txt.append("") # zip tasks txt.append("mkdir -p ${CURRENT}/bzips") txt.append("cd ${TMPDIR}/results") txt.append("") txt.append("for dset in `ls`") txt.append("do") txt.append("\tpacktime=$(date +%Y_%m_%d_%H_%M_%S)") txt.append( "\ttar -c ${dset} | " "pbzip2 -vc -p14 -m1000 > ${packtime}_results_${dset}.tar.bz2" ) txt.append("\tcp ${packtime}_results_${dset}.tar.bz2 ${CURRENT}/bzips/") txt.append("done") txt.append("") # Extra user supplied lines for line in settings.PBS_LINES_AFTER: txt.append(line) # end email txt.append( 'echo "Job $PBS_JOBID finished at `date`" | mail $USER -s ' '"Job $PBS_JOBID finished"' ) txt.append("") return "\n".join(txt)