gpt4 book ai didi

cuda - 使用cudaMemcpy : cudaErrorLaunchFailure时出现奇怪的错误

转载 作者:行者123 更新时间:2023-12-04 18:12:39 25 4
gpt4 key购买 nike

我有一个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”步骤中更改。

提前解冻很多!!

最佳答案

您链接的文档还说:

Note that this function may also return error codes from previous, asynchronous launches.



当您调用 cudaMemcpy()时,程序将等待所有之前的GPU工作完成(请记住内核启动是异步的),然后检查状态并执行memcpy(如果一切正常)。但是,在这种情况下,您的一个内核已失败。

此错误的最常见原因是越界访问,就像x86区域中的段错误一样。

cudaErrorLaunchFailure : An exception occurred on the device while executing a kernel. Common causes include dereferencing an invalid device pointer and accessing out of bounds shared memory. The device cannot be used until cudaThreadExit() is called. All existing device memory allocations are invalid and must be reconstructed if the program is to continue using CUDA.



调试此问题最简单的方法是使用cuda-memcheck。另外,您可以通过在每次内核启动后调用 cudaDeviceSynchronize()并检查返回值来确定哪个内核失败。

关于cuda - 使用cudaMemcpy : cudaErrorLaunchFailure时出现奇怪的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10305715/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com