Потоковые мультипроцессоры, блоки и потоки (CUDA)

Какова взаимосвязь между ядром CUDA, потоковым мультипроцессором и моделью блоков и потоков CUDA?

Что сопоставляется с тем, что и что распараллеливается и как? и что более эффективно, увеличить количество блоков или количество потоков?


В настоящее время я понимаю, что на мультипроцессор приходится 8 ядер cuda. и что каждое ядро ​​cuda сможет выполнять по одному блоку cuda за раз. и все потоки в этом блоке выполняются последовательно в этом конкретном ядре.

Это правильно?

67
задан talonmies 20 February 2016 в 08:23
поделиться

1 ответ

Схема потоков/блоков подробно описана в Руководстве по программированию CUDA. В частности, в главе 4 говорится:

Архитектура CUDA построена вокруг масштабируемого массива многопоточных потоковых мультипроцессоров (SMs). Когда программа CUDA на центральном процессоре вызывает сетку ядра, блоки сетки перечисляются и распределяются между мультипроцессорами с доступной производительностью. Потоки блока потоков выполняются одновременно на одном мультипроцессоре, а несколько блоков потоков могут выполняться одновременно на одном мультипроцессоре. Когда блоки потоков завершаются, на освободившихся мультипроцессорах запускаются новые блоки.

Каждый SM содержит 8 ядер CUDA, и в каждый момент времени они выполняют один блок из 32 потоков - таким образом, для выдачи одной инструкции для всего блока требуется 4 такта. Можно предположить, что потоки в любом данном варпе выполняются синхронно, но для синхронизации между варпами необходимо использовать __syncthreads().

63
ответ дан 24 November 2019 в 14:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: