Я использую Visual Studio 2012 и получил несколько ядер, которые разбились при выполнении кода с помощью CUDA Debugging. Некоторые другие ядра, в которых выполняется одинаковый код без каких-либо проблем (на разных сгенерированных числах/данных). Я не знаю, сбой ядра при запуске программы без CUDA Debugging, поскольку я не получаю никаких ошибок.CUDA Размер стека при использовании отладки CUDA
Ошибка:
CUDA Debugger detected data stack overflow on 120 threads.
First thread:
blockIdx = {2,0,0}
threadIdx = {1,0,0}
StackPointer = 0x00ffe9d0
StackLimit = 0x00ffea40
Глядя в документации, которую я нашел, как увеличить размер стека (я также необходимо увеличить размер кучи):
//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);
Размер стека по умолчанию был 6464 , поэтому я хотел удвоить его, чтобы увидеть, есть ли улучшения. Когда я запускал программу, используя стандартный отладчик окон, размер стека, возвращаемый cudaDeviceGetLimit(&size_stack, cudaLimitStackSize)
, был 12928, как ожидалось.
Однако, когда я запускаю программу, используя отладчик CUDA, он сообщает размер стека 1024, а не 12928. Почему?
Протестировано на GeForce 520M и GeForce 840M, обе показали ту же проблему. – RemiDav