2015-01-02 2 views
3

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의 스택 크기를보고합니다. 왜 그럴까요?

+0

GeForce 520M 및 GeForce 840M에서 테스트 한 결과 모두 동일한 문제점을 나타 냈습니다. – RemiDav

답변

2

그냥 버그 일 뿐이므로 CUDA 7.0 Release Candidate로 업데이트되어 스택 할당이 제대로 작동하고 있습니다.

동일한 문제가있는 경우 최신 드라이버/툴킷으로 업데이트하십시오. CUDA 7.0 RC는 CUDA 등록 개발자 만 이용할 수 있습니다. 귀하는 해당 웹 사이트에 등록해야합니다.

+0

Tesla 2075C 및 CUDA V 5.5를 사용하는 동안 동일한 문제가 발생했습니다. CUDA V 7로 업그레이드하면 문제가 해결됩니다. – TripleS