# 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.
-
#usage to print the way this script should be called
usage () {
cat <<EOF
esac
done
-
-##-----------------------------------
-
-
if [ -z "${HOSTFILE}" ] && [ -z "${PLATFORM}" ] ; then
echo "No hostfile nor platform specified."
usage
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
exit 1
fi
-APP_TRACES=($PROC_ARGS)
##-------------------------------- DEFAULT APPLICATION --------------------------------------
-APPLICATIONTMP=${APP_TRACES[1]}
+APPLICATIONTMP=$(echo ${PROC_ARGS}|cut -d' ' -f2 -s)
cat > ${APPLICATIONTMP} <<APPLICATIONHEAD
<?xml version='1.0'?>
-<!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid.dtd">
-<platform version="3">
+<!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid/simgrid.dtd">
+<platform version="4.1">
APPLICATIONHEAD
##---- cache hostnames of hostfile---------------
NUMHOSTS=$(cat ${HOSTFILE} | wc -l)
fi
+DESCRIPTIONFILE=$(echo $PROC_ARGS|cut -d' ' -f1)
- if [ -n "${APP_TRACES[0]}" ] && [ -f "${APP_TRACES[0]}" ]; then
- NUMINSTANCES=$(cat ${APP_TRACES[0]} | wc -l)
- replayinstances=$(cat ${APP_TRACES[0]})
- IFS_OLD=$IFS
- IFS=$'\n'
- NUMPROCS=0
- for line in $replayinstances; do
+if [ -n "${DESCRIPTIONFILE}" ] && [ -f "${DESCRIPTIONFILE}" ]; then
+ NUMINSTANCES=$(cat ${DESCRIPTIONFILE} | wc -l)
+ replayinstances=$(cat ${DESCRIPTIONFILE})
+ IFS_OLD=$IFS
+ IFS=$'\n'
+ set -f
+ NUMPROCS=0
+ while IFS= read -r line; do
# return IFS back if you need to split new line by spaces:
IFS=$IFS_OLD
IFS_OLD=
- array=( $line )
# generate three lists, one with instance id, ont with instance size, one with files
- instance=${array[0]}
- hosttraces="$hosttraces$(cat ${array[1]}| tr '\n\r' ' ' )"
- NUMPROCSMINE=$(cat ${array[1]} | wc -l)
+ instance=$(echo "$line"|cut -d' ' -f1)
+ hosttrace=$(cat $(echo "$line"|cut -d' ' -f2)| tr '\n\r' ' ' )
+ NUMPROCSMINE=$(cat $(echo "$line"|cut -d' ' -f2) | wc -l)
- if [ $NUMPROCSMINE != ${array[2]} ];
+ if [ $NUMPROCSMINE != $(echo "$line"|cut -d' ' -f3) ];
then
- echo "declared num of processes for instance $instance : ${array[2]} is not the same as the one in the replay files : $NUMPROCSMINE. Please check consistency of these information"
+ echo "declared num of processes for instance $instance : $(echo "$line"|cut -d' ' -f3) is not the same as the one in the replay files : $NUMPROCSMINE. Please check consistency of these information"
exit 1
fi
- sleeptime=${array[3]}
+ sleeptime=$(echo "$line"|cut -d' ' -f4)
HAVE_SEQ="`which seq 2>/dev/null`"
if [ -n "${HAVE_SEQ}" ]; then
cnt=$((cnt + 1));
done
fi
- NUMPROCS=$((${NUMPROCS}+${NUMPROCSMINE}));
+ #NUMPROCS=$((${NUMPROCS}+${NUMPROCSMINE}));
for i in $SEQ1
- do
- instances="$instances$instance "
- ranks="$ranks$SEQ1 "
- sleeptimes="$sleeptimes$sleeptime "
- done
- # return IFS back to newline for "for" loop
- IFS_OLD=$IFS
- IFS=$'\n'
- done
-
- # return delimiter to previous value
- IFS=$IFS_OLD
- IFS_OLD=
- else
- printf "File not found: %s\n", "${APP_TRACES[0]:-\${APP_TRACES[0]\}}" >&2
- exit 1
- fi
-
-
##----------------------------------------------------------
## generate application.xml with hostnames from hostfile:
## the name of host_i (1<=i<=p, where -np p) is the line i
## hostfile has less than i lines.
##----------------------------------------------------------
-HAVE_SEQ="`which seq 2>/dev/null`"
+##---- generate <actor> tags------------------------------
+ do
+ if [ -n "${HOSTFILE}" ]; then
+ j=$(( ${NUMPROCS} % ${NUMHOSTS} +1))
+ fi
+ hostname=$(echo $hostnames|cut -d' ' -f$j)
+ if [ -z "${hostname}" ]; then
+ host="host"$($j)
+ else
+ host="${hostname}"
+ fi
+
+ echo " <actor host=\"${host}\" function=\"${instance}\"> <!-- function name used only for logging -->" >> ${APPLICATIONTMP}
+ echo " <argument value=\"${instance}\"/> <!-- instance -->" >> ${APPLICATIONTMP}
+ echo " <argument value=\"${i}\"/> <!-- rank -->" >> ${APPLICATIONTMP}
+ echo " <argument value=\"$(echo $hosttrace|cut -d' ' -f$(($i+1)))\"/>" >> ${APPLICATIONTMP}
+
+ echo " <argument value=\"${sleeptime}\"/> <!-- delay -->" >> ${APPLICATIONTMP}
+ echo " </actor>" >> ${APPLICATIONTMP}
+ NUMPROCS=$(( ${NUMPROCS} +1))
+ done
+ # return IFS back to newline for "for" loop
+ IFS_OLD=$IFS
+ IFS=$'\n'
+ done < ${DESCRIPTIONFILE}
-if [ -n "${HAVE_SEQ}" ]; then
- SEQ=`${HAVE_SEQ} 0 $((${NUMPROCS}-1))`
+ # return delimiter to previous value
+ IFS=$IFS_OLD
+ IFS_OLD=
else
- cnt=0
- while (( $cnt < ${NUMPROCS} )) ; do
- SEQ="$SEQ $cnt"
- cnt=$((cnt + 1));
- done
+ printf "File not found: %s\n", ${DESCRIPTIONFILE} >&2
+ exit 1
fi
-##---- generate <process> tags------------------------------
-
-hostnames=($hostnames)
-instances=($instances)
-hosttraces=($hosttraces)
-sleeptimes=($sleeptimes)
-ranks=($ranks)
-for i in ${SEQ}
-do
- if [ -n "${HOSTFILE}" ]; then
- j=$(( $i % ${NUMHOSTS} ))
- fi
- ##---- optional display of ranks to process mapping
- if [ -n "${MAPOPT}" ]; then
- echo "[rank $i] -> ${hostnames[j]}"
- fi
-
- if [ -z "${hostnames[j]}" ]; then
- host="host"$($j)
- else
- host="${hostnames[j]}"
- fi
- echo " <process host=\"${host}\" function=\"${instances[i]}\"> <!-- function name used only for logging -->" >> ${APPLICATIONTMP}
- echo " <argument value=\"${instances[i]}\"/> <!-- instance -->" >> ${APPLICATIONTMP}
- echo " <argument value=\"${ranks[i]}\"/> <!-- rank -->" >> ${APPLICATIONTMP}
- if [ ${NUMPROCS} -gt 1 ]; then
- echo " <argument value=\"${hosttraces[i]}\"/>" >> ${APPLICATIONTMP}
- else
- echo " <argument value=\"${hosttraces[i]}\"/>" >> ${APPLICATIONTMP}
- fi
- echo " <argument value=\"${sleeptimes[i]}\"/> <!-- delay -->" >> ${APPLICATIONTMP}
- echo " </process>" >> ${APPLICATIONTMP}
-done
-
cat >> ${APPLICATIONTMP} <<APPLICATIONFOOT
</platform>
APPLICATIONFOOT
##-------------------------------- end DEFAULT APPLICATION --------------------------------------
-
- if [ ${HOSTFILETMP} = 1 ] ; then
- rm ${HOSTFILE}
- fi
- if [ ${UNROLLEDHOSTFILETMP} = 1 ] ; then
- rm ${UNROLLEDHOSTFILE}
- fi
-
+if [ ${HOSTFILETMP} = 1 ] ; then
+ rm ${HOSTFILE}
+fi
+if [ ${UNROLLEDHOSTFILETMP} = 1 ] ; then
+ rm ${UNROLLEDHOSTFILE}
+fi
exit 0