CUDA常见问题与解答

标签: cuda编译器存储多线程streamwindows
2012-05-25 14:47 3359人阅读 评论(0) 收藏 举报

版权声明:本文为博主原创文章,未经博主允许不得转载。

1.在SDK自带的例子程序中,发现SRC文件珜下有.cpp文件和.cu文件。这两种文件的关系和各自的作用是什么呀?

答:SDK自带例子中的.cpp文件主要是一些CPU端处理,或者是使用CPU计算对照组结果,在某些例子中也会在.cpp文件中以函数的形式调用封装成C或者C++函数的GPU端代码.cu文件中通常是与GPU核函数和CUDA API相关的内容。

2.在SDK自带的例子程序中,有一些带有_kernel的.cu文件,在Visual Studio工程中的图标上有一个红色的符号,是什么意思?

答:大我数SDK例子程序都将设备端代码和主机端代码放在不同的文件中,以template为例如: 它的主机端代码在template.cu中,设备端代码在template_kernel.cu中,并且有一个用于对照的CPU 和GPU结果的cpmpute_gold.cpp文件。template_kernel.cu 在visual Studio工程中的符号代表它不参与编译。注意到template.cu文件中已经参赛过#include"template_kernel.cu"包含了template_kernel.cu。在参考SDK地,要注意文件夹包含造成的影响,避免在自己的工程中出现在重复定义可者变量的作用域没有覆盖端和主机端代码。如果要将SDK中的代码直接用于其他工程中,一定要注意将带有_kernel后缀的.cu文件排除在编译外,避免重复定义。

3.为什么编译CUDA程序时,经常出现未定义变量的错误?

答:存储在某些存储器中的某些变量,如__constant__,__device__,texture, 必须在所有的函数定义外定义,即定义的人全局变量。这些变量必须有正确的作用域,例如texture型变量必须对设备端代码和主机端代码同时可见,并且如果需要从主机端访问时,也要对主机端代码可见。SDK中的例子通过文件包含解决了这些问题。读者可以将主机端代码 和设备端代码都写在一个.cu文件中,或都是将这些变量定义在头文件中(注意避免重复定义)来解决这些问题。

4.为什么在工程中无法使用原子函数,双精度等功能?

答:首先,必须确定目前使用的设备的计算能力版本能支持相应的函数;其次,在编译时,nvcc编译器默认的目标设备为计算能力1.0版本,无法支持高计算能力版本的函数,需要通过-code,-arch等编译选项打开。

5.CUDA程序运行时出现蓝屏、死机等现象,或者打印出kernel  luanch timed out?

答:早期版本的CUDA更加容易出现蓝屏或者死机,目前已经大有改善。造成蓝屏、死机 自动重启等现象的常见原因主要有:访问显存时发生趆界、多个线程竞写同一数据。kernel launch timed out的原因是Windows操作系统会查询显卡状态,如果显卡长时间没有反应就会重并按启显卡,这限制了一个kernel的执行时间。经过试验,在XP系统下kernel不能超过12秒,而Vister和Win7操作系统的时间还要更短一些。如果发生这一问题,应该首先检查代码中是否出现了死循环或者竞写,然后采用减小kernel、采用stream操作等手段避免。如果确实需要在一个kernel中完成较大的计算量,可以使用更强的显卡、使用专门的Tesla流计算方案、改用Linux操作系统,或者使用一块不进行显示的显卡(但是Vista和Win7有时会关闭没有插显示器的显卡)。未来版本的CUDA会对这些问题继续进行改进。

6.为什么在编译或者运行时会出现资源朱足的提示?

如果在程序中使用了太多的register,shared,texture或者constant资源,在编译时会出现报错;如果运行中使用了太多的显存,或者是一个block中的线程太多,在运行时会出现错误。在低运算能力版本的硬件上运行为高计算能力设备编写的程序时也会发生错误。在使用变量时,需要注意各种变量的大小不能超过目标设备的计算能力版本本的相应限制,使用的显存也不能超过显存的量(如果这个显卡还需要需出显示,还要减去显示使用的显存大小)。解决资源方法主要有:减少程序使用的资源,注意释放不用的显存和内存,可者将问题进行分治。如果确有需要,应该使用拥有更大存储器的显卡,或者Tesla,Quadro等专业解决方案。

7.为什么时候在程序中无法得到正确的结果?为会有时每次运行的结果都不同?为什么GPU的结果与CPU的结果不同?

答:由于CUDA中存在大量线程的并行,因此程序中细小的错误也会产生相当严重的后果。造成结果错误的可能原因有:死循环、类型溢出、错误的数据类型、访存赿界、竞写,缺乏同步、编译器因素等。如果是发生多线程竞写一个数据的情况,应该采用原子操作来避免;在shared memory 发生warp间交换操作的数据时,一定要使用栅栏同步保证数据的可靠性;编译器会优化掉它认为多余的的存储访问,要通过valid关键字进行管理;过于复杂的循环有时无法被正确解析,产和错误结果。如果同一个程序对同一组数据每次运行得到的结果不同,一般是发生了竞写,或者缺乏同步。GPU和CPU的运算单元采用了不同的微架构,因此即使都符合IEEE 754规范,结果不一样是理所当然的。由于CPU 中可以使用更长字长的存储器来保存中间变量,因此通常使用CPU计算得到的结果要略高一些。

