本文主要介绍下面一些基准程序:Rodinia, Polybench, Mars, SHOC, Tango, Parboil
关于基准程序的编译和运行,部分思路和代码参考了gpgpu-bench,然后相关的基准程序的获取参考脚本get_benchmarks
Rodinia
wget http://filedn.com/luEeJVCCazShDlU4ibloXvu/class/rodinia.tar.bz2
//wget -O rodinia.tar.bz2 http://www.cs.virginia.edu/~kw5na/lava/Rodinia/Packages/Current/rodinia_3.1.tar.bz2
## 下载Rodinia修改后的的makefile: https://download.csdn.net/download/Wang121201/89493888
tar -xvjf rodinia.tar.bz2
cd rodinia_3.1/ && vim patch_rodinia.sh
添加下面的内容
#!/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
# add CUDA_SAMPLES_PATH
echo "" >> common/make.config
echo "SDK_DIR = /usr/local/cuda/samples/" >> common/make.config
然后执行脚本,编译Rodinia基准程序,可以设置编译的SM,(cuda11好像支持SM60,SM70,SM75,SM80等),
bash patch_rodinia.sh
make -j 64 SM=60
## workload test
cd bin/linux/cuda
## before execute, you should "source setup_environment" and copy configs
ldd backprop
./backprop 1024
Polybench
wget https://github.com/cavazos-lab/PolyBench-ACC/archive/refs/heads/master.zip && unzip master.zip
cd PolyBench-ACC-master
vim ./CUDA/utilities/common.mk
## vim cmd : d5d
修改成下面的内容
#data set size
CFLAGS := -DMINI_DATASET=1
#CFLAGS := -DSMALL_DATASET=1
#CFLAGS := -DSTANDARD_DATASET=1
#CFLAGS := -DLARGE_DATASET=1
#CFLAGS := -DEXTRALARGE_DATASET=1
SM_VERSION ?= -arch=sm_70
all:
nvcc ${SM_VERSION} -lcudart -O3 ${CUFILES} -I${PATH_TO_UTILS} -o ${EXECUTABLE} ${CFLAGS}
clean:
rm -f *~ *.exe
创建编译的脚本compile.sh
,内容如下
#!/bin/bash
CUDA_BIN_DIR=$(pwd)/bin
if [ -e ${CUDA_BIN_DIR} ]; then
rm -r ${CUDA_BIN_DIR}
fi
mkdir -p ${CUDA_BIN_DIR}
APP_DIRS=(
datamining
linear-algebra/kernels
linear-algebra/solvers
stencils
)
for dir in ${APP_DIRS[*]}; do
apps=$( ls ./CUDA/$dir )
for app in ${apps[*]}; do
(cd ./CUDA/${dir}/${app} && make && cp *.exe ${CUDA_BIN_DIR})
done
done
编译完成后,所有的二进制文件都在./bin目录下
## workload test
cd bin
## before execute, you should "source setup_environment" and copy configs
ldd 2mm
./2mm
Tango
下载源码
wget https://gitlab.com/Tango-DNNbench/Tango/-/archive/master/Tango-master.zip && unzip Tango-master.zip
编辑Makefile文件,编译完成后每个二进制文件分别在其对应的workload的文件夹下。(可以修改源代码读取数据的路径,然后把所有的二进制文件都放在一个目录下)
TANGO_BASE_DIR := $(shell pwd)
CUDA_BIN_DIR := $(TANGO_BASE_DIR)/bin/
CUDA_DIRS := AlexNet CifarNet GRU LSTM ResNet SqueezeNet
SM_VERSION := -arch=sm_70
NVCC_FLAGS := $(SM_VERSION) -lcudart
NVCC = /usr/local/cuda/bin/nvcc
all: CUDA
CUDA:
cd GPU/AlexNet; $(NVCC) $(NVCC_FLAGS) alexnet_host.cu -o AN;
cd GPU/CifarNet; $(NVCC) $(NVCC_FLAGS) CN_cuda.cu -o CN;
cd GPU/GRU; $(NVCC) $(NVCC_FLAGS) gru_host.cu -o GRU;
cd GPU/LSTM; $(NVCC) $(NVCC_FLAGS) lstm.cu -o LSTM;
cd GPU/ResNet; $(NVCC) $(NVCC_FLAGS) resnet_host.cu -o RN;
cd GPU/SqueezeNet; $(NVCC) $(NVCC_FLAGS) SN.cu -o SN;
clean:
cd GPU/AlexNet; rm AN;
cd GPU/CifarNet; rm CN;
cd GPU/GRU; rm GRU;
cd GPU/LSTM; rm LSTM;
cd GPU/ResNet; rm RN;
cd GPU/SqueezeNet; rm SN;
rm bin/*
SHOC
wget https://github.com/vetter/shoc/archive/refs/heads/master.zip && unzip master.zip
## set the configure parameters
./configure --without-opencl --without-mpi CUDA_CPPFLAGS="-gencode arch=compute_70,code=compute_70 -gencode arch=compute_70,code=sm_70" CPPFLAGS="-I/usr/local/cuda/include"
echo "CUDA_LIBS += -L/usr/local/cuda/lib64 -lcudart " >> config/common.mk
# config/find_cuda_libs.sh may not find libcudart
make -j 64 && make install
## workload test
cd bin/Serial/CUDA/
## before execute, you should "source setup_environment" and copy configs
ldd Reduction
./Reduction -i
./Reduction -n 1 --iterations 1
parboil
wget http://filedn.com/luEeJVCCazShDlU4ibloXvu/class/pb2.5driver.tgz && \
wget http://filedn.com/luEeJVCCazShDlU4ibloXvu/class/pb2.5benchmarks.tgz && \
wget http://filedn.com/luEeJVCCazShDlU4ibloXvu/class/pb2.5datasets_standard.tgz && \
tar -xvzf pb2.5driver.tgz && \
mv pb2.5*.tgz ./parboil/. && \
(cd parboil && tar -xvzf pb2.5benchmarks.tgz) && \
(cd parboil && tar -xvzf pb2.5datasets_standard.tgz) && \
(cd parboil && chmod u+x parboil && chmod u+x benchmarks/*/tools/compare-output)
## before execute the following command, you should have been executed "source setup_environment"
## and the path to libcudart in gpgpusim has added to env
echo "CUDA_PATH=$(echo $CUDA_INSTALL_PATH)" >> common/Makefile.conf
echo "CUDA_LIB_PATH=$(echo $LD_LIBRARY_PATH)" >> ./common/Makefile.conf
## set the configuration for make
echo "PLATFORM_CUDACFLAGS+=-gencode arch=compute_70,code=compute_70 -gencode arch=compute_70,code=sm_70" >> ./common/platform/cuda.default.mk
echo "PLATFORM_CUDALDFLAGS+=-lcudart" >> ./common/platform/cuda.default.mk
## workload test
./parboil clean sad && ./parboil compile sad cuda
## before execute, you should "source setup_environment" and copy configs
./parboil run sad cuda default
总结:上面编译时设置的sm相关的参数可以根据cuda的版本进行调整,以上的测试都是在ubuntu20和cuda11下进行了测试。
关于其他基准程序后面在逐渐添加和完善吧。