build_benchmark.sh 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. #!/bin/env bash
  2. simulation=${simulation:-1}
  3. simu=${simu:-xlspike}
  4. silent=${silent:-1}
  5. parallel=${parallel:-"-j"}
  6. SCRIPTDIR=$(dirname $(readlink -f $BASH_SOURCE))
  7. SCRIPTDIR=$(readlink -f $SCRIPTDIR)
  8. COMMON_ENV=$(readlink -f $SCRIPTDIR/env.sh)
  9. source $COMMON_ENV
  10. gen_logdir benchmark
  11. describe_env
  12. function do_bench {
  13. local bench=$1
  14. local core=$2
  15. local series=$3
  16. local stdclib=$4
  17. local bench_rstloc=$5
  18. if [[ "x$bench_rstloc" != "x" ]] ; then
  19. bench_rstloc=$(readlink -f $bench_rstloc)
  20. fi
  21. pushd $bench
  22. export CORE=$core CPU_SERIES=$series STDCLIB=$stdclib SIMULATION=$simulation SILENT=$silent SIMU=$simu
  23. echo "Build $bench for CORE=$core CPU_SERIES=$series STDCLIB=$stdclib SIMULATION=$simulation SIMU=$simu SILENT=$silent"
  24. if [ "x$DRYRUN" == "x0" ] ; then
  25. make clean
  26. echo "record build log in $bench_rstloc/build.log"
  27. make $parallel info showflags dasm > $bench_rstloc/build.log 2>&1
  28. if [ $? == 0 ] && [[ "x$bench_rstloc" != "x" ]] ; then
  29. cp -f $bench.verilog $bench_rstloc
  30. cp -f $bench.elf $bench_rstloc
  31. fi
  32. fi
  33. unset CORE CPU_SERIES STDCLIB SIMULATION SILENT SIMU
  34. popd
  35. }
  36. function do_all_benches {
  37. local genloc=${1:-$gen_elf_loc}
  38. for core_series in n205-200 n305-300 n300fd-300 n600-600 n600fd-600 n900-900 n900fd-900 nx600-600 nx600fd-600 nx900-900 nx900fd-900
  39. do
  40. for stdclib in newlib_small libncrt_small
  41. do
  42. for bench in coremark whetstone dhrystone
  43. do
  44. tmparr=(${core_series//-/ })
  45. core=${tmparr[0]} series=${tmparr[1]}
  46. if [[ "$core" == *"x"* ]] && [[ "$stdclib" == "libncrt"* ]] ; then
  47. echo "Ignore build for $bench: CORE=$core CPU_SERIES=$series STDCLIB=$stdclib"
  48. else
  49. echo "Do build for $bench: CORE=$core CPU_SERIES=$series STDCLIB=$stdclib"
  50. bench_rstloc=$genloc/$bench/${core}_${stdclib}
  51. mkdir -p $bench_rstloc
  52. pushd application/baremetal/benchmark
  53. if [[ "$bench" == "dhrystone" ]] ; then
  54. for dhry_mode in ground inline best
  55. do
  56. export DHRY_MODE=$dhry_mode
  57. echo "Do build for dhrystone DHRY_MODE=$dhry_mode"
  58. dhry_bench_rstloc=${bench_rstloc}/${dhry_mode}
  59. mkdir -p $dhry_bench_rstloc
  60. do_bench $bench $core $series $stdclib $dhry_bench_rstloc
  61. unset DHRY_MODE
  62. done
  63. else
  64. do_bench $bench $core $series $stdclib $bench_rstloc
  65. fi
  66. popd
  67. fi
  68. done
  69. done
  70. done
  71. }
  72. function dobench_for_runmode {
  73. local genloc=${1:-$gen_elf_loc}
  74. for runmode in "" lm icdlm dcilm cache bus clm
  75. do
  76. echo "Generate RUNMODE=$runmode"
  77. export RUNMODE=$runmode
  78. if [ "x$RUNMODE" == "x" ] ; then
  79. runmode=default
  80. fi
  81. do_all_benches $genloc/$runmode
  82. unset RUNMODE
  83. done
  84. }
  85. function collect_buildinfo {
  86. local benchbuild=$1
  87. date -u +"Build time: %Y-%m-%d, %H:%M:%S" >> $benchbuild
  88. echo "Nuclei SDK Version: on $(git rev-parse --abbrev-ref HEAD) branch, $(git describe --always --abbrev=10 --dirty --tags 2>&1)" >> $benchbuild
  89. echo -n "GCC Version: " >> $benchbuild
  90. riscv-nuclei-elf-gcc -v >> $benchbuild 2>&1
  91. }
  92. gen_elf_loc=${LOGDIR}
  93. gen_elf_loc=$(readlink -f $gen_elf_loc)
  94. benchbuild=$gen_elf_loc/build.txt
  95. benchlog=$gen_elf_loc/build.log
  96. pushd $NSDK_ROOT
  97. #echo "Do all benchmarks and generate bench to folder ${gen_elf_loc}"
  98. #do_all_benches | tee ${benchlog}
  99. echo "Do all benchmarks and generate bench for various RUNMODE to folder ${gen_elf_loc}"
  100. dobench_for_runmode | tee ${benchlog}
  101. echo "Collect bench build information"
  102. collect_buildinfo $benchbuild
  103. popd
  104. echo "collect all generated elf and verilog files to $LOGZIP"
  105. zip_logdir