CUDA菜鸟必看:论坛里那些总是被问到的问题.....

校校园,太平洋吹来暖湿的季风,学霸和学妹正在疯长,又到了大学生们最忙碌的季节——写论文。在导师眼中,GPU能为学生发毕业论文带来好运,值得为它冒险。现代社会,驱动的安装和CUDA环境的配置更加便捷,而每个月,GPU世界论坛总会被问到这写问题.....

显卡用于计算时,如果出现黑屏然后提示......

问题:请教:显卡用于计算时,如果出现黑屏然后提示“驱动程序已停止响应并已重启”,只需把tdrlevel设为0就行了么?还有没别的高招?

回答:修改kernel, 将每次计算限制在2s以内是正道。否则你的kernel只能在你这台机器上运行,换了机器,继续停止响应。正常的使用OpenCL的软件,kernel都不会运行上个几十秒的。建议拆分成更小的规模,多次启动。而不是任何方式的修改TDR/禁用TDR.OpenCL/CUDA通用的。Intel也通用的。

以及,如果方便,请更换tesla卡 TCC驱动。此时你可以随意运行。

直接购买Tesla,能解决一切烦恼。什么?你觉得Tesla卡贵?游戏卡性能更好?一般武侠小说里面有一个规律,神兵利器,都只是低等级角色看中的。对于高手而言,飞花拈叶即可伤人,换句话说,想要用便宜的硬件达到一定效果,起码得有点水平,知道怎么整,否则,花钱堆硬件也可以弥补 ,两头都占上,一般没那么好的事情。

异构计算和并行计算是一回事情么?

答:是否异构是针对你的host cpu来说的,因为我们常用的GPU的指令集架构不同于CPU。 所以称为异构计算。而异构和并行没有任何关系。

例如CPU上开多个线程进行并行某计算,显然不是异构的。而很多年前,在x87还被看成异构的时候,它也不是并行的。

不用nsight调试正常,一旦调试就出现这个情况?

问:调试出现Memory Checker detected xx access violations!,咋回事,显存没有越界,咋回事呢,不用nsight调试正常,一旦用nsight调试就出现这个情况。

答:关于nsight的报告,只要nsight报告了,你就一定越界了。请相信nsight。不用nsight调试正常,其实已经不正常了,只是有的时候,轻微越界无症状而已。(因为有分配粒度之类的影响因素)但只要nsight报告越界,你肯定越了。 这100%是代码的BUG,100%越界了。只是此BUG平日潜伏,而nsight将它抓了出来而已。(这就相当于一个医生检查了下你的身体后告诉你,你身体里潜伏了某疾病,然后你不听,说医生乱扯,说我平日好好的) 。

如何检查越界

答:nsight自带的memory checker可以自动检查,此功能是默认启用的,你用nsight调试一下,会自动报告哪里越界.

1:按照debug编译你的工程

2 : 确保VS的nsight菜单下的memory checker被选中(默认选中的. 如果你没改的话).

3:选择start cuda debugging

如果有越界或者kernel启动失败等,会在右下角弹出说明的

请注意, 常规运行的时候, 因为分配粒度的原因,程序中的轻微越界不一定会挂掉kernel,但是启用memory checker能够捕捉这些越界, 报告潜在的BUG.

如果看到memory access volations,就是越界了,回去回去检查显存的分配, 下标, 以及指针的使用。

你也可以检查你得到错误结果的时候,kernel是否正常执行了

具体方法为:

your_kernel<<<>>>();

cudaError_t err1,err2;

err1=cudaGetLastError();

printf("error code= %d , %s"\n,err1,cudaGetErrorString(err1));

err2=cudaDeviceSynchronize();

printf("error code= %d , %s"\n,err2,cudaGetErrorString(err2));

这段代码虽然不能精确的报告出错位置, 但可以分别告诉你kernel是否启动成功, 和执行过程中是否出错.

为啥我的速度变慢了?

问:请教个问题,一个由多个核函数组成的功能,调用一次大约4ms,10次大约20ms,可次数为100时,耗时20s,这是什么原因

答:八成是你代码在调用100次的时候,host code中间长期阻塞了。我建议你用profiler看。而不是自行测试时间。太多的人,自行测试极度不准的。用profiler其实有很多好处,例如你看到时间线,中间如果有,例如18秒的大幅度空白,那么就是你的host代码不知道干啥去了。此时你就不能怪GPU突然变慢10倍。(从理论的2s -> 20s) 而应该检查你的host code这段期间干啥去了,为啥没有及时给gpu发布任务。(例如,你的host code此时在访问磁盘,而磁盘正好有坏扇区或者坏道,卡住了. 或者host code在进行socket传输, 网络变卡. )(导致18s无响应)等等吧。各种情况都有的。显卡本身不可能突然慢100倍。这显然不会是显卡的问题。(因为你之前还能以2ms一次的速度执行的,证明卡是好的)(后来变成200ms一次(20s,100次),只可能是你的host code导致的其他方面的问题)(而不会是卡突然变慢100倍)你说呢。

