Лекция 1. GPU аппаратно-программная модель (1265182), страница 2
Текст из файла (страница 2)
Каждая нитьнаходится в своём блоке с начала выполнения и до конца.SIMT: аппаратное выполнение Все нити из одного блока выполняются на одноммультипроцессоре (SM)Максимальное число нитей в блоке – 1024Блоки не мигрируют между SMРаспределение блоков по мультироцесссорам непредсказуемоКаждый SM работает независимо от другихБлокипрограммыВиртуальныйблок нитейGigaThread engineБлоки и варпы Блоки нитей по фиксированному правилу разделяются нагруппы по 32 нити, называемые варпами (warp) Все нити варпа одновременно выполняют одну общуюинструкцию (в точности SIMD-выполнение) Warp Scheduler на каждом цикле работы выбирает варп,все нити которого готовы к выполнению следующейинструкции и запускает весь варпВиртуальныйблок нитейВарпWarp SchedulerВетвление (branching) Все нити варпа одновременно выполняют одну и туже инструкцию. Как быть, если часть нитей эту инструкцию выполнятьне должна? if(<условие>), где значение условия различается длянитей одного варпаЭти нити «замаскируются» нулями в специальномнаборе регистров и не будут её выполнять, т.е.
будутпростаиватьНесколько блоков на одном SM SM может работать с варпами нескольких блоководновременно Максимальное число резидентных блоков на одноммультипроцессоре – 8 Максимальное число резидентных варпов – 48 = 1536 нитейВиртуальный блокВиртуальнынитейй блокнитейВиртуальный блокнитейВарпWarp SchedulerЗагруженность (Occupancy) Чем больше нитей активно на мультипроцессоре, темэффективнее используется оборудование Блоки по 1024 нити – 1 блок на SM, 1024 нити, 66% от максимума Блоки по 100 нитей – 8 блоков на SM, 800 нитей, 52% Блоки по 512 нитей – 3 блока на SM, 1536 нитей, 100%SIMT и глобальная синхронизация В общем случае, из-за ограничений по числу нитей иблоков на одном SM, не удаётся разместить сразу всеблоки программы на GPU Часть блоков ожидает выполненияПоэтому в общем случае невозможна глобальнаясинхронизация Блоки выполняются по мере освобождения ресурсовНельзя предсказать порядок выполнения блоков Если все блоки программы удалось разместить, товозможна глобальная синхронизация через атомарныеоперацииВручную, специальная техника «Persistent Threads»SIMT и масштабирование Виртуальное GPU может поддерживатьмиллионы виртуальных нитей Виртуальные блокинезависимыПрограмму можно запустить налюбом количестве SM Аппаратное МультипроцессорынезависимыМожно «нарезать» GPU cразличным количеством SMпрограммаблокSIMTMIMDварпSIMDнитьNvidia SIMT-всенити из одноговарпа одновременновыполняют однуинструкцию, варпывыполняютсянезависимоSIMD – все нитиодновременно выполняютодну инструкциюMIMD – каждая нитьвыполняется независимо отдругих, SMP – все нитиимеют равные возможностидля доступа к памятиВыводыХорошо распараллеливаются на GPU задачи, которые: Имеют параллелизм по данным Одна и та же последовательность вычислений,применяемая к разным данным Могут быть разбиты на подзадачи одинаковой сложности подзадача будет решаться блоком нитей Каждая подзадача может быть выполнена независимо отвсех остальных нет потребности в глобальной синхронизацииВыводыХорошо распараллеливаются на GPU задачи, которые: Число арифметических операций велико по сравнению соперациями доступа в память для покрытия латентности памяти вычислениями Если алгоритм итерационный, то его выполнение можетбыть организовано без пересылок памяти между хостом иGPU после каждой итерации Пересылки данных между хостом и GPU накладны.