2015-04-30 5 views
1

Я новичок в программировании cuda. Я работаю на Kepler GPU, который имеетМаксимальное количество потоков для ядра

3.2 compute_capability 
1024 max_threads_per_block 
1 Multiprocessor 
2048 max._threads per_Multiprocessor 
2147483647 grid size 

Означает ли это, что я могу назначить только 2048 для ядра?. Тогда что делать с этим большим размером сетки?

Мое приложение включает в себя некоторые большие вычисления матрицы.

Спасибо

ответ

3

Вам нужно узнать больше о программировании CUDA.

В ядре может быть более 1024 или 2048 потоков (т. Е. Сетка).

Предел 1024 - это предел для каждого блока. Номер 2048 - это то, что вам не нужно уделять слишком много внимания, если вы новичок.

В запуске ядра:

mykernel<<<A,B>>>(...); 

Параметр B это нити на блок. Он ограничен до 1024.

Параметр A - это блоки на каждую сетку. Он ограничен 2^31-1 (для размера x на кеплеровском графическом процессоре). Таким образом, вы могли бы в теории запуска (2^31-1) * 1024 потоков в одномерной сетке на устройстве cc3.x.

+0

Спасибо за ваш ответ. Я думал, что, поскольку GPU имеет только один SM, SM может иметь максимум 2048 потоков, максимальный поток для ядра будет 2048 – user8462

+3

Даже если у GPU есть только 1 SM, вы можете запустить ядро, которое содержит много блоков, и эти блоки будут проходить через этот SM, как позволяют пространство и ресурсы. Номер 2048 дает вам представление о том, сколько потоков (максимум) может обрабатываться SM * в любой момент *, то есть одновременно. Но по мере того как threadblocks завершают свою работу, они «выходят» из SM, и новые потоковые блоки могут запускаться. –

+0

Так как GPU работает на SIMT, это не означает, что все потоки должны занимать SM в одно время. Еще раз спасибо. – user8462

 Смежные вопросы

  • Нет связанных вопросов^_^