Accel-Sim Exec-driven模式实战:从零构建GPGPUSim 4.x仿真环境与Rodinia基准测试
1. 从零搭建GPGPUSim仿真环境刚接触GPU架构仿真时我被各种术语和复杂的依赖关系搞得头晕眼花。经过多次实践终于总结出一套在Ubuntu 20.04上快速搭建GPGPUSim 4.x环境的可靠方法。整个过程就像搭积木只要按顺序摆放正确最后就能得到完整的仿真平台。首先需要准备一台干净的Ubuntu 20.04系统。我建议使用物理机而非虚拟机因为CUDA工具链对系统环境要求严格。记得先执行sudo apt update sudo apt upgrade更新系统这个习惯帮我避免了很多奇怪的依赖问题。关键依赖安装命令如下sudo apt-get install -y wget build-essential xutils-dev bison zlib1g-dev flex \ libglu1-mesa-dev git g libssl-dev libxml2-dev libboost-all-dev \ vim python-setuptools python-dev python3-pip安装CUDA 11需要特别注意版本匹配。我最初直接安装了最新版CUDA结果和GPGPUSim 4.x出现兼容性问题。后来发现CUDA 11.0.2是最稳定的选择wget http://developer.download.nvidia.com/compute/cuda/11.0.2/local_installers/cuda_11.0.2_450.51.05_linux.run sh cuda_11.0.2_450.51.05_linux.run配置环境变量时建议直接修改~/.bashrc文件echo export PATH$PATH:/usr/local/cuda/bin ~/.bashrc echo export LD_LIBRARY_PATH$LD_LIBRARY_PATH:/usr/local/cuda/lib:/usr/local/cuda/lib64 ~/.bashrc echo export CUDA_INSTALL_PATH/usr/local/cuda ~/.bashrc source ~/.bashrc验证CUDA安装是否成功时不要只看nvcc -V的输出。我遇到过能显示版本但实际无法编译的情况最好写个简单的CUDA样例程序测试下。2. 获取与编译GPGPUSim源码GPGPUSim的源码获取看似简单但有几个隐藏的坑需要注意。官方推荐通过Accel-Sim框架自动获取对应版本这比手动克隆更可靠git clone https://github.com/accel-sim/accel-sim-framework.git cd accel-sim-framework编译前必须正确设置环境变量。我第一次编译时忽略了这点导致生成了不完整的仿真器source ./gpu-simulator/setup_environment.sh make -j$(nproc)编译过程大约需要15-30分钟取决于机器性能。如果遇到奇怪的编译错误尝试先make clean再重新编译。我在一台16核机器上使用-j32参数时遇到了随机编译失败后来改用-j16就稳定了。验证编译是否成功可以检查生成的accel-sim.out可执行文件ls -lh ./gpu-simulator/bin/release/accel-sim.out3. Rodinia基准测试适配Rodinia是GPU仿真研究中最常用的基准测试套件之一。但直接使用官方版本往往无法在仿真环境中运行需要进行特定修改。首先获取修改版的Rodinia 3.1wget http://filedn.com/luEeJVCCazShDlU4ibloXvu/class/rodinia.tar.bz2 tar -xvjf rodinia.tar.bz2关键的Makefile补丁需要从CSDN下载虽然我不喜欢这个平台但确实只有这里有现成的解决方案wget -O makefiles.tar.gz https://download.csdn.net/download/Wang121201/89493888应用补丁的脚本需要这样写#!/bin/bash tar -zxvf ../makefiles.tar.gz if [ -e Makefile ]; then mv Makefile Makefile.old fi cp ./makefiles/Makefile ./ MAKEFILES$(ls ./makefiles) for makef in ${MAKEFILES[*]}; do namef$(echo $makef | sed s/\./\//g) cp ./makefiles/$makef ./cuda/$namef echo $namef done echo common/make.config echo SDK_DIR /usr/local/cuda/samples/ common/make.config编译时需要指定正确的SM版本。对于CUDA 11.0SM60是比较安全的选择bash patch_rodinia.sh make -j$(nproc) SM604. Exec-driven模式实战测试当所有组件都准备好后就可以进行Exec-driven模式的仿真测试了。这种模式不需要实际GPU硬件完全在PTX指令集层面进行仿真。首先配置测试环境cd bin/linux/cuda cp ~/gpgpusim-v4/configs/tested-cfgs/SM6_TITANX/* ./ source ~/gpgpusim-v4/setup_environment运行backprop测试案例ldd backprop ./backprop 1024使用Accel-Sim框架的高级功能时run_simulations.py脚本能大幅简化流程./util/job_launching/run_simulations.py -B rodinia_2.0-ft -C QV100-PTX -N myTest-PTX监控测试进度./util/job_launching/monitor_func_test.py -v -N myTest-PTX收集测试结果./util/job_launching/get_stats.py -N myTest-PTX | tee stats.csv如果想测试功耗模型可以使用AccelWattch配置./util/job_launching/run_simulations.py -B rodinia_2.0-ft -C QV100-Accelwattch_PTX_SIM -N test-power在整个过程中我最大的教训是必须严格按照版本要求来搭配各个组件。有一次我混用了CUDA 11.2和GPGPUSim 4.x的最新commit结果仿真结果完全不可信。后来回退到官方验证过的版本组合问题就消失了。