starpu_smpirun.in 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. #!/bin/bash
  2. # StarPU --- Runtime system for heterogeneous multicore architectures.
  3. #
  4. # Copyright (C) 2014-2021 Université de Bordeaux, CNRS (LaBRI UMR 5800), Inria
  5. # Copyright (C) 2020 Federal University of Rio Grande do Sul (UFRGS)
  6. #
  7. # StarPU is free software; you can redistribute it and/or modify
  8. # it under the terms of the GNU Lesser General Public License as published by
  9. # the Free Software Foundation; either version 2.1 of the License, or (at
  10. # your option) any later version.
  11. #
  12. # StarPU is distributed in the hope that it will be useful, but
  13. # WITHOUT ANY WARRANTY; without even the implied warranty of
  14. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  15. #
  16. # See the GNU Lesser General Public License in COPYING.LGPL for more details.
  17. #
  18. # Script for running starpu-mpi application in simgrid mode
  19. prefix=@prefix@
  20. SMPIRUN=@mpiexec_path@
  21. STARPU_DATADIR=@datarootdir@
  22. STARPU_XSLTDIR=$STARPU_DATADIR/starpu
  23. SOURCE_DATADIR=@abs_srcdir@
  24. BUILDDIR=@abs_builddir@
  25. SMPI_VERSION=$($SMPIRUN -version | grep " version " | sed -e 's/.* \([0-9]*\.[0-9]*\).*/\1/')
  26. SMPI_MAJOR=${SMPI_VERSION%.*}
  27. SMPI_MINOR=${SMPI_VERSION#*.}
  28. if [ "$SMPI_MAJOR" -ge 4 -o \( "$SMPI_MAJOR" = 3 -a "$SMPI_MINOR" -ge 13 \) ]
  29. then
  30. DTD=http://simgrid.gforge.inria.fr/simgrid/simgrid.dtd
  31. V=4
  32. VF=.v4
  33. DASH=-
  34. else
  35. DTD=http://simgrid.gforge.inria.fr/simgrid.dtd
  36. V=3
  37. VF=""
  38. DASH=_
  39. fi
  40. EXTRA_OPT=""
  41. if [ "$SMPI_MAJOR" -ge 4 -o \( "$SMPI_MAJOR" = 3 -a "$SMPI_MINOR" -ge 16 \) ]
  42. then
  43. EXTRA_OPT+=" --cfg=smpi/privatization:yes"
  44. else
  45. EXTRA_OPT+=" --cfg=smpi/privatize${DASH}global${DASH}variables:yes"
  46. fi
  47. if [ -n "$TEST_LOGS" ]
  48. then
  49. # Testsuite, use our loader
  50. WRAPPER="-wrapper $BUILDDIR/../tests/loader"
  51. fi
  52. # When executed from source, take xslt from source
  53. [ "$0" -ef $BUILDDIR/starpu_smpirun ] && STARPU_XSLTDIR=$SOURCE_DATADIR
  54. MPI_PLATFORM=""
  55. MPI_HOSTFILE=""
  56. NP=""
  57. GDB=""
  58. HOSTFILE_PLATFORM_DETECT=""
  59. while true; do
  60. case "$1" in
  61. "-platform")
  62. MPI_PLATFORM=$2
  63. if [ ! -r "$MPI_PLATFORM" ]; then
  64. echo "$MPI_PLATFORM can't be read"
  65. exit 1
  66. fi
  67. shift 2
  68. ;;
  69. "-hostfile")
  70. MPI_HOSTFILE=$2
  71. if [ ! -r "$MPI_HOSTFILE" ]; then
  72. echo "$MPI_HOSTFILE can't be read"
  73. exit 1
  74. fi
  75. shift 2
  76. ;;
  77. "-np")
  78. NP=$2
  79. shift 2
  80. ;;
  81. "-hostfile-platform")
  82. HOSTFILE_PLATFORM_DETECT=1
  83. shift 1
  84. ;;
  85. "-gdb")
  86. GDB="-gdb"
  87. shift 1
  88. ;;
  89. *)
  90. break
  91. ;;
  92. esac
  93. done
  94. if [ -z "$MPI_PLATFORM" ] || [ -z "$MPI_HOSTFILE" ]; then
  95. echo "$0 -platform PLATFORM -hostfile HOSTFILE [ -np N ] [ -gdb ] [ ... ] program [ args ]"
  96. exit 2
  97. fi
  98. PLATFORM=$(mktemp /tmp/StarPU-MPI-platform-XXXXXXXX.xml)
  99. [ -n "$STARPU_HOME" ] || STARPU_HOME=$HOME
  100. [ -n "$STARPU_PERF_MODEL_DIR" ] || STARPU_PERF_MODEL_DIR=$STARPU_HOME/.starpu/sampling
  101. [ -n "$STARPU_HOSTNAME" ] || STARPU_HOSTNAME=$(hostname)
  102. NODE_PLATFORM=$STARPU_PERF_MODEL_DIR/bus/${STARPU_HOSTNAME}.platform$VF.xml
  103. [ -n "$NP" ] || NP=$(grep -v "^$" $MPI_HOSTFILE | wc -l)
  104. if ! type xsltproc > /dev/null 2> /dev/null
  105. then
  106. echo xsltproc is needed for starpu simgrid mpi.
  107. exit 1
  108. fi
  109. if [ -n "$HOSTFILE_PLATFORM_DETECT" ]
  110. then
  111. HOSTS=$(grep -v "^$" $MPI_HOSTFILE)
  112. export STARPU_MPI_HOSTNAMES=$(echo $HOSTS | tr -d '\011\012\015')
  113. fi
  114. (
  115. cat << EOF
  116. <?xml version='1.0'?>
  117. <!DOCTYPE platform SYSTEM "$DTD">
  118. <platform version="$V">
  119. <AS id="ASroot" routing="None">
  120. EOF
  121. tail -n +3 $MPI_PLATFORM | grep -v '<platform' | grep -v '</platform'
  122. if [ -n "$HOSTFILE_PLATFORM_DETECT" ]
  123. then
  124. i=0
  125. for h in $HOSTS ; do
  126. NODE_PLATFORM=$STARPU_PERF_MODEL_DIR/bus/${h}.platform$VF.xml
  127. if [ ! -f "$NODE_PLATFORM" ]; then
  128. echo File $NODE_PLATFORM do not exist, but ${h} is on hostfile.
  129. exit 1
  130. fi
  131. xsltproc --novalid --stringparam ASname StarPU-MPI$i $STARPU_XSLTDIR/starpu_smpi.xslt $NODE_PLATFORM | grep -v network/ | tail -n +4 | head -n -1
  132. i=$(expr $i + 1)
  133. done
  134. else
  135. for i in $(seq 0 $((NP - 1))) ; do
  136. xsltproc --novalid --stringparam ASname StarPU-MPI$i $STARPU_XSLTDIR/starpu_smpi.xslt $NODE_PLATFORM | grep -v network/ | tail -n +4 | head -n -1
  137. done
  138. fi
  139. cat << \EOF
  140. </AS>
  141. </platform>
  142. EOF
  143. ) > $PLATFORM
  144. STACKSIZE=$(ulimit -s)
  145. [ "$STACKSIZE" != unlimited ] || STACKSIZE=8192
  146. $SMPIRUN $WRAPPER $GDB -platform $PLATFORM -hostfile $MPI_HOSTFILE -np $NP "$@" $EXTRA_OPT --cfg=smpi/simulate${DASH}computation:no --cfg=contexts/stack${DASH}size:$STACKSIZE
  147. RET=$?
  148. rm -f $PLATFORM
  149. exit $RET