Как из-за перекоса вызвать еще один перекос в состоянии ожидания?
Как вы можете видеть в заголовке вопроса, я хочу знать, как деформация приводит к тому, что другая деформация переходит в состояние ожидания. Я много читаю Q/A в SO, но не могу найти ответ. В любой момент может быть запущен только один перекос в блоке? Если это так, состояние бездействия деформации не имеет смысла, но если мы можем запустить несколько деформаций одновременно, то каждый деформация может выполнять свою работу отдельно от других деформаций.
В документе говорится: нерегулярные рабочие элементы приводят к тому, что целые деформации находятся в состоянии простоя (например, warp0 относительно warp1 на следующем рисунке).
1 ответ
Термины, используемые профилировщиком Nsight VSE для состояния деформации, определены по адресу http://docs.nvidia.com/gameworks/index.html#developertools/desktop/nsight/analysis/report/cudaexperiment/kernellevel/issueefficiency.htm. Эти термины также используются в многочисленных презентациях GTC по анализу производительности.
Распределитель вычислительных работ (CWD) запустит блок потоков на SM, когда все ресурсы для блока потоков будут доступны. Ресурсы включают в себя:
- слот для блока резьбы
- деформация слотов (достаточно для блока)
- регистры для каждой основы
- общая память для блока
- барьеры для блока
Когда у SM достаточно ресурсов, блок потоков запускается на SM. Блок резьбы растеризован в деформации. Деформации назначаются планировщикам деформации. Ресурсы выделяются для каждой основы. В этот момент деформация находится в активном состоянии, что означает, что деформация может выполнять инструкции.
В каждом цикле каждый планировщик короблений выбирает из списка допустимых отклонений (активных, не остановленных) и выдает 1-2 инструкции для отклонения. Деформация может зависнуть по многим причинам. Смотрите документацию выше.
Графические процессоры Kepler - Volta (кроме GP100) имеют 4 планировщика перекосов (подразделов) на потоковый мультипроцессор (SM). Все деформации потоковых блоков должны быть на одном СМ. Следовательно, в каждом данном цикле блок потока может выдавать инструкции для до 4 (подразделов) перекосов в блоке потока.
Каждый планировщик короблений может выбрать любой из допустимых отклонений в каждом цикле. SM передается по конвейеру, так что все деформации блоков нитей максимального размера (1024 нитей == 32 деформации) могут иметь инструкции в полете на каждом цикле.
Единственное определение режима ожидания, которое я могу определить без дополнительного контекста: - если планировщик деформации имеет 2 допустимых деформации и 1 выбран, тогда другой останавливается в состоянии, называемом невыбранным. - Если деформации в блоке потока выполняют барьер (__syncthreads), то деформации останавливаются на барьере (не допускается) до тех пор, пока не будут выполнены требования барьера. Деформация остановилась на барьере.