granularity.sh 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. #!/bin/bash
  2. # StarPU --- Runtime system for heterogeneous multicore architectures.
  3. #
  4. # Copyright (C) 2008-2011,2014, 2019 Université de Bordeaux
  5. # Copyright (C) 2010,2015,2017 CNRS
  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. DIR=$PWD
  19. ROOTDIR=$DIR/../..
  20. SAMPLINGDIR=$DIR/sampling/
  21. TIMINGDIR=$DIR/timing/
  22. maxiter=5
  23. MINSIZE=$((30*1024))
  24. MAXSIZE=$((31*1024))
  25. # Testing another specific scheduler, no need to run this
  26. [ -z "$STARPU_SCHED" -a "$STARPU_SCHED" != dm -a "$STARPU_SCHED" != dmda ] || exit 77
  27. trace_granularity()
  28. {
  29. grain=$1
  30. echo "GRAIN $grain"
  31. #minblocks=1
  32. minblocks=$(($MINSIZE/$grain))
  33. #maxblocks=2
  34. maxblocks=$(($MAXSIZE/$grain))
  35. if test $maxblocks -ge 128; then
  36. maxblocks=128
  37. fi
  38. #step=2
  39. # step=$((2048/$grain))
  40. step=$((4096/$grain))
  41. for blocks in `seq $minblocks $step $maxblocks`
  42. do
  43. size=$(($blocks*$grain))
  44. echo "size : $size (grain $grain nblocks $blocks)"
  45. calibrate_grain $grain $size
  46. OPTIONS="-pin -nblocks $blocks -size $size -v3"
  47. filename=$TIMINGDIR/granularity.$grain.$size
  48. #rm -f $filename
  49. for iter in `seq 1 $maxiter`
  50. do
  51. echo "$iter / $maxiter"
  52. val=`STARPU_NCPUS=8 STARPU_NCUDA=3 STARPU_SCHED="dmda" STARPU_PREFETCH=1 STARPU_CALIBRATE=1 $ROOTDIR/examples/heat/heat $OPTIONS 2> /dev/null`
  53. echo "$val"
  54. echo "$val" >> $filename
  55. done
  56. done
  57. }
  58. trace_granularity_hybrid()
  59. {
  60. grain=$1
  61. echo "GRAIN $grain"
  62. #minblocks=1
  63. minblocks=$(($MINSIZE/$grain))
  64. #maxblocks=2
  65. maxblocks=$(($MAXSIZE/$grain))
  66. if test $maxblocks -ge 64; then
  67. maxblocks=64
  68. fi
  69. #step=2
  70. step=$((2048/$grain))
  71. for blocks in `seq $minblocks $step $maxblocks`
  72. do
  73. size=$(($blocks*$grain))
  74. ntheta=$(( $(($size/32)) + 2))
  75. echo "size : $size (grain $grain nblocks $blocks)"
  76. OPTIONS="-pin -nblocks $blocks -ntheta $ntheta -nthick 34 -v4"
  77. filename=$TIMINGDIR/hybrid.$grain.$size
  78. #rm -f $filename
  79. for iter in `seq 1 $maxiter`
  80. do
  81. echo "$iter / $maxiter"
  82. val=`STARPU_SCHED="dmda" STARPU_PREFETCH=1 STARPU_CALIBRATE=1 $ROOTDIR/examples/heat/heat $OPTIONS 2> /dev/null`
  83. echo "$val"
  84. echo "$val" >> $filename
  85. done
  86. done
  87. }
  88. calibrate_grain()
  89. {
  90. grain=$1
  91. size=$2
  92. echo "Calibrating grain $grain size $size ($blocks blocks)"
  93. rm -f $SAMPLINGDIR/*
  94. OPTIONS="-pin -nblocks $blocks -size $size -v3"
  95. STARPU_NCUDA=3 STARPU_NCPUS=8 STARPU_CALIBRATE=1 STARPU_SCHED="dm" $ROOTDIR/examples/heat/heat $OPTIONS 2> /dev/null
  96. STARPU_NCUDA=3 STARPU_NCPUS=8 STARPU_CALIBRATE=1 STARPU_PREFETCH=1 STARPU_SCHED="dmda" $ROOTDIR/examples/heat/heat $OPTIONS 2> /dev/null
  97. STARPU_NCUDA=3 STARPU_NCPUS=8 STARPU_CALIBRATE=1 STARPU_PREFETCH=1 STARPU_SCHED="dmda" $ROOTDIR/examples/heat/heat $OPTIONS 2> /dev/null
  98. STARPU_NCUDA=3 STARPU_NCPUS=8 STARPU_CALIBRATE=1 STARPU_PREFETCH=1 STARPU_SCHED="dmda" $ROOTDIR/examples/heat/heat $OPTIONS 2> /dev/null
  99. STARPU_NCUDA=3 STARPU_NCPUS=8 STARPU_CALIBRATE=1 STARPU_PREFETCH=1 STARPU_SCHED="dmda" $ROOTDIR/examples/heat/heat $OPTIONS 2> /dev/null
  100. STARPU_NCUDA=3 STARPU_NCPUS=8 STARPU_CALIBRATE=1 STARPU_PREFETCH=1 STARPU_SCHED="dmda" $ROOTDIR/examples/heat/heat $OPTIONS 2> /dev/null
  101. }
  102. mkdir -p $TIMINGDIR
  103. mkdir -p $SAMPLINGDIR
  104. #rm -f $SAMPLINGDIR/*
  105. #grainlist="64 128 256 512 768 1024 1536 2048"
  106. #grainlist="1024 2048 1024 512 256"
  107. grainlist="256 32 64 128 256 512 1024 2048 4096"
  108. export STARPU_PERF_MODEL_DIR=$SAMPLINGDIR
  109. cd $ROOTDIR
  110. cd $DIR
  111. # calibrate (sampling)
  112. # for grain in $grainlist
  113. # do
  114. # calibrate_grain $grain;
  115. # # calibrate_grain $(( $grain / 2));
  116. # done
  117. # perform the actual benchmarking now
  118. for grain in $grainlist
  119. do
  120. # trace_granularity_hybrid $grain;
  121. trace_granularity $grain;
  122. # trace_granularity_nomodel $grain;
  123. done