#cuda
#cuda
Вопрос:
Я понимаю, как в CUDA планируются перекосы и блоки, но не то, как эти два механизма планирования объединяются. Я знаю, что, когда в SM достаточно ресурсов выполнения для поддержки нового блока, выполняется новый блок, и я знаю, что допустимые искажения выбираются для выполнения каждого такта (если позволяют резервные ресурсы выполнения). Однако, что именно делает деформацию «приемлемой»? А что, если ресурсов выполнения достаточно для поддержки новой деформации, но не нового блока? Включает ли планирование блоков планирование деформации? Помощь будет высоко оценена, спасибо!
Ответ №1:
Включает ли планирование блоков планирование деформации?
Планировщик блоков и планировщик деформации следует рассматривать как 2 отдельных объекта. На самом деле я бы рассматривал планировщик блоков как объект для всего устройства, тогда как планировщик деформации является объектом для каждого пользователя.
Вы можете представить, что может существовать «очередь» блоков, связанных с каждым запуском ядра. По мере того, как ресурсы на SM становятся доступными, планировщик блоков помещает блок из «очереди» в этот SM.
С этим описанием планирование блоков не включает планирование деформации.
Однако, что именно делает деформацию «приемлемой»?
Сейчас мы рассматриваем блок, который уже размещен на SM. Деформация является «допустимой», когда у нее есть одна или несколько инструкций, готовых к выполнению. Противоположность «допустимому» — «остановлено». Деформация «останавливается», когда у нее нет инструкций, готовых к выполнению. Документация по профилировщику GPU описывает множество возможных «причин остановки» (*), но типичной из них является зависимость: инструкция, которая зависит от результатов предыдущей инструкции (или операции, такой как чтение памяти), не может быть выдана до получения результатов предыдущей инструкции/операция готова. Также обратите внимание, что графический процессор в настоящее время не является вышедшей из строя машиной. Если следующие выполняемые инструкции в настоящее время остановлены, графический процессор не выполняет поиск (очень далеко) в последующем потоке команд возможных независимо исполняемых инструкций.
А что, если ресурсов выполнения достаточно для поддержки новой деформации, но не нового блока?
Это не дает ничего полезного. Чтобы запланировать новый блок (т. Е. Чтобы планировщик блоков поместил новый блок в SM), Должно быть достаточно ресурсов, доступных для всего блока. (Планировщик блоков не вносит блоки по деформации. Это предложение «все или ничего», поблочно.)
(*) Существует одна «причина остановки», называемая «не выбрана», которая на самом деле не указывает на остановку деформации. Это означает, что деформация действительно допустима, но она не была выбрана для отправки инструкций в этом цикле, обычно потому, что планировщики warp выбрали инструкции из других warp для выдачи в этом цикле.
Комментарии:
1. Отличное подробное объяснение. Предположим, что два блока запланированы для SM. Запланированы ли перекосы обоих блоков планировщиками на SM одновременно?
2. Потенциально, да. В противном случае было бы мало смысла планировать оба блока в SM. Каждый планировщик деформации может выбрать из любого доступного warp, который готов к выдаче, в любом заданном цикле, для выдачи инструкции.