Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
a57e61aa4a931a68522dfdd32a570ee70f5d98cf
[simgrid.git] / src / smpi / smpirun.in
1 #!/bin/bash
2 DEFAULT_LOOPBACK_BANDWIDTH="498000000"
3 DEFAULT_LOOPBACK_LATENCY="0.000004"
4 DEFAULT_NETWORK_BANDWIDTH="$((26 * 1024 * 1024))"
5 DEFAULT_NETWORK_LATENCY="0.000005"
6 DEFAULT_NUMPROCS="4"
7 DEFAULT_POWER="100"
8
9 LOOPBACK_BANDWIDTH="${DEFAULT_LOOPBACK_BANDWIDTH}"
10 LOOPBACK_LATENCY="${DEFAULT_LOOPBACK_LATENCY}"
11 NETWORK_BANDWIDTH="${DEFAULT_NETWORK_BANDWIDTH}"
12 NETWORK_LATENCY="${DEFAULT_NETWORK_LATENCY}"
13 NUMPROCS="${DEFAULT_NUMPROCS}"
14 POWER="${DEFAULT_POWER}"
15
16 while true; do
17   case "$1" in
18    "-np" | "-n")
19       NUMPROCS="$2"
20       shift 2
21     ;;
22    "-bandwidth")
23       NETWORK_BANDWIDTH="$2"
24       shift 2
25     ;;
26    "-latency")
27       NETWORK_LATENCY="$2"
28       shift 2
29     ;;
30    "-platform")
31         PLATFORM="$2"
32       if [ ! -f ${PLATFORM} ]; then
33                 echo "[$0] ** error: the file '${PLATFORM}' does not exist. Aborting."
34                 exit 1
35       fi
36         shift 2
37     ;;
38    "-hostfile")
39         HOSTFILE="$2"
40       if [ ! -f ${HOSTFILE} ]; then
41                 echo "[$0] ** error: the file '${HOSTFILE}' does not exist. Aborting."
42                 exit 1
43       fi
44         shift 2
45     ;;
46
47    "-help" | "--help" | "-h") 
48       echo "usage:"
49       echo "$0 [-np <numprocs>] [-bandwidth <bytes/sec>] [-latency <secs>] [-platform <xmldesc>] [-hostfile <hostfile>] program [program-options]"
50       echo
51       exit
52    ;;
53     *)
54       break
55     ;;
56   esac
57 done
58
59 EXEC="$1"
60 shift
61
62 ##-----------------------------------
63
64
65
66
67 ##-------------------------------- DEFAULT or SPECIFIED PLATFORM --------------------------------------
68 if [ -z "${PLATFORM}" ]; then  
69         PLATFORMTMP="$(mktemp tmpXXXXXX)"
70
71         cat > ${PLATFORMTMP} <<PLATFORMHEAD
72 <?xml version='1.0'?>
73 <!DOCTYPE platform SYSTEM "simgrid.dtd">
74 <platform version="2">
75 PLATFORMHEAD
76
77 for (( i=${NUMPROCS}; $i ; i=$i-1 )) do
78   echo "  <host id=\"host$i\" power=\"${POWER}\"/>" >> ${PLATFORMTMP}
79   echo "  <link id=\"loop$i\" bandwidth=\"${LOOPBACK_BANDWIDTH}\" latency=\"${LOOPBACK_LATENCY}\"/>" >> ${PLATFORMTMP}
80   echo "  <link id=\"link$i\" bandwidth=\"${NETWORK_BANDWIDTH}\" latency=\"${NETWORK_LATENCY}\"/>" >> ${PLATFORMTMP}
81 done
82
83 for (( i=${NUMPROCS}; $i ; i=$i-1 )) do
84   for (( j=${NUMPROCS}; $j ; j=$j-1 )) do
85     if [ $i -eq $j ]; then
86       echo "  <route src=\"host$i\" dst=\"host$j\"><link:ctn id=\"loop$i\"/></route>" >> ${PLATFORMTMP}
87     else
88       echo "  <route src=\"host$i\" dst=\"host$j\"><link:ctn id=\"link$i\"/><link:ctn id=\"link$j\"/></route>" >> ${PLATFORMTMP}
89     fi
90   done
91 done
92
93 cat >> ${PLATFORMTMP} <<PLATFORMFOOT
94 </platform>
95 PLATFORMFOOT
96
97 else
98         PLATFORMTMP=${PLATFORM}
99 fi
100 ##-------------------------------- end DEFAULT or SPECIFIED PLATFORM --------------------------------------
101
102 ##-------------------------------- DEFAULT APPLICATION --------------------------------------
103 APPLICATIONTMP="$(mktemp tmpXXXXXX)"
104 #APPLICATIONTMP="app.xml"
105
106
107 cat > ${APPLICATIONTMP} <<APPLICATIONHEAD
108 <?xml version='1.0'?>
109 <!DOCTYPE platform SYSTEM "simgrid.dtd">
110 <platform version="2">
111 APPLICATIONHEAD
112
113 ##---- cache hostnames of hostfile---------------
114 if [ -n "${HOSTFILE}" ] && [ -f ${HOSTFILE} ]; then
115         hostnames=(`cat ${HOSTFILE} | tr \\\n " "`)
116 fi
117
118 ##----------------------------------------------------------
119 ##  generate application.xml with hostnames from hostfile:
120 ##  the name of host_i (1<=i<=p, where -np p) is the line i
121 ##  in hostfile (where -hostfile hostfile), or "host$i" if
122 ##  hostfile has less than i lines.
123 ##----------------------------------------------------------
124 for (( i=${NUMPROCS}; $i ; i=$i-1 )) do
125   j=$(( $i-1 ))
126   if [ -z "${hostnames[$j]}" ]; then
127         host="host"$i
128   else
129         host="${hostnames[$j]}"
130   fi
131   echo "  <process host=\"${host}\" function=\"smpi_simulated_main\">" >> ${APPLICATIONTMP}
132     echo "    <argument value=\"$j\"/> <!-- rank -->" >> ${APPLICATIONTMP}
133   for ARG in $*; do
134     echo "    <argument value=\"${ARG}\"/>" >> ${APPLICATIONTMP}
135   done
136   echo "  </process>" >> ${APPLICATIONTMP}
137 done
138
139 for (( i=${NUMPROCS}; $i ; i=$i-1 )) do
140   j=$(( $i-1 ))
141   if [ -z "${hostnames[$j]}" ]; then
142         host="host"$i
143   else
144         host="${hostnames[$j]}"
145   fi
146 done
147
148 cat >> ${APPLICATIONTMP} <<APPLICATIONFOOT
149 </platform>
150 APPLICATIONFOOT
151 ##-------------------------------- end DEFAULT APPLICATION --------------------------------------
152
153 echo ${EXEC} ${PLATFORMTMP} ${APPLICATIONTMP}
154 ${EXEC} ${PLATFORMTMP} ${APPLICATIONTMP}
155
156 echo "[$0] cleaning up temp files"
157 if [ -z "${PLATFORM}" ]; then
158         rm ${PLATFORMTMP} 
159 fi
160 #rm ${APPLICATIONTMP}