Проектирование иерархии потоков в ядре в CUDA - PullRequest
1 голос
/ 12 июля 2010

Предполагая, что блок имеет ограничение в 512 потоков, скажем, моему ядру для выполнения требуется более 512 потоков, как следует проектировать иерархию потоков для оптимальной производительности? (случай 1)

1-й блок - 512 потоков 2-й блок - остальные темы

(случай 2) распределить одинаковое количество потоков по определенным блокам.

Ответы [ 2 ]

1 голос
/ 12 июля 2010

Я не думаю, что это действительно имеет значение, но более важно логически сгруппировать блоки потоков, чтобы вы могли использовать другие оптимизации CUDA (например, объединение памяти)

Этоссылка дает некоторое представление о том, как CUDA (вероятно) будет организовывать ваши потоки.

Цитата из резюме:

Подводя итог, специальные параметры при запуске ядра определяютразмеры сетки и ее блоков.Уникальные координаты в переменных blockId и threadId позволяют потокам сетки различать их.Программист обязан использовать эти переменные в функциях ядра, чтобы потоки могли правильно идентифицировать часть данных для обработки.Эти переменные вынуждают программистов организовывать потоки и данные в иерархические и многомерные организации.

0 голосов
/ 29 июля 2010

Желательно разделить потоки поровну на два блока, чтобы максимизировать перекрытие доступа к вычислениям и памяти. Например, если в блоке 256 потоков, они не все вычисляются одновременно, на SM запланировано деформирование 32 потоков. Когда деформация ожидает данные глобальной памяти, запланирован другой деформация. Если у вас небольшой блок потоков, ваш доступ к глобальной памяти будет намного более пенистым.

Кроме того, в вашем примере вы недостаточно используете свой графический процессор. Просто помните, что в GPU есть десятки мультипроцессоров (например, 30 для C1060 Tesla), и блок сопоставляется с мультипроцессором. В вашем случае вы будете использовать только 2 мультипроцессора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...