- 推荐硬件内存32GiB以上
- 推荐系统环境:Ubuntu 24.04
- 推荐编译安装Verilator 5.034加入PATH
- 下载解压安装CIRCT firtool 1.62.0加入PATH
- 其它系统依赖:
apt-get install \
mold ccache ninja-build cmake clang clangd clang-format gdb \
help2man perl perl-doc flex bison libfl2 libfl-dev zlib1g zlib1g-dev libgoogle-perftools-dev numactl \
libfmt-dev libspdlog-dev libelf-dev libyaml-cpp-dev device-tree-compiler bsdmainutils ruby default-jdkclone本仓库到本地路径(假如为ventus-env/)后:
cd ventus-env/
make init # 从github拉取所有需要的仓库,注意llvm仓库较大,保持网络环境畅通gpu-rodinia所使用的数据集需要额外下载rodinia_data.tar.xz并解压
tar -xf rodinia_data.tar.xz使用编译脚本编译全部项目并安装到ventus-env/install/
bash build-ventus.sh若您更新或修改了部分子仓库,也推荐使用此脚本来编译,使用--build XXX参数可单独编译指定子仓库,详见--help参数打印的帮助文档
使用ventus前必须设置环境变量:
source env.sh可以以不同仿真器作为实际执行后端运行openCL程序:
cd rodinia/opencl/gaussian
make
./run # 默认使用spike
VENTUS_BACKEND=spike ./run # 和上一条等效
VENTUS_BACKEND=rtlsim ./run # 使用verilator仿真Chisel RTL
VENTUS_BACKEND=cyclesim ./run # 使用周期仿真器提供一些环境变量用来调整仿真行为,罗列如下:
VENTUS_BACKEND=XXX选取使用哪种底层设备,可选值spike|isa,rtl|rtlsim|gpgpu,cyclesim|systemc|simulatorVENTUS_WAVEFORM=1时可以使rtlsim后端导出fst波形文件,让cyclesim后端导出vcd波形文件VENTUS_WAVEFORM_BEGIN和VENTUS_WAVEFORM_END设定为一对数字可以使rtlsim后端只导出这一段仿真时间内的波形,以加速仿真。cyclesim后端不支持此功能VENTUS_DUMP_RESULT=filename.json可以将所有OpenCL程序从device端拷贝回host端的数据及其在设备端的地址保存到指定json文件中,辅助调试NUM_THREAD=32告知POCL设备端单个线程束(warp)支持多少线程。对于rtlsim和cyclesim应当与硬件规格对齐,对于spike可以任意调整数值NUM_WARP=8告知POCL设备端单个线程块最多有多少线程束(warp)。对于rtlsim和cyclesim应当与硬件规格对齐,对于spike可以任意调整数值
本仓库的regression-test.py包含了一些rodinia测试集的回归测试
python3 ./regression-test.py # 默认使用spike
VENTUS_BACKEND=spike python3 ./regression-test.py # 和上一条等效
VENTUS_BACKEND=rtlsim python3 ./regression-test.py # 使用verilator仿真Chisel RTL
VENTUS_BACKEND=cyclesim python3 ./regression-test.py # 使用周期仿真器推荐您先调整regression-test.py中的部分参数:
TIMEOUT_SCALE:依据您的计算机运行速度调整测例的运行时间限制,运行速度慢需要调大此参数MULTIPROCESS_NUM:并行运行的测试进程数量,使用RTL仿真时每个测试进程又是多线程的(默认8线程),依据您的计算机具体情况调整
编译(确保已 source env.sh,并已初始化 OpenCL-CTS 子模块):
cd OpenCL-CTS && git checkout dev-ventus
mkdir -p build
cmake -S . -B ./build \
-DCL_INCLUDE_DIR=${VENTUS_INSTALL_PREFIX}/include \
-DCL_LIB_DIR=${VENTUS_INSTALL_PREFIX}/lib \
-DOPENCL_LIBRARIES=OpenCL
cmake --build ./build --config Release -j $(nproc)调试:将 --config 改为 Debug,可使用 VS Code + gdb 进行断点调试。
运行某测例(以 compiler 为例):
cd OpenCL-CTS/build/test_conformance/compiler
./test_compiler # 运行 compiler 下的全部测试只运行某个 kernel(以 atomics/atomic_add 为例):
cd OpenCL-CTS/build/test_conformance/atomics
./test_atomics atomic_add提示:atomic_add 等 kernel 名称可在 OpenCL-CTS/test_conformance/atomics 目录下搜索,通常由 CMake 中的 ADD_TEST 添加。
推荐将终端输出同时写入日志,便于后续检索:
./test_compiler |& tee output.log批量运行脚本(并行执行全部/大批量测试):
cd OpenCL-CTS
python3 run_test_parallel.py --json test_list_new.json --max-workers 20--json: 测试列表(示例为test_list_new.json)。--max-workers: 并发工作进程数,按机器核心数与负载酌情设置。- 运行时会显示“准备执行 N 个测试任务,最大并发数 = K”,随后打印每个测试的结果行(如
[ OK ] basic_intmath_long2)。 - 建议在高并发下同时将标准输出落盘:
python3 run_test_parallel.py ... |& tee cts_parallel.log。
Chisel RTL使用scala开发环境,可以使用vscode scala metals插件导入mill配置(build.sc),或者使用Makefile提供的make idea后使用IntelliJ IDEA打开,详见README
其它项目均为C++开发环境,使用cmake或bear导出compile_commands.json文件后即可导入并使vscode插件或其它IDE正常工作
gpu-rodinia所使用的数据集需要额外下载rodinia_data.tar.xz并解压
cd ventus-env/
tar -xf rodinia_data.tar.xz注意,若您先
make init再解压rodinia_data.tar.xz,没有问题
若您先解压rodinia_data.tar.xz导致ventus-env/rodinia/非空,之后再make init会导致rodinia子仓库clone异常
需要将ventus-env/rodinia/路径清空再make init
构建docker image
docker build --target ventus-dev -t ventus-dev:latest .
docker build --target ventus -t ventus:latest .运行RTL verilator仿真时出现类似如下报错:
%Error: /opt/verilator/5.034/share/verilator/include/verilated.cpp:2729: VerilatedContext has 8 threads but model 'Vdut' (instantiated as 'TOP') was Verilated with --threads 11.这是因为构建Verilated模型时选择的并行度过大,可能大于本机CPU逻辑线程数量
可以将ventus-env/gpgpu/sim-verilator/verilate.mk与ventus-env/gpgpu/sim-verilator-nocache/verilate.mk中VLIB_NPROC_DUT的数值改小,重新编译bash build-ventus.sh --build gpgpu