GPUSim 的调试

GPUSim是 Nvidia GPU体系结构研究者的常用工具,设计者用各种容器、队列、类模拟了GPU的工作过程。 研究者可以通过阅读、修改其源代码来实现自己对GPU硬件或者调度策略的设计和改进,从而验证自己的设计对性能的影响。

修改源码可能造成各种错误,尤其是逻辑错误无法在编译时发现,使得动态调试成为必要的研究手段。

首先我们搞清Nvidia GPU通用计算的实现原理,和GPUSim的模拟原理:

Nvidia将对GPU的使用,用函数实现,然后封装到libcudart.so、 libOpenCL.so 两个动态链接库中(其他的链接库GPUSim还未实现对其模拟,因此GPUSim无法运行全部的CUDA程序)。当你安装好CUDA后(ubuntu10.04系统),这两个文件默认位于/usr/local/cuda/lib64 目录下。 你写的CUDA程序,经过nvcc编译后,对GPU的使用被翻译成对这两个动态链接库中函数的调用。因此,安装CUDA后需要设定 LD_LIBRARY_PATH这个系统变量指向/usr/local/cuda/lib64  ,告诉操作系统,到哪里找这两个动态链接库。

而GPUsim则用C++语言,在CPU上重新实现了这两个动态链接库中的全部(大部分?)函数,然后也生成同名动态链接库,默认放在 GPUSim目录/lib/gcc-4.5.1/cuda-4000/下的debug目录或者 release 目录下(取决于你设定的编译模式)。然后需要用户把 LD_LIBRARY_PATH这个系统变量指向该目录。 这样当CUDA程序运行后,对GPU的调用会加载GPUSim生成的动态链接库, 从而实现了对Nvidia GPU函数调用的拦截。

搞清了原理,想动态调试GPUSim的话,可以这样做:

1. 将GPUSim编译模式设为debug: 在GPUSim目录下执行 source setup_environment debug. 使得编译时 -g 参数,保留了符号信息,便于调试,并将生成的so动态连接库文件放在debug目录下。

2. 将 LD_LIBRARY_PATH 系统变量指向该目录。

3. 用nvcc -g 编译自己的CUDA程序。

4. 用GDB执行自己的程序,例如 gdb a.out, 此时会加载自己程序的各种符号。

然后可以在自己的程序代码上设定断点,或者再GPUSim的代码上设断点

b main #在自己程序上设断点

b  baseline_cache::cycle #在GPUSim代码上设断点(此时 GPUSim的动态链接库还未被使用到,也未被加载,GDB会问你是否设置一个pending breakpoint, 选择y)

r #运行程序

当程序运行到断点后停顿下来后,可以单步执行来观察GPUSim中各变量的变化,寻找逻辑错误。


另外补充一点:

如果你只想使用这个模拟器,而不是分析、修改它,那么你没有必要安装GPUSim的源码和编译它,因为编译它时,需要对编译器版本和各种库的依赖做很多复杂的设置。 你只需要拷贝这两个编译好的动态链接库文件就可以了。

GPUSim 生成的动态链接库,仅使用CPU,因此可以在任何机器上(没有安装 显卡的、没有安装GPUSim的)。使用方法很简答。 将编译好的两个动态链接库文件拷贝到另一台机器上,把LD_LIBRARY_PATH变量指向其存放的目录。 然后就可以执行CUDA程序了。这给没有显卡,但想学习CUDA的同学提供了一个途径。两个动态库文件(0成本),可以在很大程度上替代了硬件显卡。

我们实验室这样做的原因是有一台性能较高的服务器(4核8线程),该服务器上的编译器环境无法编译GPUSim,但是我们希望能在这台机器上运行GPUSim,因为比起在自己的低性能PC上运行可以节省很多时间(模拟器比硬件运行要慢的多,一个稍大点的程序,需要模拟几个小时)。可以在自己的PC修改源代码,实现自己的策略,编译后,把生成的链接库拷贝到服务器上,在服务器上设定LD_LIBRARY_PATH变量,运行CUDA程序收集所需的参数。同时开多个线程来运行,可以节省几倍的时间。



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值