1. Introduction
gpgpusim在虚拟机里跑起来非常慢,而自己配机器的环境又可能会出现这样那样的问题。本文给出了一种使用gpgpusim提供的vbox虚拟机进行编译,在host的docker环境下运行的方法。
2. 使用gpgpusim官方vbox虚拟机
gpgpusim官方提供了vbox虚拟机文件的下载,大概7G多,
http://ece.ubc.ca/~taylerh/files/gpgpu-sim/gpgpu-sim.vm.tar.gz
直接从vbox里打开就行。里面的系统是ubuntu 14.04。
3. 编译
编译成功gpgpusim以后,实际上主要是生成了一个libcudart.so
。
4. 拷贝必须的文件
后面用docker的时候,我们会将文件夹挂载到docker里,在外部修改,在docker里运行。
- 建一个文件夹sim,可以建在你想放的地方,比如
/home/find/e/gpgpusim/
。 - 在该目录下建立
libsim
,将vbox虚拟机里编译好的/home/gpgpu-sim/gpgpu-sim_distribution/lib/gcc-4.6.4/cuda-4020/release/libcudart.so
及其软链接拷贝过来,直接拷贝so文件到/home/find/e/gpgpusim/libsim/
文件夹下即可。 - 新建目录
/home/find/e/gpgpusim/cuda/
,将vbox虚拟机里/home/gpgpu-sim/cuda/toolkit/4.2/cuda/bin
文件夹拷贝到这里,即/home/find/e/gpgpusim/cuda/
里只有一个bin文件夹。(或者将vbox虚拟机里整个cuda文件夹拷贝过来也行)
5. 使用docker
由于gpgpusim必须使用gcc4.7及以前的版本,而修改自己的电脑系统可能带来不方便,因此使用docker来运行程序,docker在运行程序时,性能损失大概在10%以内,但也比vbox快多了。
直接docker pull ubuntu:14.04
从docker hub pull ubuntu 提供的官方的14.04版本系统,参考 Docker学习笔记目录以前的文章,运行以下命令可以将外部的文件夹挂载到docker里去:
docker run --name gpgpusim -it -v /home/find/e/gpgpusim:/root/sim/ ubuntu:14.04 /bin/bash
进入docker里的ubuntu14.04以后,设置为中科大的源,update系统,安装如下包:
apt install -y gcc gcc-4.6 g++ g++-4.6 build-essential vim
6. 设置环境变量
修改docker里~/.bashrc
文件,添加如下内容:
export CUDA_INSTALL_PATH=/root/sim/cuda/
export LD_LIBRARY_PATH=/root/sim/libsim/
export PATH=$PATH:/root/sim/cuda/bin/
到/usr/bin/
里将默认gcc和g++的软链接挂到4.6版本上:
cd /usr/bin
rm gcc g++
ln -s ./gcc-4.6 ./gcc
ln -s ./g++-4.6 ./g++
7. 运行
以vectoradd为例,在host的gpgpusim文件夹下建立test文件夹,并拷贝vectoradd.cu文件以及gpgpusim提供的配置文件(在/home/gpgpu-sim/gpgpu-sim_distribution/configs/GTX480/
文件夹下有三个文件)到test文件夹:
nvcc -o vectoradd ./vectoradd.cu
./vectoradd
即可发现可以正常运行,并有大量输出。
8. ptxplus支持
如果在docker里需要开启ptxplus的支持,那么需要做如下修改。
修改 src/cuda-sim/ptx_loader.cc ,查找$GPGPUSIM_ROOT,将
$GPGPUSIM_ROOT/build/\$GPGPUSIM_CONFIG/cuobjdump_to_ptxplus/cuobjdump_to_ptxplus
替换为cuobjdump_to_ptxplus
重新make,并将生成的so文件重新copy。
同时将vbox虚拟机上gpgpusim-dev/build/gcc-4.6.4/cuda-4020/release/cuobjdump_to_ptxplus/cuobjdump_to_ptxplus
二进制文件copy到 docker挂载的目录sim/cuda/bin/文件夹下。
Comments