内核执行错误后释放内存时,CUDA失败

| 我发现CUDA的行为异常。在内核中出现段错误后,我试图释放先前分配的内存,但它失败了。 CUDA会自动执行吗?我的意思是,内核执行段错误后CUDA是否释放内存? 这是重现我的情况的代码。我已经在CUDA 4.0、4.0rc2和3.2上进行了测试
#include <cassert>

__global__ void segfault(){
    int* null = NULL;
    *null = 0;
}

int main() {
    int* i;
    assert (cudaSuccess ==  cudaHostAlloc(&i, sizeof(int)*100, cudaHostAllocMapped));
    segfault<<<1,100>>>();
    assert (cudaErrorLaunchFailure == cudaThreadSynchronize());
    assert (cudaErrorLaunchFailure == cudaGetLastError());
    assert (cudaSuccess == cudaGetLastError());
    assert (cudaSuccess == cudaFreeHost(i));
    return 0;
}
    
已邀请:
        以我的经验,一旦您在CUDA执行中遇到此类错误,所有后续操作都将失败,直到您重置设备。文档指出该内存的作用域为CUDA上下文,因此当您破坏该上下文(通过重置设备)时,该内存将被释放。     

要回复问题请先登录注册