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