Ответ 1
Это уровень уровня parallelism (ILP). Инструкции, изданные из варпа одновременно, должны быть независимыми друг от друга. Они выдаются планировщиком инструкций SM для разделения функциональных блоков в SM.
Например, если есть две независимые команды FMAD в потоке команд warp, которые готовы к выпуску, и у SM есть два доступных набора единиц FMAD, на которых они будут выпущены, оба они могут быть выпущены в том же цикле. (Инструкции могут быть изданы вместе в различных комбинациях, но я не запомнил их, поэтому я не буду приводить подробные сведения здесь.)
Модули исполнения FMAD/IMAD в SM 2.1 имеют ширину 16 SP. Это означает, что для выполнения инструкции по деформации (32 потока) для одного из 16-исполнительных блоков требуется 2 цикла. Существует несколько (3) из этих 16-разрядных исполнительных блоков (всего 48 SP) на SM, плюс специальные функциональные блоки. Каждый планировщик warp может выдавать до двух из них за цикл.
Предположим, что исполнительные модули FMAD: pipe_A
, pipe_B
и pipe_C
. Скажем, что на этапе 135 существуют две независимые команды FMAD fmad_1
и fmad_2
, которые ждут:
- В цикле 135 планировщик команд выдаст первую половину деформирования (16 потоков)
fmad_1
в FMADpipe_A
, а первая половина деформацииfmad_2
на FMADpipe_B
. - В цикле 136 первая половина деформации
fmad_1
переместится на следующий этап в FMADpipe_A
, и аналогично первая половина деформацииfmad_2
переместится на следующий этап в FMADpipe_B
, Планировщик warp теперь выдает второй аргументfmad_1
на FMADpipe_A
, а второй - наfmad_2
на FMADpipe_B
.
Таким образом, требуется 2 цикла для выдачи 2 инструкций из одного и того же варпа. Но, как указывает OP, есть два планировщика warp, что означает, что весь этот процесс может выполняться одновременно для команд из другого warp (при условии наличия достаточных функциональных блоков). Следовательно, максимальная скорость выпуска составляет 2 инструкции по деформации за цикл. Обратите внимание, что это абстрактное представление для перспективы программиста: фактические архитектурные детали низкого уровня могут быть разными.
Что касается вашего вопроса о том, когда варп будет готов дальше, если есть больше инструкций, которые не зависят от каких-либо выданных (уже выпущенных, но не удаленных) инструкций, то они могут быть выпущены в следующем цикле. Но как только только доступные инструкции зависят от инструкций в полете, варп не сможет выдавать. Однако в этом случае возникают другие искажения - SM может выдавать инструкции для любого резидентного варпа, который имеет доступные (незаблокированные) инструкции. Это произвольное переключение между перекосами - это то, что обеспечивает "скрытие задержек", на которые GPU зависят от высокой пропускной способности.