我發現了CUDA的奇怪行爲。在我的內核中發生segfault後,我試圖釋放之前分配的內存,並且失敗。 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的論壇上發佈了queston:http://forums.nvidia.com/index.php?showtopic=201389 – kokosing 2011-05-27 13:45:28