/[escript]/trunk/bin/run-escript
ViewVC logotype

Diff of /trunk/bin/run-escript

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 4058 by caltinay, Fri Nov 2 06:47:06 2012 UTC revision 4664 by caltinay, Mon Feb 10 01:57:11 2014 UTC
# Line 1  Line 1 
1  #!/bin/bash  #!/usr/bin/env bash
2    
3  # Escript/Finley wrapper for python  # Escript/Finley wrapper for python
4  # Sets LD_LIBRARY_PATH and PYTHONPATH and then runs either python or the MPI launcher  # Sets LD_LIBRARY_PATH and PYTHONPATH and then runs either python or the MPI launcher
# Line 28  HOSTFILE2=/tmp/escript2.$USER.$$ Line 28  HOSTFILE2=/tmp/escript2.$USER.$$
28  #Begin finding ESCRIPT_ROOT  #Begin finding ESCRIPT_ROOT
29  if [ $STDLOCATION -ne 0 ]  if [ $STDLOCATION -ne 0 ]
30  then  then
31      ESCRIPT_ROOT=/usr/lib/escript      ESCRIPT_ROOT=/usr/lib/python-escript
32  else  else
33    # We don't know the escript root so we need to work it out from the invocation    # We don't know the escript root so we need to work it out from the invocation
34    # Need to match if the name contains /    # Need to match if the name contains /
# Line 58  else Line 58  else
58  fi  fi
59  ##### End finding ESCRIPT_ROOT ########  ##### End finding ESCRIPT_ROOT ########
60    
   
   
61  PYTHON_MPI_NULL="$ESCRIPT_ROOT/lib/pythonMPI"  PYTHON_MPI_NULL="$ESCRIPT_ROOT/lib/pythonMPI"
62  PYTHON_MPI_REDIRECT="$ESCRIPT_ROOT/lib/pythonMPIredirect"  PYTHON_MPI_REDIRECT="$ESCRIPT_ROOT/lib/pythonMPIredirect"
63  PYTHON_CMD=python  PYTHON_CMD=python
# Line 70  PYTHON_CMD=python Line 68  PYTHON_CMD=python
68  EXTRA_DYLD_LIBRARY_PATH=""  EXTRA_DYLD_LIBRARY_PATH=""
69  EXTRA_PATH=$ESCRIPT_ROOT/bin  EXTRA_PATH=$ESCRIPT_ROOT/bin
70  EXTRA_PYTHONPATH=$ESCRIPT_ROOT  EXTRA_PYTHONPATH=$ESCRIPT_ROOT
71  EXTRA_LD_LIBRARY_PATH=$ESCRIPT_ROOT/lib  
72    if [ $STDLOCATION -eq 1 ]
73    then
74        EXTRA_LD_LIBRARY_PATH=/usr/lib/python-escript
75    else
76        EXTRA_LD_LIBRARY_PATH=$ESCRIPT_ROOT/lib
77    fi
78    
79    
80  if [ $STANDALONE -eq 1 ]  if [ $STANDALONE -eq 1 ]
81  then  then
# Line 82  then Line 87  then
87  fi  fi
88    
89    
90  BUILDINFO_FILE=$ESCRIPT_ROOT/lib/buildvars  BUILDINFO_FILE="$ESCRIPT_ROOT/lib/buildvars"
91  if [ ! -r $BUILDINFO_FILE ]; then  if [ "$STDLOCATION" = "1" ]
92    then
93        BUILDINFO_FILE=/usr/lib/python-escript/buildvars
94    fi
95    if [ ! -r "$BUILDINFO_FILE" ]; then
96      if [ "$1" = "-e" ]; then      if [ "$1" = "-e" ]; then
97          echo "export LD_LIBRARY_PATH=$EXTRA_LD_LIBRARY_PATH:\$LD_LIBRARY_PATH"          echo "export LD_LIBRARY_PATH=$EXTRA_LD_LIBRARY_PATH:\$LD_LIBRARY_PATH"
98          echo "export PYTHONPATH=$EXTRA_PYTHONPATH:\$PYTHONPATH"          echo "export PYTHONPATH=$EXTRA_PYTHONPATH:\$PYTHONPATH"
# Line 99  if [ ! -r $BUILDINFO_FILE ]; then Line 108  if [ ! -r $BUILDINFO_FILE ]; then
108  fi  fi
109    
110  get_buildvar () {  get_buildvar () {
111      echo `grep "^$1=" $BUILDINFO_FILE |cut -d= -f2`      echo `grep "^$1=" "$BUILDINFO_FILE" |cut -d= -f2`
112  }  }
113    
114  #  #
# Line 131  Usage: run-escript [options] script.py [ Line 140  Usage: run-escript [options] script.py [
140      -o      redirect output from MPI to files      -o      redirect output from MPI to files
141      -v      print diagnostics      -v      print diagnostics
142      -x      run in new xterm instance      -x      run in new xterm instance
143        -m tool     run with valgrind {tool=m[emcheck]/c[allgrind]}
144      script.py   Your python script      script.py   Your python script
145      arguments...    The optional command-line arguments to your script      arguments...    The optional command-line arguments to your script
146  "  "
# Line 142  fi Line 152  fi
152  #==============================================================================  #==============================================================================
153    
154  # Parse the command-line options  # Parse the command-line options
155  # option e should not be followed by a :  while getopts 'bn:p:t:f:echim:oVvx' option
 while getopts 'bn:p:t:f:hecVviox' option  
