Сетка потоковых блоков и мультипроцессора
Руководство по программированию CUDA гласит:
Архитектура CUDA построена на масштабируемом массиве многопоточных потоковых мультипроцессоров (SM). Когда программа CUDA на хост-процессоре вызывает сетку ядра, блоки сетки перечисляются и распределяются среди многопроцессорных систем с доступной производительностью. Потоки блока потоков выполняются одновременно на одном мультипроцессоре, а несколько блоков потоков могут выполняться одновременно на одном мультипроцессоре. По мере того как блоки потоков завершаются, новые блоки запускаются на свободных мультипроцессорах.
Означает ли это, что если у меня есть видеокарта с 2-мя многопроцессорными ядрами x n-cuda и если ядро запускается как
MyKernel<<<1,N>>>(sth);
Один из мультипроцессоров будет простаивать, так как я запускаю один блок из N потоков?
1 ответ
Ты прав.
Во всех точных архитектурах CUDA блок только когда-либо запланирован и выполняется на одном мультипроцессоре. Если вы запускаете один блок на устройстве с несколькими мультипроцессорами, все эти мультипроцессоры, кроме одного, будут простаивать.