CUDA常见问题与解答相关推荐

  1. 关于Installshield里一些常见问题的解答—艾泽拉斯之海洋女神出品

    原文:关于Installshield里一些常见问题的解答-艾泽拉斯之海洋女神出品 上一篇:一个完整的安装程序实例-艾泽拉斯之海洋女神出品(五) --补遗 转载时请务必保留转载出处和由艾泽拉斯之海洋女神 ...

  2. 【Keras学习】常见问题与解答

    Keras FAQ:常见问题 如何引用Keras? 如果Keras对你的研究有帮助的话,请在你的文章中引用Keras.这里是一个使用BibTex的例子 @misc{chollet2015keras,a ...

  3. Visual Basic编程常见问题及解答(3)

    让您的文字框有 Undo / Redo 的功能 很多软件都有提供 Undo / Redo 的功能,Microsoft 的产品都可以提供多次 Undo 反悔,功能更强大! 在 VB 的程序中,我们也可以 ...

  4. Visual Basic编程常见问题及解答(2)

    如何把小图片填满 MDIForm 成为背景图? 以下这个范例,要: 1.一个 MDIForm:不必设定任何属性. 2.一个 Form1:不一定是 MDIChild,最好 MDIChild 为 Fals ...

  5. 微处理器常见问题及解答

    [微处理器常见问题及解答] Part1 1.BIOS在主板中的作用? BIOS全称:Basic Input Output System(基本输入输出系统).它是一组固化到计算机主板上的一个ROM芯片程 ...

  6. 信捷伺服刚性调整_信捷伺服常见问题分析解答.pdf

    信捷伺服常见问题分析解答.pdf DS2 DS2 信捷伺服常见问题分析解答(只针对 DDSS22 系列) 2010/04/26 2010/04/26 /0044//2266(有待补充) 面板显示内容解 ...

  7. TFmini 常见问题与解答

    TFmini 是一款小型激光雷达模组.主要实现实时.无接触式的距离测量功能,具有测量准确. 稳定.高速的特点. TFmini常见问题与解答 Q:请问TFmini是否可以在水面检测? A:不建议在水面探 ...

  8. 阿里云注销备案流程及注销备案常见问题与解答

    网站域名如果不用了或者转移给他人阿里云百科网建议已经备案的域名及时注销备案,因为域名的备案信息还是你的,阿里云百科网分享注销备案的流程和方法及注销备案的常见问题与解答: 注销备案方法流程 相对于备案来 ...

  9. eMule电驴服务器常见问题及解答

    eMule电驴服务器常见问题及解答 (一)服务器连接的相关说明:(以服务器日志当中的反馈信息为例) 1.正常连接到服务器的情况: 2004-10-25 22:58:47: 正在连接到DateAttac ...

最新文章

  1. 敏捷软件开发(c#版)文摘
  2. 数据中心未来将向“四高”演进
  3. 搭建SVN服务器详细过程 及 使用方法 Windows端
  4. 路由器不开机——维修更换MT7621AT CPU
  5. ios怎么下载java游戏平台_如何快速下载并安装 iOS 模拟器
  6. 解决docker nacos exited(137)
  7. LINUX下PHP扩展开发:第一个C扩展
  8. Appium 自动化测试 滑动 Swipe 详解
  9. java 省市联动_省市联动(json)
  10. 【经典】synergy共享鼠标键盘/一套鼠标键盘操作多台电脑
  11. 简易的java发邮件客户端
  12. 启天m420进入不了bios_联想启天M420c装win7及BIOS设置教程(USB驱动可用)
  13. WebServerApplication
  14. html设置背景图片自适应
  15. iOS开发常用国外网站清单
  16. 不用发论文也不教课的12名教授,为这个研究所拿下8次学界最高奖
  17. Unity 制作等比小地图并在小地图上标记出生点(类似于永劫无间、绝地求生、LoL小地图标记信号给队友)
  18. 基于JavaWeb实现的汽车维修管理系统
  19. ESLint: Unexpected token } in JSON at position 3792. Please see the ‘ESLint‘ output channel for deta
  20. 如何使用阿里云虚拟主机搭建博客(三)设置篇

热门文章

  1. MaBatis(5)输入/输出映射
  2. maven+tomcat8.0+eclipse远程部署项目
  3. 为什么Jedis操作后要主动归还?
  4. 《Python数据科学指南》——1.23 采用键排序
  5. android: 播放音频
  6. android-2.3.5_r1
  7. ActiveMQ BrokeUrl的配置和消息持久化配置
  8. 走过2011---年终总结
  9. vs2013 编译 notepad++ 源代码 2014-7-23
  10. 如何管理和记录 SSIS 各个 Task 的开始执行时间和结束时间以及 Task 中添加|删除|修改的记录数...