granularity.sh 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. #!/bin/bash
  2. # StarPU --- Runtime system for heterogeneous multicore architectures.
  3. #
  4. # Copyright (C) 2008-2021 Université de Bordeaux, CNRS (LaBRI UMR 5800), Inria
  5. #
  6. # StarPU is free software; you can redistribute it and/or modify
  7. # it under the terms of the GNU Lesser General Public License as published by
  8. # the Free Software Foundation; either version 2.1 of the License, or (at
  9. # your option) any later version.
  10. #
  11. # StarPU is distributed in the hope that it will be useful, but
  12. # WITHOUT ANY WARRANTY; without even the implied warranty of
  13. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  14. #
  15. # See the GNU Lesser General Public License in COPYING.LGPL for more details.
  16. #
  17. DIR=$PWD
  18. ROOTDIR=$DIR/../..
  19. SAMPLINGDIR=$DIR/sampling/
  20. TIMINGDIR=$DIR/timing/
  21. maxiter=5
  22. MINSIZE=$((30*1024))
  23. MAXSIZE=$((31*1024))
  24. # Testing another specific scheduler, no need to run this
  25. [ -z "$STARPU_SCHED" -o "$STARPU_SCHED" = dm -o "$STARPU_SCHED" = dmda ] || exit 77
  26. trace_granularity()
  27. {
  28. grain=$1
  29. echo "GRAIN $grain"
  30. #minblocks=1
  31. minblocks=$(($MINSIZE/$grain))
  32. #maxblocks=2
  33. maxblocks=$(($MAXSIZE/$grain))
  34. if test $maxblocks -ge 128; then
  35. maxblocks=128
  36. fi
  37. #step=2
  38. # step=$((2048/$grain))
  39. step=$((4096/$grain))
  40. for blocks in `seq $minblocks $step $maxblocks`
  41. do
  42. size=$(($blocks*$grain))
  43. echo "size : $size (grain $grain nblocks $blocks)"
  44. calibrate_grain $grain $size
  45. OPTIONS="-pin -nblocks $blocks -size $size -v3"
  46. filename=$TIMINGDIR/granularity.$grain.$size
  47. #rm -f $filename
  48. for iter in `seq 1 $maxiter`
  49. do
  50. echo "$iter / $maxiter"
  51. val=`STARPU_NCPUS=8 STARPU_NCUDA=3 STARPU_SCHED="dmda" STARPU_PREFETCH=1 STARPU_CALIBRATE=1 $STARPU_LAUNCH $ROOTDIR/examples/heat/heat $OPTIONS 2> /dev/null`
  52. echo "$val"
  53. echo "$val" >> $filename
  54. done
  55. done
  56. }
  57. trace_granularity_hybrid()
  58. {
  59. grain=$1
  60. echo "GRAIN $grain"
  61. #minblocks=1
  62. minblocks=$(($MINSIZE/$grain))
  63. #maxblocks=2
  64. maxblocks=$(($MAXSIZE/$grain))
  65. if test $maxblocks -ge 64; then
  66. maxblocks=64
  67. fi
  68. #step=2
  69. step=$((2048/$grain))
  70. for blocks in `seq $minblocks $step $maxblocks`
  71. do
  72. size=$(($blocks*$grain))
  73. ntheta=$(( $(($size/32)) + 2))
  74. echo "size : $size (grain $grain nblocks $blocks)"
  75. OPTIONS="-pin -nblocks $blocks -ntheta $ntheta -nthick 34 -v4"
  76. filename=$TIMINGDIR/hybrid.$grain.$size
  77. #rm -f $filename
  78. for iter in `seq 1 $maxiter`
  79. do
  80. echo "$iter / $maxiter"
  81. val=`STARPU_SCHED="dmda" STARPU_PREFETCH=1 STARPU_CALIBRATE=1 $STARPU_LAUNCH $ROOTDIR/examples/heat/heat $OPTIONS 2> /dev/null`
  82. echo "$val"
  83. echo "$val" >> $filename
  84. done
  85. done
  86. }
  87. calibrate_grain()
  88. {
  89. grain=$1
  90. size=$2
  91. echo "Calibrating grain $grain size $size ($blocks blocks)"
  92. rm -f $SAMPLINGDIR/*
  93. OPTIONS="-pin -nblocks $blocks -size $size -v3"
  94. STARPU_NCUDA=3 STARPU_NCPUS=8 STARPU_CALIBRATE=1 STARPU_SCHED="dm" $STARPU_LAUNCH $ROOTDIR/examples/heat/heat $OPTIONS 2> /dev/null
  95. STARPU_NCUDA=3 STARPU_NCPUS=8 STARPU_CALIBRATE=1 STARPU_PREFETCH=1 STARPU_SCHED="dmda" $STARPU_LAUNCH $ROOTDIR/examples/heat/heat $OPTIONS 2> /dev/null
  96. STARPU_NCUDA=3 STARPU_NCPUS=8 STARPU_CALIBRATE=1 STARPU_PREFETCH=1 STARPU_SCHED="dmda" $STARPU_LAUNCH $ROOTDIR/examples/heat/heat $OPTIONS 2> /dev/null
  97. STARPU_NCUDA=3 STARPU_NCPUS=8 STARPU_CALIBRATE=1 STARPU_PREFETCH=1 STARPU_SCHED="dmda" $STARPU_LAUNCH $ROOTDIR/examples/heat/heat $OPTIONS 2> /dev/null
  98. STARPU_NCUDA=3 STARPU_NCPUS=8 STARPU_CALIBRATE=1 STARPU_PREFETCH=1 STARPU_SCHED="dmda" $STARPU_LAUNCH $ROOTDIR/examples/heat/heat $OPTIONS 2> /dev/null
  99. STARPU_NCUDA=3 STARPU_NCPUS=8 STARPU_CALIBRATE=1 STARPU_PREFETCH=1 STARPU_SCHED="dmda" $STARPU_LAUNCH $ROOTDIR/examples/heat/heat $OPTIONS 2> /dev/null
  100. }
  101. mkdir -p $TIMINGDIR
  102. mkdir -p $SAMPLINGDIR
  103. #rm -f $SAMPLINGDIR/*
  104. #grainlist="64 128 256 512 768 1024 1536 2048"
  105. #grainlist="1024 2048 1024 512 256"
  106. grainlist="256 32 64 128 256 512 1024 2048 4096"
  107. export STARPU_PERF_MODEL_DIR=$SAMPLINGDIR
  108. cd $ROOTDIR
  109. cd $DIR
  110. # calibrate (sampling)
  111. # for grain in $grainlist
  112. # do
  113. # calibrate_grain $grain;
  114. # # calibrate_grain $(( $grain / 2));
  115. # done
  116. # perform the actual benchmarking now
  117. for grain in $grainlist
  118. do
  119. # trace_granularity_hybrid $grain;
  120. trace_granularity $grain;
  121. # trace_granularity_nomodel $grain;
  122. done