Visual Studio 2012를 사용하고 CUDA 디버깅을 사용하여 코드를 실행할 때 충돌 한 커널이 있습니다. 일부 다른 커널에서는 문제없이 동일한 코드를 실행합니다 (생성 된 숫자/데이터마다 다름). 어떤 오류도 발생하지 않기 때문에 CUDA 디버깅없이 프로그램을 실행할 때 커널이 충돌하는지 여부는 알 수 없습니다.CUDA CUDA를 사용할 때 스택 크기 디버그
오류 : 기본 스택 크기는 6464
//Increase memory limits
size_t size_heap, size_stack;
cudaDeviceSetLimit(cudaLimitMallocHeapSize,20000000*sizeof(double));
cudaDeviceSetLimit(cudaLimitStackSize,12928);
cudaDeviceGetLimit(&size_heap, cudaLimitMallocHeapSize);
cudaDeviceGetLimit(&size_stack, cudaLimitStackSize);
printf("Heap size found to be %d; Stack size found to be %d\n",(int)size_heap,(int)size_stack);
을했다 :
CUDA Debugger detected data stack overflow on 120 threads.
First thread:
blockIdx = {2,0,0}
threadIdx = {1,0,0}
StackPointer = 0x00ffe9d0
StackLimit = 0x00ffea40
나는 (나는 또한 힙 크기를 증가시킬 필요) 스택의 크기를 증가하는 방법을 발견 한 문서에 보면 그래서 어떤 개선이 있는지보기 위해 두 배로 늘리고 싶었습니다. 표준 Windows 디버거를 사용하여 프로그램을 시작하면 cudaDeviceGetLimit(&size_stack, cudaLimitStackSize)
에 의해 반환 된 스택 크기는 예상대로 12928입니다.
그러나 CUDA 디버거를 사용하여 프로그램을 시작하면 12928이 아닌 1024의 스택 크기를보고합니다. 왜 그럴까요?
GeForce 520M 및 GeForce 840M에서 테스트 한 결과 모두 동일한 문제점을 나타 냈습니다. – RemiDav