编译并行计算基准测试工具shoc踩坑记

今天新学到了一个测试GPU等并行计算架构算法效率的模型:roofline 我对此模型的理解基本上就是首先测试出设备在各种计算/访存比下的极限性能,然后将自己的算法与之对比,以判断还有没有改进的空间,画成图大概是这样的:

Roofline 模型

图中线条是极限性能(还没搞明白黑线红线是什么区别),各种点是文章中出现的CUDA kernel。点的位置越靠近线越说明达到了极限性能。

自己做测试还是麻烦。有一个做好了的开源基准测试工具shoc。然而由于代码老旧,编译踩了一些坑,记录如下:

  • manjaro linux 20170606
  • 默认编译器指向gcc 6.3.1,以便跟系统软件匹配,然而这个编译shoc时是用不到的
  • gcc-4.9.3,装它就是为了给cuda 8用
  • cuda 8.0
  • GT750M显卡
  1. nvcc一定要出现在PATH中。由于平时编译CUDA程序都用CMake或者nsight,不会手写nvcc命令,所以注意不到这东西不在PATH中。如果PATH中找不到nvcc命令,shoc的configure脚本不会报错,但是会自动屏蔽cuda代码;
  2. 修改configure脚本,删去-gencode=arch=compute_13,code=sm_13等老旧设备相关代码,加入符合自己硬件的架构(这一点nvcc做的相当不智能)。cuda 8 碰到这些老旧硬件的命令会直接报错。
  3. 有cuda 8在那里堵着,全套东西都要用gcc-4.9编译。修改环境变量CC,CXXexport CXX=/usr/bin/g++-4.9,export CC=/usr/bin/gcc-4.9
  4. 此时虽然make命令会按照修改过的环境变量调用gcc-4.9,但nvcc仍然会顺着系统链接去找gcc-6.3,解决方法是继续修改configure脚本,在刚才删去compute_13的地方,加上-ccbin=/usr/bin/gcc-4.9,指定nvcc要编译C代码的话去找gcc-4.9; 此处安利一波CMake,如果设置了自定义编译器,CMake会自己处理好nvcc命令;
  5. 如果你向我一样折腾了半天gcc版本问题,终于做完这一切再make时发现出了一堆关于c++11string相关的链接错误,说明之前不小心用gcc-6.3编译的东西还在,make clean然后重来即可;
  6. 其他步骤按configure --helpINSTALL.txt执行。
  • 最后更改: 2019/05/28 14:06