Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
allow handling of host:nb_processes structure for mpi hostfiles
authorAugustin Degomme <degomme@idpann.imag.fr>
Thu, 23 Jan 2014 15:56:17 +0000 (16:56 +0100)
committerAugustin Degomme <degomme@idpann.imag.fr>
Fri, 24 Jan 2014 10:31:30 +0000 (11:31 +0100)
src/smpi/smpirun.in

index 7b14c67..45f830b 100755 (executable)
@@ -85,6 +85,15 @@ while true; do
        shift 2
     ;;
 
        shift 2
     ;;
 
+   "-machinefile")
+       HOSTFILE="$2"
+      if [ ! -f "${HOSTFILE}" ]; then
+               echo "[$0] ** error: the file '${HOSTFILE}' does not exist. Aborting."
+               exit 1
+      fi
+       shift 2
+    ;;
+
    "-ext")
       EXTOPT="$2"
       shift 2
    "-ext")
       EXTOPT="$2"
       shift 2
@@ -191,12 +200,6 @@ done
 
 ##-----------------------------------
 
 
 ##-----------------------------------
 
-# Basic checks on the provided arguments
-if [ -z "${EXEC}" ] ; then
-    echo "You must provide a program to execute."
-    usage
-    exit 1
-fi
 
 if [ -z "${HOSTFILE}" ] && [ -z "${PLATFORM}" ] ; then
     echo "No hostfile nor platform specified."
 
 if [ -z "${HOSTFILE}" ] && [ -z "${PLATFORM}" ] ; then
     echo "No hostfile nor platform specified."
@@ -210,6 +213,21 @@ if [ -z "${HOSTFILE}" ] ; then
     HOSTFILE="$(mktemp tmphostXXXXXX)"
     perl -ne 'print "$1\n" if /.*<host.*?id="(.*?)".*?\/>.*/' ${PLATFORM} > ${HOSTFILE}
 fi
     HOSTFILE="$(mktemp tmphostXXXXXX)"
     perl -ne 'print "$1\n" if /.*<host.*?id="(.*?)".*?\/>.*/' ${PLATFORM} > ${HOSTFILE}
 fi
+UNROLLEDHOSTFILETMP=0
+
+#parse if our lines are terminated by :num_process
+multiple_processes=`grep -c ":" $HOSTFILE`
+if [ "${multiple_processes}" -gt 0 ] ; then
+    UNROLLEDHOSTFILETMP=1
+    UNROLLEDHOSTFILE="$(mktemp tmphostXXXXXX)"
+    perl -ne ' do{ for ( 1 .. $2 ) { print "$1\n" } } if /(.*?):(\d+).*/'  ${HOSTFILE}  > ${UNROLLEDHOSTFILE}
+    if [ ${HOSTFILETMP} = 1 ] ; then
+        rm ${HOSTFILE}
+        HOSTFILETMP=0
+    fi
+    HOSTFILE=$UNROLLEDHOSTFILE
+fi
+
 
 # Don't use wc -l to compute it to avoid issues with trailing \n at EOF
 hostfile_procs=`grep -c "[a-zA-Z0-9]" $HOSTFILE`
 
 # Don't use wc -l to compute it to avoid issues with trailing \n at EOF
 hostfile_procs=`grep -c "[a-zA-Z0-9]" $HOSTFILE`
@@ -395,6 +413,9 @@ if [ -n "${KEEP}" ] ; then
   if [ ${HOSTFILETMP} = 1 ] ; then
     echo "Generated hostfile ${HOSTFILE} keeped."
   fi
   if [ ${HOSTFILETMP} = 1 ] ; then
     echo "Generated hostfile ${HOSTFILE} keeped."
   fi
+  if [ ${UNROLLEDHOSTFILETMP} = 1 ] ; then
+    echo "Generated unrolled hostfile ${UNROLLEDHOSTFILE} keeped." 
+  fi
 fi
 ${EXEC} ${TRACEOPTIONS} ${SIMOPTS} ${PLATFORMTMP} ${APPLICATIONTMP}
 status=$?
 fi
 ${EXEC} ${TRACEOPTIONS} ${SIMOPTS} ${PLATFORMTMP} ${APPLICATIONTMP}
 status=$?
@@ -406,6 +427,9 @@ if [ -z "${KEEP}" ] ; then
    if [ ${HOSTFILETMP} = 1 ] ; then
         rm ${HOSTFILE}
    fi
    if [ ${HOSTFILETMP} = 1 ] ; then
         rm ${HOSTFILE}
    fi
+   if [ ${UNROLLEDHOSTFILETMP} = 1 ] ; then
+        rm ${UNROLLEDHOSTFILE}
+   fi
    rm ${APPLICATIONTMP}
 fi
 
    rm ${APPLICATIONTMP}
 fi