X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/253aec39d6b6cdae39cd320f47f952b7cd665048..065d4b2986a14f1241b87751d7507e3e4b4c4d1c:/src/smpi/smpirun.in diff --git a/src/smpi/smpirun.in b/src/smpi/smpirun.in index c246771545..90c0d1e4ce 100755 --- a/src/smpi/smpirun.in +++ b/src/smpi/smpirun.in @@ -1,4 +1,10 @@ -#!/bin/bash +#! /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@ @@ -18,7 +24,7 @@ POWER="${DEFAULT_POWER}" SIMOPTS="--cfg=maxmin/precision:1e-9 --cfg=network/model:SMPI --cfg=network/TCP_gamma:4194304" #usage to print the way this script should be called -function usage () { +usage () { cat < -hostfile program [program-options] Options: @@ -33,7 +39,7 @@ Options: -trace-comment-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-viva # generate configuration for Viva's GraphView + -trace-viva # generate configuration for Viva's GraphView -trace-file # name of the tracefile (simgrid_smpi.trace) -ext # additional parameter (reserved) @@ -52,6 +58,7 @@ fi EXTOPT="" WRAPPER="" +HOSTFILE="" while true; do case "$1" in @@ -84,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 @@ -190,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." @@ -209,6 +219,21 @@ if [ -z "${HOSTFILE}" ] ; then HOSTFILE="$(mktemp tmphostXXXXXX)" perl -ne 'print "$1\n" if /.*.*/' ${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` @@ -234,20 +259,26 @@ if [ -z "${PLATFORM}" ]; then PLATFORMHEAD -for (( i=${NUMPROCS}; $i ; i=$i-1 )) do +i=${NUMPROCS} +while [ $i -gt 0 ]; do echo " " >> ${PLATFORMTMP} echo " " >> ${PLATFORMTMP} echo " " >> ${PLATFORMTMP} + i=$((i - 1)) done -for (( i=${NUMPROCS}; $i ; i=$i-1 )) do - for (( j=${NUMPROCS}; $j ; j=$j-1 )) do +i=${NUMPROCS} +while [ $i -gt 0 ]; do + j=${NUMPROCS} + while [ $j -gt 0 ]; do if [ $i -eq $j ]; then echo " " >> ${PLATFORMTMP} else echo " " >> ${PLATFORMTMP} fi + j=$((j - 1)) done + i=$((i - 1)) done cat >> ${PLATFORMTMP} <&2 exit 1 @@ -312,25 +343,25 @@ fi for i in ${SEQ} do if [ -n "${HOSTFILE}" ]; then - j=$(( $i % ${NUMHOSTS} )) + j=$(( $i % ${NUMHOSTS} + 1 )) fi ##---- optional display of ranks to process mapping if [ -n "${MAPOPT}" ]; then - echo "[rank $i] -> ${hostnames[$j]}" + echo "[rank $i] -> $(echo $hostnames|cut -d' ' -f$j)" fi - if [ -z "${hostnames[$j]}" ]; then - host="host"$(($j+1)) + if [ -z "$(echo $hostnames|cut -d' ' -f$j)" ]; then + host="host"$($j) else - host="${hostnames[$j]}" + host="$(echo $hostnames|cut -d' ' -f$j)" fi echo " " >> ${APPLICATIONTMP} echo " " >> ${APPLICATIONTMP} if [ "${EXTOPT}" = "smpi_replay" ]; then if [ ${NUMTRACES} -gt 1 ]; then - echo " " >> ${APPLICATIONTMP} + echo " " >> ${APPLICATIONTMP} else - echo " " >> ${APPLICATIONTMP} + echo " " >> ${APPLICATIONTMP} fi else for ARG in $PROC_ARGS; do @@ -388,6 +419,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=$? @@ -399,6 +433,9 @@ if [ -z "${KEEP}" ] ; then if [ ${HOSTFILETMP} = 1 ] ; then rm ${HOSTFILE} fi + if [ ${UNROLLEDHOSTFILETMP} = 1 ] ; then + rm ${UNROLLEDHOSTFILE} + fi rm ${APPLICATIONTMP} fi