windows下的vs怎么查看呢?

问:linux下的集成开发环境可以看各种不同的线程,那windows下的vs怎么查看呢?

答:VS需要启动CUDA debugging后才能看的。首先请检查你的VS是否有nsight菜单,如果没有,证明你没安装好,请重新按照VS--VS的补丁包---CUDA Toolkit的顺序重装。重装后一般即可在VS中看到nsight菜单,看到nsight菜单后,使用cuda debugging后,并在任意kernel断点中停住后,可以在nsight菜单里的各个选项,看到线程信息,warps信息,blocks信息,global memory中的内存等等。具体的用法请先阅读完手册再使用。

建议看nsight user guide学会.此手册免费随着cuda toolkit发放。就在你的硬盘上。

error LNK2019: 无法解析的外部符号

问:error LNK2019: 无法解析的外部符号 __imp__cutCheckCmdLineFlag@12,该符号在函数 _main 中被引用。怎么解决,引入什么

答:從CUDA 5.0起,例子裡面已經不包含cutil了。NV多次聲明,cutil只是給他們自家的例子用的,僅用於例子用途,不得在自己的項目中使用。而且從CUDA 5.0就已經被放棄了。目前有兩個選擇:

(1)修正所有抄襲自老版本例子的代碼,不要使用cutil

(2)降級CUDA到老版本。

一个kernel,每个block里的算法必须一样吗?

答:没人要求必须一样的。显然可以不一样的。只要没有说明不可以的,那都是可以的。很多时候,我们往往可以在warp的级别进行差异执行的。(实际上,甚至可以每个线程都执行不一样的代码,但这样做性能低下,意义不大。所以说,一般可以在warp级别上)而block是warps的集合,显然更可以的。

MSB3721 是什么错误啊

答:这个是通用错误, 需要打开build log成诊断,才能看到具体实际错误。

在VS选项的projects and solutions的build and run里,将右侧的最下面的两个框都打到最大。 然后重新编译,就能看到错误。

(更多GPU编程问题,点击阅读原文,欢迎到我们的技术论坛提问)

原文发布于微信公众号 - 吉浦迅科技(gpusolution)

原文发表时间:2017-05-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏温安适的blog

3个面试中遇到的问题

6月是个忙碌的月份,结完婚,处理完家事,也换了份工作。以至于6月都没有写blog,今天闲来无事,将之前面试的问题,以及一些感悟分享给大家。

1793
来自专栏JackieZheng

Nodejs学习笔记(三)——一张图看懂Nodejs建站

前言:一条线,竖着放,如果做不到精进至深,那就旋转90°,至少也图个幅度宽广。 通俗解释上面的胡言乱语:还没学会爬,就学起走了?! 继上篇《Nodejs学习笔记...

49910
来自专栏程序生活

Python爬虫系列(一)初期学习爬虫的拾遗与总结(11.4更)

---- 最近,为了提取裁判文书网的有关信息,自己迈入Python的学习之路,写了快两周的代码,自己写这篇文章总结下踩过的坑,还有遇到一些好的资料和博客等总结下...

4055
来自专栏涤生的博客

天池中间件大赛Golang版Service Mesh思路分享

这次天池中间件性能大赛初赛和复赛的成绩都正好是第五名,出乎意料的是作为Golang是这次比赛的“稀缺物种”,这次在前十名中我也是侥幸存活在C大佬和Java大佬的...

1714
来自专栏人工智能头条

Python热门文章推荐Top10

1704
来自专栏知识分享

关于PLC高速计数器使用

今天去面试问我高速计数器,因为没用过,所以直接说--不会.但是自己感觉自己自学电气,说不会太丢人了,所以今天学了PLC的高速计数器.虽然没有书,但是有度娘,还有...

3759
来自专栏Crossin的编程教室

用程序帮你炒股

最近在知乎上看到一个问题:如何使用 Python 抓取雪球网页? 雪球是国内一个人气很高的股票财经类网站,上面有个投资组合功能,很多民间股神在上面设定自己的投资...

3657
来自专栏星汉技术

计算机基础(三)

1436
来自专栏老马寒门IT

第一章:NodeJS 概述

Node 概述 什么是 Node Node.js® is a JavaScript runtime built on Chrome's V8 JavaScrip...

4489
来自专栏Golang语言社区

【Go 语言社区】在 Go 语言中,如何正确的使用并发

Glyph Lefkowitz最近写了一篇启蒙文章,其中他详细的说明了一些关于开发高并发软件的挑战,如果你开发软件但是没有阅读这篇问题,那么我建议你阅读一篇。这...

3649

扫码关注云+社区

领取腾讯云代金券