2013-12-22 5 views
1
.

Предположим, что блок потока содержит 1000 потоков, а поточный мультипроцессор (SM) может выполнять только 500 потоков, тогда мой блок потоков должен быть сопоставлен с двумя или более SM. то как они могут получить доступ к общей памяти?в CUDA. Как блок потока получает сопоставление с SM

ответ

3

..... тогда мой блок нитей должен быть сопоставлен с 2 или более SM.

Неправильное. Блоки только когда-либо отображаются на один многопроцессор для их полного жизненного цикла. Невозможно разбить блок на несколько SM.

Если вы попытаетесь запустить ядро, где размер блока или требования к ресурсам превышают требования к многопроцессору, на котором он должен запускаться, запуск завершится неудачно, и ядро ​​никогда не запустится.

+0

Но как программист, как мы знаем, сколько потоков мы можем поместить в блок, чтобы он не превышал потоки SM? Поскольку ни один из потоков, выполняемых на SM, не зависит от архитектуры GPU. – Vamshi

+3

Прочитав [документацию] (http://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#compute-capabilities), где подробно описаны аппаратные ограничения для каждого поколения оборудования. И используя [калькулятор занятости] (http://stackoverflow.com/questions/15080248/cuda-occupancy-calculator), который поставляется в каждой версии инструментария CUDA. – talonmies

+1

Кроме того, посмотрите на 'deviceQuery' [пример кода] (http://docs.nvidia.com/cuda/cuda-samples/index.html#utilities). –

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