#! /bin/sh
-# Copyright (c) 2007-2015. The SimGrid Team.
-# All rights reserved.
+# Copyright (c) 2007-2016, 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.
NETWORK_LATENCY="${DEFAULT_NETWORK_LATENCY}"
SPEED="${DEFAULT_SPEED}"
-SIMOPTS="--cfg=surf/precision:1e-9 --cfg=network/model:SMPI --cfg=network/TCP_gamma:4194304"
+PRIVATIZE="--cfg=smpi/privatize-global-variables:yes"
+
+SIMOPTS="--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 () {
-map # display the machine on which each process rank is mapped
-np <numprocs> # use that amount of processes from the hostfile.
# By default, all processes of the hostfile are used.
+ -no-privatize # Disable the globals privatization, that is activated by default
-trace-ti # activate time independant tracing (for replay, default in smpi_simgrid.txt)
-trace # activate tracing (Paje, default in smpi_simgrid.trace)
-trace-comment <comment> # put a comment on the top of the trace file
fi
shift 2
;;
-
"-machinefile")
HOSTFILE="$2"
if [ ! -f "${HOSTFILE}" ]; then
fi
shift 2
;;
-
"-ext")
EXTOPT="$2"
shift 2
;;
-
+ "-no-privatize")
+ PRIVATIZE=""
+ shift 1
+ ;;
"-map")
MAPOPT="true"
shift 1
;;
-
"-trace")
TRACE_ACTIVE="true"
shift 1
;;
-
"-trace-ti")
TRACE_ACTIVE="true"
TRACE_TI_ACTIVE="true"
shift 1
;;
-
"-trace-comment")
TRACE_COMMENT="$2"
shift 2
;;
-
"-trace-comment-file")
TRACE_COMMENT_FILE="$2"
shift 2
;;
-
"-trace-file")
TRACE_FILENAME="$2"
shift 2
;;
-
"-trace-grouped")
TRACE_GROUPED="true"
shift 1
;;
-
"-trace-resource")
TRACE_RESOURCE="true"
shift 1
;;
-
"-trace-viva")
TRACE_VIVA="true"
shift 1
;;
-
"-keep-temps")
KEEP="true"
shift 1
;;
-
"-wrapper")
WRAPPER="$2"
shift 2
;;
-
"-help" | "--help" | "-h")
usage
exit 0
;;
-
"-version" | "--version" | "-v")
printf '%b\n' "$SIMGRID_VERSION"
exit 0
;;
-
"-git-version" | "--git-version")
printf '%b\n' "$SIMGRID_GITHASH"
exit 0
;;
-
"--cfg="*|"--log="*)
for OPT in ${1#*=}
do
esac
done
-
-##-----------------------------------
-
-
if [ -z "${HOSTFILE}" ] && [ -z "${PLATFORM}" ] ; then
echo "No hostfile nor platform specified."
usage
}
}
} elsif (/<cluster/) {
- die ("Unparsable cluster tag. Either provide an hostfile yourself or give the attributes prefix, radical and suffix in that order on the <cluster line");
+ die ("Unparsable cluster tag. smpirun uses a primitive regular expression to parse cluster tags. Either provide a hostfile yourself or give the attributes prefix, radical and suffix IN THAT ORDER and ON THE SAME LINE as the opening tag (<cluster)");
}' ${PLATFORM} >> ${HOSTFILE}
fi
UNROLLEDHOSTFILETMP=0
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`
if [ ${hostfile_procs} = 0 ] ; then
NUMPROCS=$hostfile_procs
fi
-
if [ ${NUMPROCS} -gt ${hostfile_procs} ] ; then
echo "You requested to use ${NUMPROCS} processes, but there is only ${hostfile_procs} processes in your hostfile..." >&2
fi
PLATFORMTMP=${PLATFORM}
fi
##-------------------------------- end DEFAULT or SPECIFIED PLATFORM --------------------------------------
-
##-------------------------------- DEFAULT APPLICATION --------------------------------------
APPLICATIONTMP="$(mktemp smpitmp-appXXXXXX)"
#APPLICATIONTMP="app.xml"
-
cat > ${APPLICATIONTMP} <<APPLICATIONHEAD
<?xml version='1.0'?>
<!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid/simgrid.dtd">
##----------------------------------------------------------
## generate application.xml with hostnames from hostfile:
-## the name of host_i (1<=i<=p, where -np p) is the line i
-## in hostfile (where -hostfile hostfile), or "host$i" if
+## the name of host_i (1<=i<=p, where -np p) is the line i in hostfile (where -hostfile hostfile), or "host$i" if
## hostfile has less than i lines.
##----------------------------------------------------------
fi
##---- generate <process> tags------------------------------
-
for i in ${SEQ}
do
if [ -n "${HOSTFILE}" ]; then
</platform>
APPLICATIONFOOT
##-------------------------------- end DEFAULT APPLICATION --------------------------------------
-
##---------------------- SMPI TRACING OPTIONS ---------------------------------
if [ -n "${TRACE_ACTIVE}" ]; then
#define trace filename
fi
if [ -n "${TRACE_COMMENT_FILE}" ]; then
- TRACEOPTIONS="${TRACEOPTIONS} --cfg=tracing/comment_file:${TRACE_COMMENT_FILE}"
+ TRACEOPTIONS="${TRACEOPTIONS} --cfg=tracing/comment-file:${TRACE_COMMENT_FILE}"
fi
if [ -n "${TRACE_GROUPED}" ]; then
export SMPI_GLOBAL_SIZE=${NUMPROCS}
if [ -n "${KEEP}" ] ; then
- echo ${EXEC} ${TRACEOPTIONS} ${SIMOPTS} ${PLATFORMTMP} ${APPLICATIONTMP}
+ echo ${EXEC} ${TRACEOPTIONS} ${SIMOPTS} ${PRIVATIZE} ${PLATFORMTMP} ${APPLICATIONTMP}
if [ ${HOSTFILETMP} = 1 ] ; then
echo "Generated hostfile ${HOSTFILE} kept."
fi
# Execute the process
#
-# The shell still need to be alive for the duration in order to do some cleanup
-# after the process.
+# The shell still need to be alive for the duration in order to do some cleanup after the process.
#
-# We are going through great lengths in order to both keep stdin and be able
-# to handle signals:
+# We are going through great lengths in order to both keep stdin and be able to handle signals:
#
-# * The job is launched in the background in order to be able to handle
-# signals.
+# * The job is launched in the background in order to be able to handle signals.
#
-# * The FD 3 is used to temporarily store FD 1. This is because the shell
-# connects FD 1 to /dev/null when the command is launched in the
-# background: this can be overriden in bash but not in standard bourne shell.
+# * The FD 3 is used to temporarily store FD 1. This is because the shell connects FD 1 to /dev/null when the command
+# is launched in the background: this can be overriden in bash but not in standard bourne shell.
exec 3<&0
${EXEC} ${TRACEOPTIONS} ${SIMOPTS} ${PLATFORMTMP} ${APPLICATIONTMP} <&3 3>&- &
pid=$!