Я использую карту Quadro K2000M, возможность CUDA 3.0, CUDA Driver 5.5, runtime 5.0, программирование с Visual Studio 2010. Мой алгоритм GPU выполняет много параллельных поисков ширины (BFS) дерева (константа). Потоки независимы, за исключением чтения из постоянного массива и дерева. В каждом потоке могут быть некоторые операции malloc/free, следуя алгоритму BFS с очередями (без рекурсии). Там N потоков; число узлов дерева листьев также N. Я использовал 256 потоков на блок и (N + 256-1)/256 блоков на сетку.Как отлаживать: ядро CUDA терпит неудачу, когда есть много потоков?
В настоящее время проблема заключается в том, что программа работает для менее N = 100000 потоков, но не работает более чем. Он также работает в процессоре или в потоке GPU по потоку. Когда N велико (например,> 100000), ядро падает, а затем cudaMemcpy
с устройства на хост также терпит неудачу. Я пробовал Nsight, но он слишком медленный.
Теперь я установил cudaDeviceSetLimit(cudaLimitMallocHeapSize, 268435456);
Я также пробовал более крупные значения, до 1G; cudaDeviceSetLimit
преуспел, но проблема остается.
Кто-нибудь знает какую-то общую причину вышеуказанной проблемы? Или любые подсказки для дальнейшей отладки? Я попытался поставить некоторые printf, но есть тонны вывода. Более того, как только поток падает, все остальные printf отбрасываются. Таким образом, трудно определить проблему.
Вы бы хотели поделиться своим проектом VS2010? Я только начинаю с CUDA и интересуюсь сетевым анализом. Заранее спасибо. – ProfNimrod