【发布时间】:2012-05-05 13:12:34
【问题描述】:
我有一个如下所示的 CUDA 代码:
cpyDataGPU --> CPU
while(nsteps){
cudaKernel1<<<,>>>
function1();
cudaKernel2<<<,>>>
}
cpyDataGPU --> CPU
而function1是这样的:
function1{
cudaKernel3<<<,>>>
cudaKernel4<<<,>>>
cpyNewNeedDataCPU --> GPU // Error line
cudaKernel5<<<,>>>
}
根据cudaMemcpy documentation,这个函数可以产生4种不同的错误代码:“cudaSuccess”、“cudaErrorInvalidValue”、“cudaErrorInvalidDevicePointer”和“cudaErrorInvalidMemcpyDirection”。
但是,我收到以下错误:“cudaErrorLaunchFailure”:“执行内核时设备发生异常。常见原因包括取消引用无效设备指针和访问越界共享内存。直到 cudaThreadExit( ) 被调用。所有现有的设备内存分配都是无效的,如果程序要继续使用 CUDA,则必须重建。"
有没有人知道我为什么会收到这个错误¿? 我做错了什么?
在先前的内核调用 ¿ 之后复制数据 CPU-->GPU 是否有意义?问题是,我必须在每个步骤中复制这些数据,因为它可能会在每个“while”步骤中发生变化。
提前多谢!!
【问题讨论】: