cuda错误改正

转载自http://blog.csdn.net/chengman2009/article/details/5474141

记录一下最近在CUDA编程上遇到的错误,觉得有必要写一写,这里也不是一点技术含量也没有的...

    CUDA上获取错误信息是通过函数cudaGetErrorString()实现的,具体怎么用自己去查手册吧...下面说的是返回错误的信息以及应该如何处理。我在这方面才刚开始,处理方法都是基于实际程序,未必是通用的。

    1. time out

    这是因为在windows下,显卡线程运行超过5秒就会被windows终止。这对于大计算量的kernel来说基本上是个致命的错误。可以尝试把kernel分解,或者使用Linux不带x-windows的模式。我就因此装了个fedora…

    2. unspecified launch failure

    据说主要是尝试访问没有分配的空间而产生的。这要很小心地看看代码,到底哪里越界了。

    3. setting the device when a process is active is not allowed

    原因是cutilDeviceInit()初始化显卡之后,没有调用cudaThreadExit()释放资源,导致第二次调用cutilDeviceInit()时出错。这个是CUDA从2.0升级到2.1后出现的,2.0时对再次调用cutilDeviceInit()对原有的资源不作任何处理,但2.1的时候就显式提示错误了。

    4. invalid argument

    据说是CUDA的对于__global__函数的参数传递使用的是shared memory,大小只有256bytes,传递参数的大小超过了这个限制。后来不知道为什么再也没报过这个错,也就没管了。

==========================================

    5.  unknown error (补充 6.28)

    看名字就觉得无语...据说是调用cudaMalloc或者cudaFree次数太多。有时还会促发segment fault...据说可以一次性分配显存解决问题,而且需要在最开始/结束的地方调用cudaMalloc/cudaFree。这个解决方法还没试过...

    出现问题还是要多看看NVIDIA的论坛,上面也许会有解决的办法。


6,kernel挂掉解决办法:出现这样的问题:1)分配的 空间过小,2)分配的空间是够的,但是下标或者指针错误,导致越界了。

7,检测kernel的方法:cuda-memcheck 是一个cuda toolkit中的功能性的检查组件;1)memcheck:zai Memcheck工具能够检测和归因cuda应用的出界和未对齐的内存访问错误,该工具还报告GPU所遇到的硬件例外。

2)racecheck;报告shared memory的会造成的data race 的数据访问错误。

3)initcheck:报告当GPU来执行为初始化的global memroy的访问。

4)synccheck:报告当应用程序试图在分歧代码里调用CTA同步操作的时候,

5)USING  CUDA-MEMCHECK

a)独立使用:cuda-memcheck[options] app_name [app_options]

b)在cuda gdb 使用:(cuda gdb)set cuda memcheck On     NVIDIA DOCS:http://docs.nvidia.com/cuda/cuda-memcheck/#about-cuda-memcheck;

C)在windows平台上使用nsight;在nsight菜单下的memory checker启用,然后直接start cudadebugging即可。在遭遇访存错误(例如不满足对齐要求,无效的地址,或者缓存区越界之类的)nsight将直接提示你出错的线程编号,出错的行号之类的信息。



8,找错误:第一个 对于返回时cudaError_t使用 cudaStatus是否等于cudaSuccess 来进行判断,第二种对于没有返回cudaError_t的可以使用cudaError_t error=cudaGetLastError();
printf("cuda error:%s\n",cudaGetErrorString(error));这两者来判断

9,在编写cuda内核的时候出现access violations异常,访存异常:解决的方式:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值