156  do  do
157      case "$option" in      case "$option" in
158        "b")  DO_BINARY=y        "b")  DO_BINARY=y
159          ;;          ;;
160          "m")  DO_VALGRIND=$OPTARG
161            ;;
162        "n")  ESCRIPT_NUM_NODES=$OPTARG        "n")  ESCRIPT_NUM_NODES=$OPTARG
163          ;;          ;;
164        "p")  ESCRIPT_NUM_PROCS=$OPTARG        "p")  ESCRIPT_NUM_PROCS=$OPTARG
# Line 156  do Line 167  do
167          ;;          ;;
168        "f")  ESCRIPT_HOSTFILE=$OPTARG        "f")  ESCRIPT_HOSTFILE=$OPTARG
169          ;;          ;;
170        "c")  cat $ESCRIPT_ROOT/lib/buildvars        "c")  cat "$BUILDINFO_FILE"
171          exit 0          exit 0
172          ;;          ;;
173        "V")  echo "escript-development(build "`get_buildvar svn_revision`")"        "V")  echo "escript-development(build "`get_buildvar svn_revision`")"
# Line 225  fi Line 236  fi
236  #  #
237  if [ "$MPI_FLAVOUR" = "none" ]  if [ "$MPI_FLAVOUR" = "none" ]
238  then  then
239      if [ ! -z $ESCRIPT_NUM_NODES ]      if [ ! -z "$ESCRIPT_NUM_NODES" ]; then
240      then          if [ $ESCRIPT_NUM_NODES -gt 1 ]; then
241          echo "Warning: MPI disabled but number of nodes set. Option ignored."              echo "Warning: MPI disabled but number of nodes set. Option ignored."
242            fi
243      fi      fi
244      if [ ! -z $ESCRIPT_NUM_PROCS ]      if [ ! -z "$ESCRIPT_NUM_PROCS" ]; then
245      then          if [ $ESCRIPT_NUM_PROCS -gt 1 ]; then
246          echo "Warning: MPI disabled but number of processors per node set. Option ignored."              echo "Warning: MPI disabled but number of processors per node set. Option ignored."
247            fi
248      fi      fi
249      if [ ! -z $ESCRIPT_HOSTFILE ]      if [ ! -z "$ESCRIPT_HOSTFILE" ]
250      then      then
251          echo "Warning: MPI disabled but host file is given. Option ignored."          echo "Warning: MPI disabled but host file is given. Option ignored."
252      fi      fi
# Line 241  then Line 254  then
254      ESCRIPT_NUM_PROCS=1      ESCRIPT_NUM_PROCS=1
255  else  else
256      # use the PBS_NODEFILE if not otherwise specified      # use the PBS_NODEFILE if not otherwise specified
257      if [ ! -z $PBS_NODEFILE ] && [ -z $ESCRIPT_HOSTFILE ]      if [ ! -z "$PBS_NODEFILE" ] && [ -z "$ESCRIPT_HOSTFILE" ]
258      then      then
259          ESCRIPT_HOSTFILE=$PBS_NODEFILE          ESCRIPT_HOSTFILE=$PBS_NODEFILE
260      fi      fi
261    
262      if [ ! -z $ESCRIPT_HOSTFILE ]      if [ ! -z "$ESCRIPT_HOSTFILE" ]
263      then      then
264          if [ -f $ESCRIPT_HOSTFILE ]          if [ -f "$ESCRIPT_HOSTFILE" ]
265          then          then
266              cat $ESCRIPT_HOSTFILE | sort -u > $HOSTFILE              cat "$ESCRIPT_HOSTFILE" | sort -u > $HOSTFILE
267              NUM_HOSTS=`cat $HOSTFILE | wc -l`              NUM_HOSTS=`cat "$HOSTFILE" | wc -l`
268              if [ ! -z $ESCRIPT_NUM_NODES ]              if [ ! -z $ESCRIPT_NUM_NODES ]
269              then              then
270                  if [ $NUM_HOSTS -ne $ESCRIPT_NUM_NODES ]                  if [ $NUM_HOSTS -ne $ESCRIPT_NUM_NODES ]
# Line 329  fi Line 342  fi
342    
343  if [ $TOTPROC -gt 1 ]  if [ $TOTPROC -gt 1 ]
344  then  then
345      if [ "$ESCRIPT_CREATESTDFILES" = "yes" ]      if [ "$ESCRIPT_CREATESTDFILES" = "y" ]
346      then      then
347          PYTHON_MPI=$PYTHON_MPI_REDIRECT          PYTHON_MPI=$PYTHON_MPI_REDIRECT
348      else      else
# Line 352  then Line 365  then
365  fi  fi
366    
367  #==============================================================================  #==============================================================================
368    
369  if [ ! -z $DO_XTERM ]  if [ ! -z $DO_XTERM ]
370  then  then
371      EXEC_CMD="xterm -e"      EXEC_CMD="xterm -e"
# Line 359  else Line 373  else
373      EXEC_CMD=""      EXEC_CMD=""
374  fi  fi
375    
376    if [ ! -z "$DO_VALGRIND" ]
377    then
378        VALGRIND_BIN=`which valgrind 2>/dev/null`
379        if [ $? -eq 0 ]; then
380            LOGDIR=$ESCRIPT_ROOT/valgrind_logs
381            [ -d $LOGDIR ] || mkdir $LOGDIR
382            if [ ${DO_VALGRIND:0:1} = "c" ];
383            then
384                # run callgrind
385                LOGFILE=${LOGDIR}/callgrind.%p.xml
386                VALGRIND="valgrind --tool=callgrind --callgrind-out-file=$LOGFILE"
387                EXEC_CMD="$EXEC_CMD $VALGRIND"
388            else
389                # run memcheck by default
390                LAST_N=`ls -1 $LOGDIR|grep "^memcheck"|tail -1|cut -d. -f2`
391                NEW_N=`printf "%04d" $((10#$LAST_N + 1))`
392                LOGFILE=${LOGDIR}/memcheck.${NEW_N}.xml
393                VALGRIND="valgrind --tool=memcheck --xml=yes --show-reachable=yes --error-limit=no --gen-suppressions=all --suppressions=$ESCRIPT_ROOT/scripts/escript.supp --leak-check=full --xml-file=$LOGFILE"
394                EXEC_CMD="$EXEC_CMD $VALGRIND"
395            fi
396        else
397            echo "Execution with valgrind requested but valgrind not in path!"
398            exit 1
399        fi
400    fi
401    
402  if [ ! -z $DO_BINARY ]  if [ ! -z $DO_BINARY ]
403  then  then
404      EXEC_CMD="$EXEC_CMD $@"      EXEC_CMD="$EXEC_CMD $@"
# Line 418  then Line 458  then
458  #=============== OpenMPI ===================================  #=============== OpenMPI ===================================
459  elif [ "$MPI_FLAVOUR" = "OPENMPI" ]  elif [ "$MPI_FLAVOUR" = "OPENMPI" ]
460  then  then
461     if [ ! -z $HOSTFILE ]     if [ ! -z "$HOSTFILE" ]
462     then     then
463        HOST_LIST=`awk 'BEGIN{S=""}{if (S == "") { S = $0 } else {S = S "," $0}}END{print S}' $HOSTFILE`        HOST_LIST=`awk 'BEGIN{S=""}{if (S == "") { S = $0 } else {S = S "," $0}}END{print S}' "$HOSTFILE"`
464        CMD="mpirun --gmca mpi_warn_on_fork 0 -x ${EXPORT_ENV//,/ -x } --bynode -np $TOTPROC --bind-to-socket --cpus-per-rank $ESCRIPT_NUM_THREADS --host $HOST_LIST $EXEC_CMD"        CMD="mpirun --gmca mpi_warn_on_fork 0 -x ${EXPORT_ENV//,/ -x } --bynode -np $TOTPROC --bind-to-socket --cpus-per-rank $ESCRIPT_NUM_THREADS --host $HOST_LIST $EXEC_CMD"
465     else     else
466        CMD="mpirun --gmca mpi_warn_on_fork 0 -x ${EXPORT_ENV//,/ -x } --cpus-per-rank $ESCRIPT_NUM_THREADS -np $TOTPROC $EXEC_CMD"        CMD="mpirun --gmca mpi_warn_on_fork 0 -x ${EXPORT_ENV//,/ -x } --cpus-per-rank $ESCRIPT_NUM_THREADS -np $TOTPROC $EXEC_CMD"
# Line 439  then Line 479  then
479         EXPORT_ENV="$EXPORT_ENV, I_MPI_PIN_DOMAIN"         EXPORT_ENV="$EXPORT_ENV, I_MPI_PIN_DOMAIN"
480     fi     fi
481    
482     if [ ! -z $HOSTFILE ]     if [ ! -z "$HOSTFILE" ]
483     then     then
484        mpdboot -n $ESCRIPT_NUM_NODES -r ssh -f $HOSTFILE        mpdboot -n $ESCRIPT_NUM_NODES -r ssh -f "$HOSTFILE"
485        if [ $? -ne 0 ]        if [ $? -ne 0 ]
486        then        then
487           echo "mpdboot with host file $ESCRIPT_HOSTFILE for $ESCRIPT_NUM_NODES nodes failed."           echo "mpdboot with host file $ESCRIPT_HOSTFILE for $ESCRIPT_NUM_NODES nodes failed."
# Line 470  elif [ "$MPI_FLAVOUR" = "MPT" ] Line 510  elif [ "$MPI_FLAVOUR" = "MPT" ]
510  then  then
511     export MPI_NUM_MEMORY_REGIONS=0     export MPI_NUM_MEMORY_REGIONS=0
512     EXPORT_ENV="$EXPORT_ENV,MPI_NUM_MEMORY_REGIONS"     EXPORT_ENV="$EXPORT_ENV,MPI_NUM_MEMORY_REGIONS"
513     if [ ! -z $HOSTFILE ]     if [ ! -z "$HOSTFILE" ]
514     then     then
515        HOST_LIST=`awk 'BEGIN{S=""}{if (S == "") { S = $0 } else {S = S "," $0}}END{print S}' $HOSTFILE`        HOST_LIST=`awk 'BEGIN{S=""}{if (S == "") { S = $0 } else {S = S "," $0}}END{print S}' "$HOSTFILE"`
516        CMD="mpirun $HOST_LIST -np $ESCRIPT_NUM_PROCS $EXEC_CMD"        CMD="mpirun $HOST_LIST -np $ESCRIPT_NUM_PROCS $EXEC_CMD"
517     else     else
518        CMD="mpirun -np $TOTPROC $EXEC_CMD"        CMD="mpirun -np $TOTPROC $EXEC_CMD"
# Line 483  then Line 523  then
523  #=============== MPICH ===================================  #=============== MPICH ===================================
524  elif [ "$MPI_FLAVOUR" = "MPICH" ]  elif [ "$MPI_FLAVOUR" = "MPICH" ]
525  then  then
526     if [ ! -z $HOSTFILE ]     if [ ! -z "$HOSTFILE" ]
527     then     then
528        touch $HOSTFILE2        touch "$HOSTFILE2"
529        for (( i=1;i<=$ESCRIPT_NUM_PROCS;i+=1 )) ; do cat $HOSTFILE >> $HOSTFILE2  ; done        for (( i=1;i<=$ESCRIPT_NUM_PROCS;i+=1 )) ; do cat "$HOSTFILE" >> "$HOSTFILE2"  ; done
530        CMD="mpirun -machinefile $HOSTFILE2  -np $TOTPROC $EXEC_CMD"        CMD="mpirun -machinefile \"$HOSTFILE2\"  -np $TOTPROC $EXEC_CMD"
531     else     else
532        CMD="mpirun -np $TOTPROC $EXEC_CMD"        CMD="mpirun -np $TOTPROC $EXEC_CMD"
533     fi     fi
# Line 497  then Line 537  then
537  #=============== MPICH2 ===================================  #=============== MPICH2 ===================================
538  elif [ "$MPI_FLAVOUR" = "MPICH2" ]  elif [ "$MPI_FLAVOUR" = "MPICH2" ]
539  then  then
540     if [ ! -z $HOSTFILE ]     if [ ! -z "$HOSTFILE" ]
541     then     then
542           mpdboot -n $ESCRIPT_NUM_NODES -r ssh -f $HOSTFILE           mpdboot -n $ESCRIPT_NUM_NODES -r ssh -f "$HOSTFILE"
543           if [ $? -ne 0 ]           if [ $? -ne 0 ]
544           then           then
545              echo "mpdboot with host file $ESCRIPT_HOSTFILE for $ESCRIPT_NUM_NODES nodes failed."              echo "mpdboot with host file $ESCRIPT_HOSTFILE for $ESCRIPT_NUM_NODES nodes failed."

Legend:
Removed from v.4058  
changed lines
  Added in v.4664

  ViewVC Help
Powered by ViewVC 1.1.26