1. Introduction
本文说明了使用gpgpusim做实验需要注意的问题以及做出的修改。
强烈不推荐使用gpgpusim做实验。
如果是改SASS,建议maxas或者asfermi(尽管他们可能会有这样那样的问题,而且使用起来难度不小)。使用模拟器,是被reviewer攻击的常用点,除非你有足够强有力的解释,否则这会成为你论文的掣肘。
使用模拟器发的A,一般工作量会很多。
2. 环境搭建
2.1 编译运行环境
2.2 修改代码
在docker里创建修改的文件是Host上无权访问和修改,
sudo chown YourUser.YourUser -R ./
修改文件夹或者文件的用户组为你的用户即可。
3. 遇到的问题
3.1 硬件编译限制
如果你开启了ptxplus模式,那么编译的架构只能是sm1.9以下,生成的ptx和ptxplus非常落后。尽管github项目里dev分支甚至给了1080ti的配置文件,但是实际和硬件差距非常大。只能说如果你是在SASS(即gpgpusim里的ptxplus)或者硬件设计层面做东西,大家可以接受这个模拟器。
代码上这部分限制功能在gpgpusim/libcuda/cuda_runtime_api.cc里,可以手动删去那部分的硬件限制代码,但是也只不过是去掉了提示而已。
3.2 cuobjdump_to_ptxplus
gpgpusim有个cuobjdump_to_ptxplus的功能,在代码主分支下是通过调用外部生成的二进制做的,调用的代码在gpgpusim/src/cuda-sim/ptx_loader.cc
,里面编译的cuobjdump二进制路径是$GPGPUSIM_ROOT/build/$GPGPUSIM_CONFIG/cuobjdump_to_ptxplus/cuobjdump_to_ptxplus
,建议改成cuobjdump_to_ptxplus
,然后将单独编译好的cuobjdump_to_ptxplus复制到sim/cuda/bin
即你的其他cuda二进制命令的路径。
3.2 ptxas编译参数
如果你开了ptxplus,在从ptx--》fatbin这个过程中,你在makefile里传入的参数是没有用的,并不会传递到ptxas上,所以需要对文件gpgpusim/src/cuda-sim/ptx_loader.cc
做的简单修改如下:
将
snprintf(commandline,1024,"$CUDA_INSTALL_PATH/bin/ptxas %s -v %s --output-file /dev/null 2> %s",
extra_flags, fname2, tempfile_ptxinfo);
一行修改为:
// 在这里加上读取ptxas参数
FILE *ptxas_args_p;
ptxas_args_p = fopen("ptxas_args.txt", "r");
const int MAXARGSLEN = 10000;
char ptx_args[MAXARGSLEN];
if (ptxas_args_p != NULL) {
printf("找到了ptxas参数文件\n");
fgets(ptx_args, MAXARGSLEN, ptxas_args_p);
} else {
printf("没有ptxas参数文件\n");
}
snprintf(commandline, 1024, "$CUDA_INSTALL_PATH/bin/ptxas %s %s -v %s --output-file /dev/null 2> %s",
ptx_args, extra_flags, fname2, tempfile_ptxinfo);
这个修改方法最简单省力,只需要在要执行的项目二进制目录下,写入ptxas参数到ptxas_args.txt文件中。
3.3 WARP_PER_CTA_MAX
如果你修改了config,运行时可能会提示你需要修改WARP_PER_CTA_MAX,这个参数在src/gpgpu-sim/shader.h
里const unsigned WARP_PER_CTA_MAX = 64;
3.4 MAX_THREAD_PER_SM
定义在src/absract_hardware_model.h
Comments