【发布时间】:2011-05-27 13:39:50
【问题描述】:
我发现了 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;
}
【问题讨论】:
-
我也在 nvidia 的论坛上发布了这个问题:forums.nvidia.com/index.php?showtopic=201389