Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
model-checker : fix comm determinism detection mechanisms
[simgrid.git] / src / smpi / smpirun.in
index 7b14c67..a27daaa 100755 (executable)
@@ -1,5 +1,11 @@
 #! /bin/sh
 
+# Copyright (c) 2007-2014. The SimGrid Team.
+# All rights reserved.
+
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of the license (GNU LGPL) which comes with this package.
+
 @CMAKE_SMPI_COMMAND@
 
 DEFAULT_LOOPBACK_BANDWIDTH="498000000"
@@ -15,7 +21,7 @@ NETWORK_BANDWIDTH="${DEFAULT_NETWORK_BANDWIDTH}"
 NETWORK_LATENCY="${DEFAULT_NETWORK_LATENCY}"
 POWER="${DEFAULT_POWER}"
 
-SIMOPTS="--cfg=maxmin/precision:1e-9 --cfg=network/model:SMPI --cfg=network/TCP_gamma:4194304"
+SIMOPTS="--cfg=maxmin/precision:1e-3 --cfg=surf/precision:1e-9 --cfg=network/model:SMPI --cfg=network/TCP_gamma:4194304"
 
 #usage to print the way this script should be called
 usage () {
@@ -85,6 +91,15 @@ while true; do
        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
@@ -191,12 +206,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."
@@ -210,6 +219,21 @@ if [ -z "${HOSTFILE}" ] ; then
     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`
@@ -332,6 +356,7 @@ do
        host="$(echo $hostnames|cut -d' ' -f$j)"
   fi
   echo "  <process host=\"${host}\" function=\"$i\"> <!-- function name used only for logging -->" >> ${APPLICATIONTMP}
+  echo "    <argument value=\"1\"/> <!-- instance -->" >> ${APPLICATIONTMP}
   echo "    <argument value=\"$i\"/> <!-- rank -->" >> ${APPLICATIONTMP}
   if [ "${EXTOPT}" = "smpi_replay" ]; then
     if  [ ${NUMTRACES} -gt 1 ]; then
@@ -395,6 +420,9 @@ if [ -n "${KEEP}" ] ; then
   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=$?
@@ -406,6 +434,9 @@ if [ -z "${KEEP}" ] ; then
    if [ ${HOSTFILETMP} = 1 ] ; then
         rm ${HOSTFILE}
    fi
+   if [ ${UNROLLEDHOSTFILETMP} = 1 ] ; then
+        rm ${UNROLLEDHOSTFILE}
+   fi
    rm ${APPLICATIONTMP}
 fi