关于 launch timed out

Hi all,

我的程序在执行完一个kernel之后,要把一个float值复制给一个Host端的变量。

类似:

float res;

launch_kernel<<<…>> (…, float * data);

cutilSafeCall( cudaMemcpy( &res, data, sizeof(float), cudaMemcpyDeviceToHost) );

执行copy的时候会出错:
Runtime API error : the launch timed out and was terminated.

cutil提示的出错行数就是cudamemcpy这一行。

这样的问题怎么来解决呢?

最大的可能是内核运行时间太长

这里kernel代码并不长。

我在kernel里访问了cuda texture reference,而绑定到这个tex ref上的cudaArray是由cudaGraphicsSubResourceGetMappedArray()获取的GL_TEXTURE_2D的数据。

我现在不太确定的是,这个cudaArray是否需要预先分配空间。现在是没有分配空间,在与openGL交互时没出现错误,但是执行kernel会有问题。

晚上找到了问题。

说起来很尴尬,循环结束的判断条件有个typo,始终为真,结果就在kernel里无限循环了。

:(

呵呵!执行时间太长,幸好没说错:)