Usage: $0 [OPTIONS] -platform <xmldesc> -hostfile <hostfile> program [program-options]
Options:
-keep-temps # don't remove the generated files after execution
+ -wrapper <command> # use command to run the program (e.g. "valgrind")
-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.
-trace-comment-file <file> # put file contents on the top of the trace file as comment
-trace-grouped # group MPI processes by location
-trace-resource # trace resource utilization
- -trace-triva # generate configuration for Triva's GraphView
+ -trace-viva # generate configuration for Viva's GraphView
-trace-file <tracefile> # name of the tracefile (simgrid_smpi.trace)
+ -ext <value> # additional parameter (reserved)
or (deprecated usage):
$0 [-keep-temps] [-np <numprocs>] [-bandwidth <bytes/sec>] [-latency <secs>] program [program-options]
exit
fi
+EXTOPT=""
+WRAPPER=""
+
while true; do
case "$1" in
"-np" | "-n")
shift 2
;;
+ "-ext")
+ EXTOPT="$2"
+ shift 2
+ ;;
+
"-map")
MAPOPT="true"
shift 1
shift 1
;;
- "-trace-triva")
- TRACE_TRIVA="true"
+ "-trace-viva")
+ TRACE_VIVA="true"
shift 1
;;
shift 1
;;
+ "-wrapper")
+ WRAPPER="$2"
+ shift 2
+ ;;
+
"-help" | "--help" | "-h")
usage
exit
esac
done
-EXEC="$1"
+if [ -n "$WRAPPER" ]; then
+ EXEC="$WRAPPER $1"
+else
+ EXEC="$1"
+fi
shift
+# steel --cfg and --logs options
+while [ $# -gt 0 ]; do
+ case "$1" in
+ "--cfg="*|"--log="*)
+ for OPT in ${1#*=}
+ do
+ SIMOPTS="$SIMOPTS ${1%%=*}=$OPT"
+ done
+ shift 1
+ ;;
+ *)
+ PROC_ARGS="${PROC_ARGS:+$PROC_ARGS }$1"
+ shift
+ ;;
+ esac
+done
+
+
##-----------------------------------
# Basic checks on the provided arguments
exit 1
fi
-if [ -z "${HOSTFILE}" ] ; then
- echo "No hostfile specified."
+if [ -z "${HOSTFILE}" ] && [ -z "${PLATFORM}" ] ; then
+ echo "No hostfile nor platform specified."
usage
exit 1
fi
+HOSTFILETMP=0
+if [ -z "${HOSTFILE}" ] ; then
+ HOSTFILETMP=1
+ HOSTFILE="$(mktemp tmphostXXXXXX)"
+ perl -ne 'print "$1\n" if /.*<host.*?id="(.*?)".*?\/>.*/' ${PLATFORM} > ${HOSTFILE}
+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`
+hostfile_procs=`grep -c "[a-zA-Z0-9]" $HOSTFILE`
if [ -z "${NUMPROCS}" ] ; then
# Use the amount of processes in the hostfile as default value for the -np parameter
NUMHOSTS=`cat ${HOSTFILE} | wc -l`
fi
-if [ "${EXEC}" = "./smpi_replay" ]; then
- APP_TRACES=$1;
- if [ -n "${APP_TRACES}" ] && [ -f ${APP_TRACES} ]; then
+if [ "${EXTOPT}" = "smpi_replay" ]; then
+ APP_TRACES=$PROC_ARGS
+ if [ -n "${APP_TRACES}" ] && [ -f "${APP_TRACES}" ]; then
hosttraces=(`cat ${APP_TRACES} | tr \\\n " "`)
NUMTRACES=`cat ${APP_TRACES} | wc -l`
+ else
+ printf "File not found: %s\n", "${APP_TRACES:-\${APP_TRACES\}}" >&2
+ exit 1
fi
fi
fi
echo " <process host=\"${host}\" function=\"$i\"> <!-- function name used only for logging -->" >> ${APPLICATIONTMP}
echo " <argument value=\"$i\"/> <!-- rank -->" >> ${APPLICATIONTMP}
- if [ "${EXEC}" = "./smpi_replay" ]; then
+ if [ "${EXTOPT}" = "smpi_replay" ]; then
if [ ${NUMTRACES} -gt 1 ]; then
echo " <argument value=\"${hosttraces[$j]}\"/>" >> ${APPLICATIONTMP}
else
echo " <argument value=\"${hosttraces[0]}\"/>" >> ${APPLICATIONTMP}
fi
else
- for ARG in $*; do
+ for ARG in $PROC_ARGS; do
echo " <argument value=\"${ARG}\"/>" >> ${APPLICATIONTMP}
done
fi
TRACEOPTIONS="${TRACEOPTIONS} --cfg=tracing/categorized:1 --cfg=tracing/uncategorized:1"
fi
- if [ -n "${TRACE_TRIVA}" ]; then
- TRACEOPTIONS="${TRACEOPTIONS} --cfg=triva/categorized:smpi_cat.plist --cfg=triva/uncategorized:smpi_uncat.plist"
+ if [ -n "${TRACE_VIVA}" ]; then
+ TRACEOPTIONS="${TRACEOPTIONS} --cfg=viva/categorized:smpi_cat.plist --cfg=viva/uncategorized:smpi_uncat.plist"
fi
fi
##---------------------- end SMPI TRACING OPTIONS ---------------------------------
export SMPI_GLOBAL_SIZE=${NUMPROCS}
if [ -n "${KEEP}" ] ; then
- echo ${EXEC} ${SIMOPTS} ${TRACEOPTIONS} ${PLATFORMTMP} ${APPLICATIONTMP}
+ echo ${EXEC} ${TRACEOPTIONS} ${SIMOPTS} ${PLATFORMTMP} ${APPLICATIONTMP}
+ if [ ${HOSTFILETMP} = 1 ] ; then
+ echo "Generated hostfile ${HOSTFILE} keeped."
+ fi
fi
-${EXEC} ${SIMOPTS} ${TRACEOPTIONS} ${PLATFORMTMP} ${APPLICATIONTMP}
+${EXEC} ${TRACEOPTIONS} ${SIMOPTS} ${PLATFORMTMP} ${APPLICATIONTMP}
status=$?
if [ -z "${KEEP}" ] ; then
if [ -z "${PLATFORM}" ]; then
rm ${PLATFORMTMP}
fi
+ if [ ${HOSTFILETMP} = 1 ] ; then
+ rm ${HOSTFILE}
+ fi
rm ${APPLICATIONTMP}
fi