run.sh 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. #!/bin/env bash
  2. ## Sample runs:
  3. ### Build for fpga: SIMU_OPTS= LOGROOT=gen/fpga RUNTARGET= ./run.sh
  4. ### Build for cycle model or rtl sim: LOGROOT=gen/rtl RUNTARGET= ./run.sh
  5. SIMU_OPTS=${SIMU_OPTS-"SIMULATION=1 SIMU=xlspike"}
  6. RUNTARGET=${RUNTARGET-xlspike}
  7. DATALOC=${DATALOC:-dlm}
  8. SOC=${SOC:-evalsoc}
  9. SCRIPTDIR=$(dirname $(readlink -f $BASH_SOURCE))
  10. SCRIPTDIR=$(readlink -f $SCRIPTDIR)
  11. COMMON_ENV=$(readlink -f $SCRIPTDIR/../env.sh)
  12. DOBENCH_CONFLOC=$SCRIPTDIR
  13. source $COMMON_ENV
  14. MAKEOPTS="SOC=$SOC"
  15. LINKSCRIPT="SoC/${SOC}/Board/nuclei_fpga_eval/Source/GCC/gcc_${SOC}_ilm.ld"
  16. function genreport {
  17. local logdir=${1:-$LOGDIR}
  18. REPORT_CMD="python3 $NSDK_REPORT_PY --logdir $logdir --split"
  19. if [ "x$RUNTARGET" != "x" ] ; then
  20. REPORT_CMD="$REPORT_CMD --run"
  21. fi
  22. echo $REPORT_CMD
  23. if [[ $DRYRUN == 0 ]] ; then
  24. eval $REPORT_CMD
  25. fi
  26. }
  27. function runbench {
  28. local appcfg=$1
  29. local hwcfg=$2
  30. local logdir=$3
  31. local mkopts=${@:4}
  32. RUN_OPTS=""
  33. if [ "x$RUNTARGET" != "x" ] ; then
  34. RUN_OPTS="--run --run_target $RUNTARGET"
  35. fi
  36. local BENCH_CMD="python3 $NSDK_BENCH_PY --appcfg $appcfg --hwcfg $hwcfg --parallel=-j --logdir $logdir --make_options \"$MAKEOPTS $SIMU_OPTS $mkopts\" $RUN_OPTS"
  37. echo $BENCH_CMD
  38. if [[ $DRYRUN == 0 ]] ; then
  39. eval $BENCH_CMD
  40. fi
  41. }
  42. function runbench_for_allcores {
  43. local logdir=${1:-$LOGDIR}
  44. pushd $NSDK_ROOT
  45. echo "Run benchmark on different CORE"
  46. local runlogdir=$logdir/barebench
  47. for core in n200 n300 n600 n900 nx600 nx900 ux1000
  48. do
  49. echo "Build for CORE: $core"
  50. local appcfg=${DOBENCH_CONFLOC}/app.json
  51. local hwcfg=${DOBENCH_CONFLOC}/bench_${core}.json
  52. local corelogdir=$runlogdir/$core
  53. runbench $appcfg $hwcfg $corelogdir
  54. done
  55. genreport $runlogdir
  56. popd
  57. }
  58. function rundhry_for_allcores {
  59. local logdir=${1:-$LOGDIR}
  60. pushd $NSDK_ROOT
  61. echo "Run for dhrystone different modes"
  62. local runlogdir=$logdir/dhrystone
  63. for core in n200 n300 n600 n900 nx600 nx900 ux1000
  64. do
  65. for dhrymode in ground inline best
  66. do
  67. echo "Build for CORE: $core DHRY_MODE=$dhrymode"
  68. local appcfg=${DOBENCH_CONFLOC}/dhry.json
  69. local hwcfg=${DOBENCH_CONFLOC}/bench_${core}.json
  70. local corelogdir=$runlogdir/$dhrymode/$core
  71. local mkopts="DHRY_MODE=$dhrymode"
  72. runbench $appcfg $hwcfg $corelogdir $mkopts
  73. done
  74. done
  75. genreport $runlogdir
  76. popd
  77. }
  78. function run_for_allmodes {
  79. local logdir=${1:-$LOGDIR}
  80. local gldownload=$DOWNLOAD
  81. echo "Generate for all run modes"
  82. for runmode in "" lm icdlm dcilm cache bus clm
  83. do
  84. echo "Generate RUNMODE=$runmode"
  85. export RUNMODE=$runmode
  86. if [ "x$RUNMODE" == "x" ] ; then
  87. runmode=default
  88. fi
  89. if [ "x$gldownload" != "x" ] ; then
  90. export DOWNLOAD=$gldownload
  91. echo "Using global DOWNLOAD=$DOWNLOAD"
  92. fi
  93. # for runmode=cache, need to run on sram area
  94. if [ "x$RUNMODE" == "xcache" ] ; then
  95. export DOWNLOAD=sram
  96. echo "Override DOWNLOAD=$DOWNLOAD for cache run mode"
  97. fi
  98. runbench_for_allcores $logdir/$runmode
  99. rundhry_for_allcores $logdir/$runmode
  100. unset RUNMODE DOWNLOAD
  101. done
  102. }
  103. function run_for_one {
  104. echo "Generate only for run mode=$RUNMODE"
  105. export RUNMODE=$RUNMODE
  106. local gldownload=$DOWNLOAD
  107. # for runmode=cache, need to run on sram area
  108. if [ "x$gldownload" != "x" ] ; then
  109. export DOWNLOAD=$gldownload
  110. echo "Using global DOWNLOAD=$DOWNLOAD"
  111. fi
  112. if [ "x$RUNMODE" == "xcache" ] ; then
  113. export DOWNLOAD=sram
  114. echo "Override DOWNLOAD=$DOWNLOAD for cache run mode"
  115. fi
  116. runmode=$RUNMODE
  117. if [ "x$RUNMODE" == "x" ] ; then
  118. runmode=default
  119. fi
  120. local logdir=${1:-$LOGDIR}
  121. runbench_for_allcores $logdir
  122. rundhry_for_allcores $logdir
  123. unset RUNMODE DOWNLOAD
  124. }
  125. function prebench {
  126. echo "Do pre-bench steps"
  127. if [ "x$DATALOC" == "xilm" ] ; then
  128. sed -i -e 's/REGION_ALIAS("DATA_LMA", ram)/REGION_ALIAS("DATA_LMA", ilm)/' ${NSDK_ROOT}/${LINKSCRIPT}
  129. fi
  130. }
  131. function postbench {
  132. echo "Do post-bench steps"
  133. if [ "x$DATALOC" == "xilm" ] ; then
  134. git stash
  135. fi
  136. }
  137. prebench
  138. gen_logdir dobench
  139. describe_env
  140. if [ "x$RUNMODE" == "xall" ] ; then
  141. run_for_allmodes | tee $LOGDIR/build.log
  142. else
  143. run_for_one | tee $LOGDIR/build.log
  144. fi
  145. postbench
  146. zip_logdir