常见的cuda出错及解决方法

记录一下最近在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的论坛,上面也许会有解决的办法。

你可能感兴趣的:(编程,windows,linux,CUDA)