+ Microarchitecture optimizations + 64-bit support + Xilinx FPGA support + LLVM-16 support + Refactoring and quality control fixes
322 lines
11 KiB
Bash
Executable File
322 lines
11 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Copyright © 2019-2023
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
|
|
# exit when any command fails
|
|
set -e
|
|
|
|
# clear blackbox cache
|
|
rm -f blackbox.*.cache
|
|
|
|
unittest()
|
|
{
|
|
make -C tests/unittest run
|
|
}
|
|
|
|
isa()
|
|
{
|
|
echo "begin isa tests..."
|
|
|
|
make -C tests/riscv/isa run-simx
|
|
make -C tests/riscv/isa run-rtlsim
|
|
CONFIGS="-DDPI_DISABLE" make -C tests/riscv/isa run-rtlsim
|
|
|
|
make -C sim/rtlsim clean && CONFIGS="-DFPU_FPNEW" make -C sim/rtlsim
|
|
make -C tests/riscv/isa run-rtlsim-32f
|
|
|
|
make -C sim/rtlsim clean && CONFIGS="-DFPU_DPI" make -C sim/rtlsim
|
|
make -C tests/riscv/isa run-rtlsim-32f
|
|
|
|
make -C sim/rtlsim clean && CONFIGS="-DFPU_DSP" make -C sim/rtlsim
|
|
make -C tests/riscv/isa run-rtlsim-32f
|
|
|
|
if [ "$XLEN" == "64" ]
|
|
then
|
|
make -C sim/rtlsim clean && CONFIGS="-DFPU_FPNEW" make -C sim/rtlsim
|
|
make -C tests/riscv/isa run-rtlsim-64f
|
|
|
|
make -C sim/rtlsim clean && CONFIGS="-DEXT_D_ENABLE -DFPU_FPNEW" make -C sim/rtlsim
|
|
make -C tests/riscv/isa run-rtlsim-64d || true
|
|
|
|
make -C sim/rtlsim clean && CONFIGS="-DFPU_DPI" make -C sim/rtlsim
|
|
make -C tests/riscv/isa run-rtlsim-64f
|
|
|
|
make -C sim/rtlsim clean && CONFIGS="-DFPU_DSP" make -C sim/rtlsim
|
|
make -C tests/riscv/isa run-rtlsim-64fx
|
|
fi
|
|
|
|
make -C sim/rtlsim clean && make -C sim/rtlsim
|
|
|
|
echo "isa tests done!"
|
|
}
|
|
|
|
regression()
|
|
{
|
|
echo "begin regression tests..."
|
|
|
|
make -C tests/kernel run-simx
|
|
make -C tests/kernel run-rtlsim
|
|
|
|
make -C tests/regression run-simx
|
|
make -C tests/regression run-rtlsim
|
|
|
|
# test FPU hardware implementations
|
|
CONFIGS="-DFPU_DPI" ./ci/blackbox.sh --driver=rtlsim --app=dogfood
|
|
CONFIGS="-DFPU_DSP" ./ci/blackbox.sh --driver=rtlsim --app=dogfood
|
|
CONFIGS="-DFPU_FPNEW" ./ci/blackbox.sh --driver=rtlsim --app=dogfood
|
|
|
|
# test local barrier
|
|
./ci/blackbox.sh --driver=simx --app=dogfood --args="-n1 -t19"
|
|
./ci/blackbox.sh --driver=rtlsim --app=dogfood --args="-n1 -t19"
|
|
|
|
# test global barrier
|
|
CONFIGS="-DGBAR_ENABLE" ./ci/blackbox.sh --driver=simx --app=dogfood --args="-n1 -t20" --cores=2
|
|
CONFIGS="-DGBAR_ENABLE" ./ci/blackbox.sh --driver=rtlsim --app=dogfood --args="-n1 -t20" --cores=2
|
|
|
|
# test FPU core
|
|
|
|
echo "regression tests done!"
|
|
}
|
|
|
|
opencl()
|
|
{
|
|
echo "begin opencl tests..."
|
|
|
|
make -C tests/opencl run-simx
|
|
make -C tests/opencl run-rtlsim
|
|
|
|
echo "opencl tests done!"
|
|
}
|
|
|
|
cluster()
|
|
{
|
|
echo "begin clustering tests..."
|
|
|
|
# warp/threads configurations
|
|
./ci/blackbox.sh --driver=rtlsim --cores=1 --warps=1 --threads=1 --app=diverge
|
|
./ci/blackbox.sh --driver=rtlsim --cores=1 --warps=2 --threads=2 --app=diverge
|
|
./ci/blackbox.sh --driver=rtlsim --cores=1 --warps=2 --threads=8 --app=diverge
|
|
./ci/blackbox.sh --driver=rtlsim --cores=1 --warps=8 --threads=2 --app=diverge
|
|
./ci/blackbox.sh --driver=simx --cores=1 --warps=1 --threads=1 --app=diverge
|
|
./ci/blackbox.sh --driver=simx --cores=1 --warps=8 --threads=16 --app=diverge
|
|
|
|
# cores clustering
|
|
./ci/blackbox.sh --driver=rtlsim --cores=1 --clusters=1 --app=diverge --args="-n1"
|
|
./ci/blackbox.sh --driver=rtlsim --cores=4 --clusters=1 --app=diverge --args="-n1"
|
|
./ci/blackbox.sh --driver=rtlsim --cores=2 --clusters=2 --app=diverge --args="-n1"
|
|
./ci/blackbox.sh --driver=simx --cores=4 --clusters=1 --app=diverge --args="-n1"
|
|
./ci/blackbox.sh --driver=simx --cores=4 --clusters=2 --app=diverge --args="-n1"
|
|
|
|
# L2/L3
|
|
./ci/blackbox.sh --driver=rtlsim --cores=2 --l2cache --app=diverge --args="-n1"
|
|
./ci/blackbox.sh --driver=rtlsim --cores=2 --clusters=2 --l3cache --app=diverge --args="-n1"
|
|
./ci/blackbox.sh --driver=rtlsim --cores=2 --clusters=2 --l2cache --l3cache --app=io_addr --args="-n1"
|
|
./ci/blackbox.sh --driver=simx --cores=4 --clusters=2 --l2cache --app=diverge --args="-n1"
|
|
./ci/blackbox.sh --driver=simx --cores=4 --clusters=4 --l2cache --l3cache --app=diverge --args="-n1"
|
|
|
|
echo "clustering tests done!"
|
|
}
|
|
|
|
debug()
|
|
{
|
|
echo "begin debugging tests..."
|
|
|
|
# test CSV trace generation
|
|
make -C sim/simx clean && DEBUG=3 make -C sim/simx
|
|
make -C sim/rtlsim clean && DEBUG=3 CONFIGS="-DGPR_RESET" make -C sim/rtlsim
|
|
make -C tests/riscv/isa run-simx-32im > run_simx.log
|
|
make -C tests/riscv/isa run-rtlsim-32im > run_rtlsim.log
|
|
./ci/trace_csv.py -trtlsim run_rtlsim.log -otrace_rtlsim.csv
|
|
./ci/trace_csv.py -tsimx run_simx.log -otrace_simx.csv
|
|
diff trace_rtlsim.csv trace_simx.csv
|
|
make -C sim/simx clean && make -C sim/simx
|
|
make -C sim/rtlsim clean && make -C sim/rtlsim
|
|
|
|
./ci/blackbox.sh --driver=opae --cores=2 --clusters=2 --l2cache --perf=1 --app=demo --args="-n1"
|
|
./ci/blackbox.sh --driver=simx --cores=2 --clusters=2 --l2cache --perf=1 --app=demo --args="-n1"
|
|
./ci/blackbox.sh --driver=opae --cores=2 --clusters=2 --l2cache --debug=1 --app=demo --args="-n1"
|
|
./ci/blackbox.sh --driver=simx --cores=2 --clusters=2 --l2cache --debug=1 --app=demo --args="-n1"
|
|
./ci/blackbox.sh --driver=opae --cores=1 --scope --app=basic --args="-t0 -n1"
|
|
|
|
echo "debugging tests done!"
|
|
}
|
|
|
|
config()
|
|
{
|
|
echo "begin configuration tests..."
|
|
|
|
# disable DPI
|
|
CONFIGS="-DDPI_DISABLE -DFPU_FPNEW" ./ci/blackbox.sh --driver=rtlsim --app=dogfood
|
|
CONFIGS="-DDPI_DISABLE -DFPU_FPNEW" ./ci/blackbox.sh --driver=opae --app=dogfood
|
|
|
|
# issue width
|
|
CONFIGS="-DISSUE_WIDTH=1" ./ci/blackbox.sh --driver=rtlsim --app=diverge
|
|
CONFIGS="-DISSUE_WIDTH=2" ./ci/blackbox.sh --driver=rtlsim --app=diverge
|
|
CONFIGS="-DISSUE_WIDTH=1" ./ci/blackbox.sh --driver=simx --app=diverge
|
|
CONFIGS="-DISSUE_WIDTH=2" ./ci/blackbox.sh --driver=simx --app=diverge
|
|
|
|
# dispatch size
|
|
CONFIGS="-DNUM_ALU_BLOCK=1 -DNUM_ALU_LANES=1" ./ci/blackbox.sh --driver=rtlsim --app=diverge
|
|
CONFIGS="-DNUM_ALU_BLOCK=2 -DNUM_ALU_LANES=2" ./ci/blackbox.sh --driver=rtlsim --app=diverge
|
|
CONFIGS="-DNUM_ALU_BLOCK=1 -DNUM_ALU_LANES=1" ./ci/blackbox.sh --driver=simx --app=diverge
|
|
CONFIGS="-DNUM_ALU_BLOCK=2 -DNUM_ALU_LANES=2" ./ci/blackbox.sh --driver=simx --app=diverge
|
|
|
|
# FPU scaling
|
|
CONFIGS="-DNUM_ALU_BLOCK=4 -DNUM_FPU_LANES=2" ./ci/blackbox.sh --driver=rtlsim --app=sgemm
|
|
CONFIGS="-DNUM_ALU_BLOCK=2 -DNUM_FPU_LANES=4" ./ci/blackbox.sh --driver=rtlsim --app=sgemm
|
|
CONFIGS="-DNUM_ALU_BLOCK=4 -DNUM_FPU_LANES=4" ./ci/blackbox.sh --driver=rtlsim --app=sgemm
|
|
|
|
# custom program startup address
|
|
make -C tests/regression/dogfood clean-all
|
|
STARTUP_ADDR=0x40000000 make -C tests/regression/dogfood
|
|
CONFIGS="-DSTARTUP_ADDR=0x40000000" ./ci/blackbox.sh --driver=simx --app=dogfood
|
|
CONFIGS="-DSTARTUP_ADDR=0x40000000" ./ci/blackbox.sh --driver=rtlsim --app=dogfood
|
|
make -C tests/regression/dogfood clean-all
|
|
make -C tests/regression/dogfood
|
|
|
|
# disabling M extension
|
|
CONFIGS="-DEXT_M_DISABLE" ./ci/blackbox.sh --driver=rtlsim --cores=1 --app=no_mf_ext
|
|
|
|
# disabling F extension
|
|
CONFIGS="-DEXT_F_DISABLE" ./ci/blackbox.sh --driver=rtlsim --cores=1 --app=no_mf_ext
|
|
CONFIGS="-DEXT_F_DISABLE" ./ci/blackbox.sh --driver=rtlsim --cores=1 --app=no_mf_ext --perf=1
|
|
CONFIGS="-DEXT_F_DISABLE" ./ci/blackbox.sh --driver=simx --cores=1 --app=no_mf_ext --perf=1
|
|
|
|
# disable shared memory
|
|
CONFIGS="-DSM_DISABLE" ./ci/blackbox.sh --driver=rtlsim --cores=1 --app=no_smem
|
|
CONFIGS="-DSM_DISABLE" ./ci/blackbox.sh --driver=rtlsim --cores=1 --app=no_smem --perf=1
|
|
CONFIGS="-DSM_DISABLE" ./ci/blackbox.sh --driver=simx --cores=1 --app=no_smem --perf=1
|
|
|
|
# disable L1 cache
|
|
CONFIGS="-DL1_DISABLE -DSM_DISABLE" ./ci/blackbox.sh --driver=rtlsim --app=sgemm
|
|
CONFIGS="-DDCACHE_DISABLE" ./ci/blackbox.sh --driver=rtlsim --app=sgemm
|
|
|
|
# multiple L1 caches per cluster
|
|
CONFIGS="-DNUM_DCACHES=2 -DNUM_ICACHES=2" ./ci/blackbox.sh --driver=rtlsim --app=sgemm --cores=8 --warps=1 --threads=2
|
|
|
|
# test AXI bus
|
|
AXI_BUS=1 ./ci/blackbox.sh --driver=rtlsim --cores=1 --app=demo
|
|
|
|
# adjust l1 block size to match l2
|
|
CONFIGS="-DL1_LINE_SIZE=64" ./ci/blackbox.sh --driver=rtlsim --cores=2 --l2cache --app=io_addr --args="-n1"
|
|
|
|
# test cache banking
|
|
CONFIGS="-DSMEM_NUM_BANKS=4 -DDCACHE_NUM_BANKS=1" ./ci/blackbox.sh --driver=rtlsim --app=sgemm
|
|
CONFIGS="-DSMEM_NUM_BANKS=2 -DDCACHE_NUM_BANKS=2" ./ci/blackbox.sh --driver=rtlsim --app=sgemm
|
|
CONFIGS="-DSMEM_NUM_BANKS=2 -DDCACHE_NUM_BANKS=2" ./ci/blackbox.sh --driver=simx --app=sgemm
|
|
CONFIGS="-DDCACHE_NUM_BANKS=1" ./ci/blackbox.sh --driver=rtlsim --cores=1 --app=sgemm
|
|
CONFIGS="-DDCACHE_NUM_BANKS=2" ./ci/blackbox.sh --driver=rtlsim --cores=1 --app=sgemm
|
|
CONFIGS="-DDCACHE_NUM_BANKS=2" ./ci/blackbox.sh --driver=simx --cores=1 --app=sgemm
|
|
|
|
# test 128-bit MEM block
|
|
CONFIGS="-DMEM_BLOCK_SIZE=16" ./ci/blackbox.sh --driver=opae --cores=1 --app=demo
|
|
|
|
# test single-bank DRAM
|
|
CONFIGS="-DPLATFORM_PARAM_LOCAL_MEMORY_BANKS=1" ./ci/blackbox.sh --driver=opae --cores=1 --app=demo
|
|
|
|
# test 27-bit DRAM address
|
|
CONFIGS="-DPLATFORM_PARAM_LOCAL_MEMORY_ADDR_WIDTH=27" ./ci/blackbox.sh --driver=opae --cores=1 --app=demo
|
|
|
|
echo "configuration tests done!"
|
|
}
|
|
|
|
stress0()
|
|
{
|
|
echo "begin stress0 tests..."
|
|
|
|
# test verilator reset values
|
|
CONFIGS="-DVERILATOR_RESET_VALUE=1" ./ci/blackbox.sh --driver=opae --cores=2 --clusters=2 --l2cache --l3cache --app=dogfood
|
|
CONFIGS="-DVERILATOR_RESET_VALUE=1" ./ci/blackbox.sh --driver=opae --cores=2 --clusters=2 --l2cache --l3cache --app=io_addr
|
|
CONFIGS="-DVERILATOR_RESET_VALUE=1" ./ci/blackbox.sh --driver=opae --app=printf
|
|
|
|
echo "stress0 tests done!"
|
|
}
|
|
|
|
stress1()
|
|
{
|
|
echo "begin stress1 tests..."
|
|
|
|
./ci/blackbox.sh --driver=rtlsim --app=sgemm --args="-n128" --l2cache
|
|
|
|
echo "stress1 tests done!"
|
|
}
|
|
|
|
synthesis()
|
|
{
|
|
echo "begin synthesis tests..."
|
|
|
|
PREFIX=build_base make -C hw/syn/yosys clean
|
|
PREFIX=build_base CONFIGS="-DDPI_DISABLE -DEXT_F_DISABLE" make -C hw/syn/yosys elaborate
|
|
|
|
echo "synthesis tests done!"
|
|
}
|
|
|
|
show_usage()
|
|
{
|
|
echo "Vortex Regression Test"
|
|
echo "Usage: $0 [--unittest] [--isa] [--regression] [--opencl] [--cluster] [--debug] [--config] [--stress[#n]] [--synthesis] [--all] [--h|--help]"
|
|
}
|
|
|
|
start=$SECONDS
|
|
|
|
while [ "$1" != "" ]; do
|
|
case $1 in
|
|
--unittest ) unittest
|
|
;;
|
|
--isa ) isa
|
|
;;
|
|
--regression ) regression
|
|
;;
|
|
--opencl ) opencl
|
|
;;
|
|
--cluster ) cluster
|
|
;;
|
|
--debug ) debug
|
|
;;
|
|
--config ) config
|
|
;;
|
|
--stress0 ) stress0
|
|
;;
|
|
--stress1 ) stress1
|
|
;;
|
|
--stress ) stress0
|
|
stress1
|
|
;;
|
|
--synthesis ) synthesis
|
|
;;
|
|
--all ) unittest
|
|
isa
|
|
regression
|
|
opencl
|
|
cluster
|
|
debug
|
|
config
|
|
stress0
|
|
stress1
|
|
synthesis
|
|
;;
|
|
-h | --help ) show_usage
|
|
exit
|
|
;;
|
|
* ) show_usage
|
|
exit 1
|
|
esac
|
|
shift
|
|
done
|
|
|
|
echo "Regression completed!"
|
|
|
|
duration=$(( SECONDS - start ))
|
|
awk -v t=$duration 'BEGIN{t=int(t*1000); printf "Elapsed Time: %d:%02d:%02d\n", t/3600000, t/60000%60, t/1000%60}'
|