Дебют архитектуры Turing — беспрецедентное явление на рынке компьютерной графики

Аппаратное ускорение трассировки лучей в реальном времени, чипы гигантского размера и скандальная цена флагманской карты — обсудим все это в первой части обзора GeForce RTX 2080 Ti.

Анонс новых ускорителей семейства GeForce RTX на базе архитектуры Turing стал, не побоимся этого слова, выдающейся вехой на пути самой компании и индустрии потребительской 3D-графики в целом. Каждое по-настоящему крупное обновление дискретных GPU последних лет было кульминацией тех или иных течений, направлявших инженерную мысль за долгое время до ее воплощения в кремнии. Но Turing, для чтобы читатели в полной мере оценили значимость текущего момента, требует максимально широкого контекста, охватывающего всю историю игрового 3D на персональных компьютерах.

С компанией NVIDIA связано множество поворотных точек на кривой развития компьютерной графики. Скажем, немногие знают, что именно NVIDIA, а не 3dfx, в 1995 году выпустила на рынок первый массовый 3D-ускоритель на чипе NV1. Дальнейшие события известны намного лучше. Уже через четыре года GeForce 256 принес на персоналки аппаратную обработку трансформации и освещения полигонов (Transformation and Lighting, T&L), а затем, силами GeForce 3, появились программируемые шейдеры. Позднейшим из достижений NVIDIA сопоставимой важности стал высокоуровневый интерфейс CUDA для выполнения расчетов общего назначения, которые со временем стали едва ли не более важной задачей для GPU, чем рендеринг графики.

Впоследствии графические процессоры отправились в спокойное плавание, не отмеченное радикальными переменами в функциях железа и принципах программирования. Но вот спустя 11 лет после анонса CUDA основатель NVIDIA Дженсен Хуанг вынес на сцену видеокарту под девизом Graphics Reinvented, и, вы знаете, в данном случае высокопарные слова совершенно уместны. Ведь Turing впервые среди потребительских GPU обеспечивает специализированное ускорение расчетов искусственного интеллекта и трассировки лучей в реальном времени. Можно не сомневаться: если игровая индустрия поддержит эти инициативы, а хватка NVIDIA на рынке сейчас как никогда сильна, то мы стали очевидцами очередной смены эпох.

Представляем первую часть обзора видеокарт семейства GeForce RTX, в которой нас ждет подробный анализ архитектуры Turing и презентация устройств на ее основе. Масштаб изменений по сравнению с предыдущим поколением, Pascal, вполне заслуживает отдельной статьи, а эмпирическое тестирование GeForce RTX 2080 Ti в любом случае придется отложить до 19 сентября, когда истекает запрет на публикацию бенчмарков и в нашем распоряжении появятся первые образцы устройств.

Графические процессоры семейства Turing

Перед глубоким погружением в архитектуру Turing составим общее представление о самом железе, которое выпустила NVIDIA. Благо, новый кремний по-прежнему характеризуют метрики, применимые к GPU предыдущих поколений, а назначение и принцип работы специализированных функциональных блоков мы изучим позже.

В отличие от Pascal и более ранних поколений GPU, Turing с первого дня существует в виде трех процессоров — TU102, TU104 и TU106. Как видим, компании пришлось сменить привычную номенклатуру, в которой первой буквой всегда была G, а вторая означает название микроархитектуры, ведь сочетание GT уже занято старым семейством Tesla. Чипы выпускаются по эксклюзивному контракту с фабрикой TSMC, где им выделен собственный технологический узел 12 нм FFN (это буквально означает FinFET NVIDIA).

Производитель NVIDIA
Название GP104 GP102 GP100 GV100 TU106 TU104 TU102
Микроархитектура Pascal Pascal Pascal Volta Turing Turing Turing
Техпроцесс, нм 16 nm FinFET 16 nm FinFET 16 nm FinFET 12 нм FFN 12 нм FFN 12 нм FFN 12 нм FFN
Число транзисторов, млн 7 200 12 000 15 300 21 100 10 800 13 600 18 600
Площадь чипа, мм2 314 471 610 815 445 545 754
Конфигурация SM/TPC/GPC
Число SM 20 30 60 84 36 48 72
Число TPC 20 30 30 42 18 24 36
Число GPC 4 6 6 6 3 6 6
Конфигурация потокового мультипроцессора (SM)
FP32-ядра 128 128 64 64 64 64 64
FP64-ядра 4 4 32 32 2 2 2
INT32-ядра Н/Д Н/Д Н/Д 64 64 64 64
Тензорные ядра Н/Д Н/Д Н/Д 8 8 8 8
RT-ядра Н/Д Н/Д Н/Д Н/Д 1 1 1
Программируемые вычислительные блоки GPU
FP32-ядра 2 560 3 840 3 840 5 376 2 304 3 072 4 608
FP64-ядра 80 120 1 920 2 688 72 96 144
INT32-ядра Н/Д Н/Д Н/Д 5 376 2 304 3 072 4 608
Тензорные ядра Н/Д Н/Д Н/Д 672 288 384 576
RT-ядра Н/Д Н/Д Н/Д Н/Д 36 48 72
Блоки фиксированной функциональности
TMU (блоки наложения текстур) 160 240 240 336 144 192 288
ROP 64 96 128 128 64 64 96
Конфигурация памяти
Объем кеша L1 / текстурного кеша, Кбайт 48 48 24 ≤ 128 из 128, общий с разделяемой памятью 32/64 из 96 (общий с разделяемой памятью) 32/64 из 96 (общий с разделяемой памятью) 32/64 из 96 (общий с разделяемой памятью)
Объем разделяемой памяти / SM, Кбайт 96 96 64 ≤ 96 из 128 (общий с кешем L1) 32/64 из 96 (общий с кешем L1) 32/64 из 96 (общий с кешем L1) 32/64 из 96 (общий с кешем L1)
Объем регистрового файла / SM, Кбайт 256 256 256 256 256 256 256
Объем регистрового файла / GPU, Кбайт 5 120 7 680 15 360 21 504 9 216 12 288 18 432
Объем кеша L2, Кбайт 2 048 3 072 4 096 6 144 4 096 4 096 6 144
Разрядность шины RAM, бит 256 384 4 096 4 096 256 256 384
Тип микросхем RAM GDDR5/GDDR5X GDDR5X HBM2 HBM2 GDDR6 GDDR6 GDDR6
 
Шина NVLINK Н/Д Н/Д 4 × NVLink 1.0 x8 6 × NVLink 2.0 x8 Н/Д 1 × NVLink 2.0 x8 2 × NVLink 2.0 x8


В действительности «нанометраж» фотолитографического процесса редко соответствует своему прямому смыслу — длине транзисторного затвора, а та, в свою очередь, ничего не говорит о зазорах между элементами и реальной плотности их размещения. В данной ситуации TSMC не скрывает того факта, что ее технология 12 нм является вариантом узла 16 нм FinFET+ с повышенной плотностью и сниженными утечками тока. Потому не удивительно, что по отношению декларируемого числа транзисторов к площади кристалла все три чипа Turing практически не отличаются от старшего Pascal (GP100), который был получен на «чистом» техпроцессе 16 нм. Впрочем, по сравнению GP104 (GeForce GTX 1070/1080) у Turing все же наблюдается прирост плотности около 6%.

Согласно количеству элементов можно распределить три «Тьюринга» по весовым категориям, заданным процессорами поколения Pascal. TU104 ближе всего к GP102 (GeForce GTX 1080 Ti), а младший чип, TU106, за неимением ближайшего аналога, соответствует GP104. Заметьте, насколько при смене поколений выросли площади кремния и транзисторные бюджеты (на 42 и 50% соответственно в паре GP104-TU106 и на 16 и 13% у GP102-TU104).

В авангарде модельного ряда Turing находится TU102. Появление чипа с таким номером в первые дни новой архитектуры уже необычно, если вспомнить, сколько времени понадобилось NVIDIA, чтобы запусть в игровой сектор старших представителей предыдущих поколений. Но помимо этого, сам GPU беспрецедентно велик по действующим стандартам массового рынка. При площади 754 мм2 и транзисторном бюджете 18,6 млрд он уступает лишь своему серверному предшественнику GV100 (815 мми 21,1 млрд транзисторов) на архитектуре Volta, а GP102 (471 мми 12 млрд транзисторов) превосходит на 60 и 55% соответственно. К слову, позиция TU100, которую по аналогии с Pascal и Volta мог бы занять еще более амбициозный чип для датацентров на базе Turing (со всеми полагающимися атрибутами в виде памяти HBM2 и NVLink в качестве основной шины), пока вакантна.

При сравнении с Pascal по количеству 32-битных ядер CUDA и блоков фиксированной функциональности (TMU и ROP) становится очевидно, что в лице Turing мы имеем дело с кардинально отличной архитектурой, ведь TU106 и TU104 заметно уступают своим предкам GP104 и GP102. Только старший Turing не идет на компромисс по количеству ядер CUDA и блоков наложения текстур просто за счет колоссальных размеров чипа.

Как получилось, что столь крупные GPU оказались сравнительно небогаты CUDA-ядрами, объясняется массой факторов, среди которых ведущую роль играет появление вычислительных блоков трех новых типов: тензорных ядрер, ядер трассировки лучей (RT в таблице), а также ядер целочисленных вычислений (INT32). Кроме того, у новых GPU в полтора-два раза разбух кеш второго уровня и увеличилась площадь управляющей логики за счет реорганизации CUDA-ядер в пределах потокового мультипроцессора (SM). Все эти изменения мы также обсудим в следующих разделах обзора.

Поскольку смена техпроцесса на условные 12 нм вряд ли радикально подействовала на рабочие частоты GPU, может сложиться впечатление, что создатели Turing пожертвовали стандартной шейдерной производительностью в пользу новых специализированных функций. Но не стоит делать выводы по табличным данным. При подробном рассмотрении мы убедимся, даже если не брать в расчет долю транзисторов, которую съели тензорные и RT-ядра, что Turing в целом стал более сложной и «широкой» архитектурой по сравнению с Pascal, и это, по крайней мере в теории, способствует повышенной эффективности в шейдерных вычислениях.

Завершая краткий обзор кремния Turing, отметим появление чрезвычайно быстрого интерфейса NVLink, который используется в кластерах HPC-ускорителей Tesla на основе чипов GP100 и GV100, и, соответственно, новых аппаратных мостиков. Чип TU104 несет один порт NVLink второго поколения с пропускной способностью 50 Гбайт/с (по 25 Гбайт/с в каждую сторону), а TU102 — два порта. Новый стандарт здесь выступает в качестве замены выделенной шины SLI (возможные конфигурации по-прежнему ограничены двумя GPU), и скорости одного такого порта вполне достаточно для передачи кадрового буфера с разрешением 8К в режиме AFR (Alternate Frame Rendering).

Но обратите внимание, что при использовании двух портов пропускная способность NVLink уже находится в зоне возможностей оперативной памяти бюджетных игровых видеокарт. При неграфических вычислениях с помощью нескольких чипов в связке NVLink память соседнего ускорителя уже можно рассматривать как дальний сегмент локальной RAM и в перспективе такой подход применим для реализации сложных алгоритмов мультиадаптерного рендеринга под Direct3D 12 (конвейеризация кадров). В отличие от старого интерфейса SLI, который используется только для передачи кадровых буферов, коммуникация нескольких GPU по такой шине, как NVLink, разрешена в рамках эксплицитного режима Multi-Adapter под Direct3D 12.

Модельный ряд GeForce RTX 20

Семейство GeForce RTX на данном этапе представлено тремя устройствами — RTX 2070, RTX 2080 и RTX 2080 Ti, основанными на чипах TU106, TU104 и TU102 соответственно. Среди них только RTX 2070 достался полностью функциональный графический процессор, в то время как TU104 и TU102 оказались тем или иным образом «порезаны» в своих потребительских воплощениях. RTX 2080 и RTX 2080 Ti лишились соответственно 2 и 4 из 48 и 72 SM, которые есть в оригинальных GPU.

Опираясь на заявленные частоты и конфигурацию CUDA-ядер мы можем сравнить теоретическое быстродействие GeForce RTX и ускорителей поколения Pascal в 32-битных операциях с плавающей запятой. В этом отношении RTX 2070 находится в промежутке между GTX 1070 и GTX 1080. Следующая по старшинству новинка, RTX 2080, заняла место между GTX 1080 и GTX 1080 Ti, а RTX 2080 Ti, как и положено флагману, оставил GTX 1080 Ti позади.

Сказывается преимущество по количеству активных CUDA-ядер, ведь верхние значения тактовых частот Turing находятся в примерном соответствии с показателями GeForce GTX 1070/1080 и GTX 1080 Ti. Последнее само по себе приятно, если вспомнить, насколько крупнее GPU в новых видеокартах, однако NVIDIA пришлось немного понизить базовые частоты трех чипов, чтобы оставить в термопакете запас на комбинированную нагрузку с участием тензорных и RT-ядер, а TDP ускорителей (помимо старшей модели) предсказуемо увеличился.

Производитель NVIDIA
Модель GeForce GTX 1070 GeForce GTX 1080 GeForce GTX 1080 Ti GeForce RTX 2070 GeForce RTX 2080 GeForce RTX 2080 Ti
Графический процессор
Название GP104 GP104 GP102 TU102 TU104 TU106
Микроархитектура Pascal Pascal Pascal Turing Turing Turing
Техпроцесс, нм 16 нм FinFET 16 нм FinFET 16 нм FinFET 12 нм FFN 12 нм FFN 12 нм FFN
Число транзисторов, млн 7 200 7 200 12 000 10 800 13 600 18 600
Тактовая частота, МГц: Base Clock / Boost Clock 1 506 / 1 683 1 607 / 1 733 1 480 / 1 582 1 410 / 1 620 (Founders Edition: 1 410 / 1 710) 1 515 / 1 710 (Founders Edition: 1 515 / 1 800) 1 350 / 1 545 (Founders Edition: 1 350 / 1 545)
Число шейдерных ALU 1 920 2 560 3 584 2304 2944 4352
Число блоков наложения текстур 120 160 224 144 184 272
Число ROP 64 64 88 64 64 88
Оперативная память
Разрядность шины, бит 256 256 352 256 256 352
Тип микросхем GDDR5 SDRAM GDDR5X SDRAM GDDR5X SDRAM GDDR6 SDRAM GDDR6 SDRAM GDDR6 SDRAM
Тактовая частота, МГц (пропускная способность на контакт, Мбит/с) 2 000 (8 000) 1 250 (10 000) 1 376,25 (11 010) 1 750 (14 000) 1 750 (14 000) 1 750 (14 000)
Объем, Мбайт 8 192 8 192 11 264 8 192 8 192 11 264
Шина ввода/вывода PCI Express 3.0 x16 PCI Express 3.0 x16 PCI Express 3.0 x16 PCI Express 3.0 x16 PCI Express 3.0 x16 PCI Express 3.0 x16
Производительность
Пиковая производительность FP32, GFLOPS (из расчета максимальной указанной частоты) 6 463 8 873 11 340 7 465 / 7 880 (Founders Edition) 10 069 / 10 598 (Founders Edition) 13 448 / 14 231 (Founders Edition)
Производительность FP32/FP64 1/32 1/32 1/32 1/32 1/32 1/32
Пропускная способность оперативной памяти, Гбайт/с 256 320 484 448 448 616
Вывод изображения
Интерфейсы вывода изображения DL DVI-D, DisplayPort 1.3/1.4, HDMI 2.0b DL DVI-D, DisplayPort 1.3/1.4, HDMI 2.0b DisplayPort 1.3/1.4, HDMI 2.0b DisplayPort 1.4a, HDMI 2.0b DisplayPort 1.4a, HDMI 2.0b DisplayPort 1.4a, HDMI 2.0b
TDP, Вт 150 180 250 175/185 (Founders Edition) 215/225 (Founders Edition) 250/260 (Founders Edition)
Розничная цена (США, без налога), $ 349 (рекомендованная) / 399 (Founders Edition, nvidia.com) 499 (рекомендованная) / 549 (Founders Edition, nvidia.com) НД (рекомендованная) / 699 (Founders Edition, nvidia.com) 499 (рекомендованная) / 599 (Founders Edition, nvidia.com) 699 (рекомендованная) / 799 (Founders Edition, nvidia.com) 999 (рекомендованная) / 1 199 (Founders Edition, nvidia.com)
Розничная цена (Россия), руб. НД (рекомендованная) / 31 590 (Founders Edition, nvidia.ru) НД (рекомендованная) / 45 790 (Founders Edition, nvidia.ru) НД (рекомендованная) / 52 990 (Founders Edition, nvidia.ru) НД (рекомендованная) / 47 990 (Founders Edition, nvidia.ru) НД (рекомендованная) / 63 990 (Founders Edition, nvidia.ru) НД (рекомендованная) / 95 990 (Founders Edition, nvidia.ru)


Оперативная память GDDR6

Во всем семействе GeForce RTX применяются чипы памяти GDDR6 с пропускной способностью 14 Гбит/с на контакт. При этом два младших чипа имеют 256-битую, а TU102 — 384-битную шину памяти. В потребительские Turing NVIDIA устанавливает по одной микросхеме объемом 1 Гбайт на каждый 32-битный контроллер. Как следствие, объем RAM достигает 8 Гбайт в RTX 2070/2080 и 11 Гбайт в RTX 2080 Ti. Правда, в RTX 2080 Ti отключили один из двенадцати контроллеров памяти, которые есть в кремнии GP102, из-за чего вся шина памяти сжалась с 384 до 352 бит и был потерян 1 Гбайт RAM.

Что касается самой GDDR6, то новый тип микросхем имеет немного принципиальных отличий от GDDR5X и, в сухом остатке, предлагает лишь более высокие тактовые частоты при таком же стандартном напряжении питания (1,35 В). Ключевая особенность стандарта GDDR6 в том, что он подразумевает наличие в каждом чипе двух полностью независимых 16-битных каналов с собственными шинами команд и данных (в отличие от единого 32-битного интерфейса GDDR5 и псевдо-независимых каналов GDDR5X). Это открывает массу возможностей для эффективного использования пропускной способности. Ведь чем больше каналов, тем меньше данных (при должном управлении со стороны GPU) «застревает» в ожидании обновления страниц и прочих длительных операций. Кроме того, узкая 16-битная шина в два раза по сравнению с 32-битной шиной GDDR5X сокращает размер кванта данных (32 и 64 байт соответственно при характеристике Prefetch 16n), который процессор при обращении к RAM помещает в кеш второго уровня, а значит, системы кешей с длиной слова в 32 байт (судя по всему, это как раз относится к чипам NVIDIA) не заполняются «мусорными» данными и работают более эффективно.

Другой отличительной чертой стандарта GDDR6 является возможность работать в режимах DDR либо QDR (с передачей двух и четырех бит данных на цикл сигнала соответственно) при неизменной пропускной способности памяти (ПСП). Только в режиме DDR контроллеру придется поддерживать вдвое более высокую частоту шины данных и, по правде говоря, с ПСП для GDDR6 на уровне 14-16 Гбит/с на контакт частота шины данных на в 7 ГГц не кажется реальной возможностью для современных GPU.

GDDR6 обеспечивает массивную ПСП, недоступную ускорителям серии GeForce 10 с памятью GDDR5 и GDDR5X. Даже с «урезанной» шиной GeForce RTX 2080 Ti достигает 616 Гбайт/с. А это, на минуточку, больше, чем у Radeon RX Vega 64 (484 Гбайт/с), которая использует более дорогую и сложную память HBM2. Кроме того, NVIDIA продолжила развитие алгоритмов компрессии данных в шине памяти, благодаря которым эффективная ПСП GeForce RTX 2080 Ti оценивается на 50% больше (с учетом «сырой» ПСП шины GDDR6) по сравнению с GeForce GTX 1080 Ti.

Видеокарты Founders Edition, цены

Обратите внимание, что для видеокарт под маркой Founders Edition в таблице указаны не только отдельные цены, но и собственные тактовые частоты и показатели TDP. Еще в прошлом поколении карты Founders Edition, которыми NVIDIA насытила первую волну поставок и затем оставила в собственном интернет-магазине, формально не считались референсными моделями. Но в данном случае с первого дня на рынок поступит множество видеокарт оригинального дизайна, и Founders Edition станет лишь одним из равноправных предложений с заводским разгоном и качественной системой охлаждения. Собственно референсные характеристики станут ориентиром для упрощенных модификаций GeForce RTX от сторонних производителей, не претендующих на серьезный оверклокинг.

Старт розничных продаж GeForce RTX 2080 и RTX 2080 Ti назначен на 20 сентября, а прибытие RTX 2070 ожидается в следующем месяце. Но едва ли не главная новость всего анонса Turing — это возмутительные цены новинок. Если сравнивать новые видеокарты со старыми в соответствии с их положением в модельном ряду, то 70-я модель стала дороже на $150 (с $349 до $499), а 80-я — на $200 (с $499 до $699). Наценка на Founders Edition тоже возросла, до $100 за соответствующие версии RTX 2070 и RTX 2080.

Конечно, GeForce RTX обладает заведомо более высокой производительностью, не говоря о новых функциях рендеринга, но ведь в прошлые годы мы привыкли пожинать плоды прогресса «бесплатно» относительно цен уходящего поколения. Сейчас же получается, что GeForce RTX 2070 является денежным эквивалентом GTX 1080, а RTX 2080, в свою очередь, GTX 1080 Ti. При всем этом по теоретическому быстродействию без учета оптимизаций, а также тензорных и RT-вычислений, в пересчете на доллар Turing не сделал ни шага вперед по сравнению с Pascal и даже уступает последнему. Но, помня о значительной разнице между архитектурами, все-таки оставим последнее слово в этом вопросе за бенчмарками.

Что касается GeForce RTX 2080 Ti, то по цене это ни дать ни взять уровень серии TITAN, ведь рекомендованная стоимость флагмана составляет $999, а Founders Edition — $1199. В России это будет первый GeForce, который подошел к отметке в 100 тыс. рублей. На этой звонкой ноте мы прервем разговор о самих видеокартах до публикации второй части статьи с результатами тестирования и приступим к анализу архитектурных особенностей чипов Turing. Во всяком случае, если GeForce RTX вдруг не оправдает возложенных на него надежд, возможность купить ускоритель семейства GeForce 10 останется еще, как минимум до конца текущего года.

Архитектура Turing: потоковый мультипроцессор

Большая часть нововведений Turing сосредоточена внутри потокового мультипроцессора (Streaming Multiprocessor, SM). Но для начала рассмотрим архитектуру GPU, так сказать, с высоты птичьего полета. Как и в Pascal, несколько потоковых мультипроцессоров находятся внутри блока TPC (Texture Processing Cluster) вместе с PolyMorph Engine, выполняющим функции выборки вершин и тесселяции. Turing обладает таким же соотношением между числом ядер CUDA и геометрических движков, как Pascal, но сами PolyMorph Engine претерпели определенные изменения, о которых мы расскажем позже. В свою очередь, несколько TPC входят в состав наиболее крупной организационной единицы — GPC (Graphics Processing Cluster), другой частью которой является блок Raster Engine, который выполняет самые ранние стадии рендеринга: отсечение невидимых пикселов и растеризацию полигонов.

По структуре SM новая архитектура далеко ушла от Pascal и во многом повторяет Volta, что довольно неожиданно в свете стремления NVIDIA развести свои продукты по серверной и потребительской нишам. Пока мы изучим изменения, которые относятся к исполнению операций над числами с плавающей запятой одинарной точности (FP32) и не затрагивают вычислительных блоков нового типа (тензорных и RT).

В потребительских GPU семейства Pascal потоковый мультипроцессор разделен на четыре секции, каждая из которых содержит 32 ядра CUDA, снабженных собственным планировщиком и двумя портами диспетчера команд. За один такт процессора планировщик отправляет на исполнение одну инструкцию для обработки ряда данных из группы 32 независимых потоков (последняя называется warp в терминологии NVIDIA) по принципу SIMT  (Single Instruction, Multiple Threads), а блок CUDA-ядер исполняет ее также за один такт. Но благодаря второму порту диспетчера в Pascal допустимо одновременное исполнение следующей инструкции из того же warp’а на тех ядрах секции SM, которые не были заняты первой порцией данных. Таким образом, Pascal является суперскалярной архитектурой, которая наряду с потоковым параллелизмом (Thread Level Parallelism, TSP), неотъемлемым для GPU как массивно-параллельных процессоров, извлекает из нагрузки параллелизм команд (Instruction Level Parallelism, ILP).

В Volta и Turing все так же есть четыре секции на один SM, но одна секция содержит 16 ядер FP32 — вдвое меньше, чем в Pascal. Поскольку warp в модели программирования NVIDIA по-прежнему состоит из 32 потоков, разработчикам пришлось вернуться к принципу, характерному для давнишней архитектуры Fermi: блок из 16 CUDA-ядер исполняет одну инструкцию за два такта процессора. За счет уменьшенного объема SM в Volta и Turing возросло число планировщиков в пересчете на общий массив CUDA-ядер. Как следствие, GPU может генерировать больше потоков, что при благоприятном типе задач позволяет нарастить TLP, эффективно загружая вычислительные блоки.

Другой особенностью, которую Turing получил в наследство от Volta, является относительно независимая планировка потоков (Independent Thread Scheduling, ITS). В общем виде это означает, что процессор отслеживает состояние выполнения каждого потока, в то время как в Pascal такие понятия, как счетчик команд и стек вызовов, являются общими для всех потоков warp’a. Планировщики Volta и Turing позволяют по отдельности завершать, приостанавливать и заново группировать выполнение потоков — также для максимального насыщения CUDA-ядер.

Планировщик внутри секции SM теперь имеет лишь один порт диспетчера. В результате потери второго порта у Volta и Turing пострадала возможность извлекать из задачи ILP за счет отправки двух инструкций за один такт. Впрочем, архитектура GPU по-прежнему является суперскалярной, т.к. блоку CUDA-ядер в секции SM требуется два такта, чтобы выполнить инструкцию, которую за один такт отдает планировщик, а в течение следующего такта могут быть отдана еще одна, которая догрузит простаивающие ядра. Вопрос, какой тип параллелизма более выгоден для типичной работы GPU, не имеет простого ответа, но резонно предположить, что в свете общего усложнения структуры SM расход транзисторного бюджета на логику дополнительного диспетчера инженеры NVIDIA просто сочли неоправданной инвестицией.

Наконец, архитектуры Volta и Turing роднит возможность одновременного исполнения операций с вещественными (FP) и целочисленными (INT) данными. Целочисленные вычисления используются в задачах применения заранее сформированных сетей машинного обучения (Inference), но также занимают большую долю операций типичной шейдерной нагрузки (по оценке NVIDIA, на каждые 100 операций FP32 в современных приложениях приходится 36 целочисленных операций). В предшествующих архитектурах целочисленные ALU и ALU для операций с плавающей запятой связаны в пределах одного CUDA-ядра и пользовались общими путями передачи данных, поэтому весь блок ядер в секции SM может в рамках такта выполнять либо операции с плавающей запятой, либо целочисленные. В Volta и Turing целочисленные ALU выделены в собственный тип ядер, за счет чего допустима смешанная нагрузка с одновременной работой над данными двух разных форматов. Число INT- и FP-ядер в секции SM равно 16, поэтому однопортовый диспетчер инструкций, отдающий за такт по одной инструкции для обработки 32 чисел, может в течение двух тактов полностью загрузить блоки INT-и FP-ядер, каждому из которых также требуется два такта, чтобы исполнить команды. Зримым результатом отделения целочисленных ядер в Volta и Turing является сниженная с 6 до 4 циклов латентность FMA (Fused Multiply Add) — пожалуй, наиболее востребованной операции в современных GPU.

Взяв за основу шейдерный мультипроцессор Volta, разработчики Turing освободили немало транзисторов, исключив большую часть логики, выполняющей расчеты двойной точности, хотя в Turing все еще есть символическое количество ядер FP64 (два на каждый SM) для совместимости с соответствующим ПО. При этом сохранилась удвоенная пропускная способность в расчетах FP16, свойственная Volta и GP100, но урезанная в прочих чипах Pascal. Это в очередной раз говорит об уверенности NVIDIA в перспективах глубинного обучения, которое зачастую оперирует данными половинной точности, применительно к игровым продуктам. Но вместе с тем, полная поддержка FP16 позволит разработчикам активнее использовать этот формат данных в шейдерных программах.

В структуре набортной памяти графического процессора Turing вновь повторяет Volta. Здесь главным изменением новых GPU по сравнению с Pascal стало слияние кеша L1 с разделяемой памятью (Shared Memory). Разница между этими типами памяти состоит в том, что содержимое Shared Memory эксплицитно определяет код исполняемой на GPU программы, в то время как данные, попадающие в L1, процессор выбирает на свое усмотрение. Shared Memory в предыдущих архитектурах отличается более высокой пропускной способностью и относительно низкой латентностью по сравнению с L1, но Volta и Turing распространили эти преимущества на кеш первого уровня.

Известно, что Volta способна гибко регулировать соотношение объемов L1 и Shared Memory, вплоть до полного отсутствия последней. В документации NVIDIA не вполне очевидно, как это работает в Turing, но складывается впечатление, что допустимы только два варианта разбивки — 32 и 64 Кбайт из общих 96 Кбайт в пользу того или иного типа памяти. Кроме того, кеш L1 в Volta может хранить операции записи (store), но, опять таки, осталось под вопросом, есть ли такая возможность в Turing.

Объем регистрового файла во всех чипах Volta и Turing составляет 256 Кбайт на SM — столько же, сколько в Pascal, но поскольку сам SM вдвое сократили по числу ядер CUDA, общий объем регистрового файла заметно вырос. Кроме того, NVIDIA внедрила в каждой секции SM отдельный кеш инструкций L0 вместо общего для SM буфера инструкций. И, наконец, кеши второго уровня выросли до 4 Мбайт в чипах TU104/TU106 и 6 Мбайт в TU102.

Все оптимизации архитектуры, которые NVIDIA внедрила в Turing, по собственным тестам компании, повысили скорость выполнения шейдерной нагрузки на 50% по сравнению с Pascal в пересчете на ядро CUDA при равной тактовой частоте.

Тензорные ядра в архитектурах Volta и Turing

Тензорные ядра — вот еще один подарок, полученный Turing от HPC-архитектуры Volta. В своей основе тензорное ядро представляет собой группу ALU, выполняющих тензорные математические операции, а именно FMA (Fused Multiply Add) над матрицами чисел с плавающей запятой. Конкретно в архитектурах Volta и Turing тензорное ядро перемножает две матрицы половинной точности (FP16) размером 4 × 4 и складывает результат с третьей матрицей 4 × 4 (FP16 или FP32), чтобы получить финальную матрицу FP32. Такого рода вычисления используются, главным образом, в задачах машинного обучения — как для формирования глубинных нейросетей, так и для их последующего применения (Inference).

Функционально новые тензорные ядра не так уж отличаются от обычных шейдерных ALU, которые тоже способны выполнять операции FMA, лишь с той разницей, что шейдерные ALU оперируют скалярными величинами, организованными по принципу SIMT, а тензорные ядра — векторными в виде матриц. Однако тензорные ядра не могут выполнять каких-либо иные вычисления, помимо FMA, и как следствие, крайне упрощены: их компоненты размещаются с высокой плотностью на кристалле GPU и нуждаются в минимуме управляющей логики по сравнению с универсальными CUDA-ядрами. Благодаря узкой специализации одно тензорное ядро за такт процессора выполняет 64 инструкции FMA (128 FLOPS в пересчете на промежуточные операции), в то время как на шейдерных ALU целый потоковый мультипроцессор из 64 ядер CUDA, даже при условии работы с удвоенной скоростью за счет половинной точности FP16, выдает 256 FLOPS. В чипах Volta и Turing каждый SM содержит восемь тензорных ядер, а значит, если переложить задачу с CUDA-ядер на тензорные, то результатом будет не только разгрузка универсальных вычислительных ресурсов для других операций, но и четырехкратный рост быстродействия в собственно тензорных расчетах.

Более того, пусть Turing является, в первую очередь, архитектурой для графических задач, она обладает повышенной гибкостью и потенциально увеличенным быстродействием в тензорных вычислениях по сравнению с Volta за счет поддержки операций на целыми числами форматов INT8 и INT4. Подобные задачи подходят для применения нейросети (Inference), если ее математическая модель терпит квантизацию и не требует высокой точности представления данных, а скорость обработки (по сравнению с операциями FMA с результатом в формате FP16) возрастает в два и четыре раза для INT8 и INT4 соответственно.

Но как тензорные ядра можно использовать в компьютерных играх, не говоря уже конкретно о рендеринге графики? У NVIDIA есть масса идей на этот счет. Например, чрезвычайно быстрое полноэкранное сглаживание/масштабирование по алгоритму DLSS (Deep Learning Super Sampling). Тренировка нейросетей для задач такого рода выполняется на собственных серверах NVIDIA путем анализа множества кадров из конкретной игры с предельно возможной выборкой пикселов (64-кратный суперсемплинг). Затем графический процессор на клиентской машине, используя полученный профиль, выводит на экран изображение, приближенное по качеству к 64xSS.

Существует два режима работы  Deep Learning Super Sampling. В режиме максимального качества (DLSS 2x) рендеринг оригинального кадра для обработки на тензорных ядрах выполняется в целевом разрешении экрана. При однократном DLSS берется сравнительно низкое исходное разрешение (к примеру, 1440p вместо целевого 2160p), а задачей нейросети становится масштабирование кадра до полного разрешения экрана. В последнем случае влияние DLSS на быстродействие столь велико, что GeForce RTX 2080 Ti достигает двукратной разницы в быстродействии с GeForce GTX 1080 Ti — результат, недостижимый за счет грубой силы дополнительных шейдерных ALU.

Основные принципы трассировки лучей 

Большинству наших читателей не нужно рассказывать, что собой представляет трассировка лучей (Ray Tracing) в 3D-графике, но для полного понимания в контексте архитектуры Turing стоит объяснить принципиальное отличие от преобладающего в рендеринге реального времени метода растеризации. Оба подхода решают одну и ту же проблему проекции трехмерных объектов на плоский экран монитора, но делают это в противоположных направлениях. Программа растеризации, в узком смысле этого понятия, рассматривает один за другим геометрические примитивы сцены (полигоны) и определяет экранные пикселы, которые перекрывает каждый из них. Затем тем или иным из различных способов определяется цвет пиксела в соответствии с цветом соответствующего ему участка поверхности полигона.

В свою очередь, простейший алгоритм трассировки лучей (Ray Casting) начинает с плоскости экрана: через каждый пиксел из точки обзора отправляется луч, а вычислительная задача состоит в том, чтобы найти полигон, с которым он столкнется, и получить информацию о цвете поверхности в точке пересечения. Результаты обеих моделей в данном случае будут одинаковы, поскольку ни та, ни другая еще содержит информации об освещении объекта. Но все меняется, как только возникает задача эту информацию получить.

В модели Ray Tracing по уже известному принципу определяется траектория луча, отраженного от поверхности примитива. Если луч второго порядка пересекается с источником света, поверхность считается освещенной. Если обнаружено пересечение с другим примитивом, то поверхность в тени. Развитие этого алгоритма позволяет рассчитывать освещенность сколь угодно близко к физике реального мира, включая рассеянный и прямой свет, преломление лучей в прозрачной среде и т.д.

В методе трассировки лучей высокий реализм изображения достигается за счет автоматизации процесса. С другой стороны, растеризация в чистом виде просто не содержит столь же прямых и элегантных средств расчета освещения. Бесчисленные способы получить в изображении свет и тень, от простейших карт теней и вплоть до шейдерных программ, являются не более чем имитацией результата физических явлений с позиции наблюдателя, а задача их корректного применения ложится на плечи дизайнера (будь то статичная сцена, видеоролик или компьютерная игра). Можно сказать, что создание реалистичного изображения с помощью трассировки лучей — это фотография, а с помощью растеризации — рисунок. 

Повышение качества Ray Tracing вызывает лавинообразный рост вычислительной нагрузки, пропорциональный количеству отслеживаемых лучей, в то время как алгоритмы растеризации могут быть математически и логически сложны, но сравнительно нетребовательны к вычислительной мощности. Поэтому ведущим методом в рендеринге реального времени является именно растеризация, а не трассировка лучей.

RT-ядра Turing

По мере того как растут возможности графических процессоров, то и дело возникают мысли о том, что Ray Tracing в реальном времени уже не за горами. NVIDIA еще в 2009 году представила функцию трассировки лучей на CUDA-ядрах в собственном API OptiX, а на стороне AMD есть аналогичные функции в библиотеках GPUOpen. Действительно, в профессиональной сфере трассировка лучей стала распространенным классом задач GP-GPU (General Purpose GPU), но выполнение таких расчетов силами шейдерных ALU все еще не достигло приемлемого быстродействия. NVIDIA собирается взять последний рубеж за счет интеграции в железо специализированных функциональных блоков — подобно тому, как аппаратное ускорение растеризации в свое время открыло компьютерным играм дорогу в полноценное 3D.

Каждый SM в архитектуре Turing содержит RT-ядро, которое выполняет поиск пересечений между лучом и полигонами сцены. В первых алгоритмах такая задача крайне неэффективно и ресурсоемко решалась путем перебора всех геометрических примитивов, но RT-движок Turing использует общепризнанный метод оптимизации под названием Bounding Volume Hierarchy. Алгоритм BVH перед тем, как сцена будет отрисована в первый раз, с помощью CUDA-ядер сортирует полигоны объектов по вложенным друг в друга «коробкам». Таким образом, чтобы кратчайшим путем определить точку пересечения луча с поверхностью примитива, программе нужно рекурсивным образом пройти сквозь полученную древовидную структуру. В статичной сцене генерация структуры BVH выполняется один раз для всех последующих кадров, но в большинстве случаев алгоритм допускает и динамическую коррекцию в ответ на преобразования геометрии.

За счет узкой специализации RT-ядра Turing несопоставимо более эффективны в поиске пересечений луча по сравнению с шейдерными ALU. NVIDIA приводит следующие данные: GeForce GTX 1080 Ti, задействовав 10 TFLOPS вычислительной мощности (из доступных 11,3 TFLOPS) исключительно для Ray Tracing, достигает производительности 1,1 млрд лучей/с. GeForce RTX 2080 Ti с помощью 68 RT-ядер превышает отметку в 10 млрд лучей/с, при этом его шейдерные ALU остаются свободны для другой работы.

Новые шейдерные функции (Turing Advanced Shading)

Мы рассказали о ключевых особенностях архитектуры Turing, но список усовершенствований, которые NVIDIA внедрила в новые GPU, далеко не исчерпан. Помимо новых функций в рамках Direct3D feature level12_1, связанных с управлением ресурсами, архитектура приобрела несколько эксклюзивных техник исполнения шейдеров и обработки геометрии, доступ к которым открывается через NVAPI.

Mesh Shading

Одной из новых возможностей в наборе инструкций Turing является Mesh Shading — гибкий способ насытить сцену геометрическими деталями и одновременно снизить нагрузку на центральный процессор системы. Переход с API Direct3D 11 на Direct3D 12, который медленно, но неуклонно происходит в компьютерных играх, начался под лозунгом освобождения CPU от избыточной нагрузки, связанной с подготовкой вызовов на отрисовку (draw call) множества отдельных объектов (полигональных сеток, meshes). Разработчики Turing предлагают более радикальное решение.

Модель Mesh Shading представляет собой альтернативный программный конвейер обработки геометрии, который запускается не вызовом на отрисовку отдельной сетки, а списком множества сеток. Затем на его основе многопоточный алгоритм, подобный вычислительным шейдерам, генерирует набор треугольников для растеризации. Одно это устраняет бутылочное горлышко в виде быстродействия центрального процессора, но GPU также самостоятельно варьирует LOD (Level of Detail) и глубину тесселяции моделей в зависимости от их размера на экране.

Variable Rate Shading

Функция Variable Rate Shading (VRS) опирается на идеи Multi-Resolution Shading (MRS) и Lens-Matched Shading (LMS), впервые реализованные в архитектуре Pascal для VR-среды. MRS и LMS позволяют разбить экран на 16 зон, размер пикселов в которых варьирует в соответствии с кривизной линз шлема. Метод VRS действует по такому же принципу, только оперирует участками экрана размером 4 × 4 пиксела, а изменяется не разрешение, а плотность выборки пикселов для шейдерных программ. Таким образом разработчики игры могут сэкономить ресурсы GPU на рендеринге тех участков цены, которые не нуждаются в точном определении цвета пикселов: однородные, бедные деталями текстуры, размытые движением объекты, а применительно к VR с отслеживанием глаз — периферийные области зрения. В отличие от иных проприетарных функций рендеринга, разработчикам будет очень просто реализовать VRS даже в тех играх, которые были выпущены до появления Turing.

Texture Space Shading

В основе Texture Space Shading лежит догадка о том, что шейдерные программы можно применять не только к пикселам экрана после того, как сделана выборка из соответствующих им участков текстур, но и к текселам, то есть непосредственно в текстурном пространстве. Результат шейдера сохраняется в оперативной памяти как новая текстура и может быть заново использован в пределах того же кадра или одного из следующих. А если при этом в результате изменения позиции наблюдателя на экран проецируются текселы, не обработанные шейдером ранее, необходимо заново обработать только их вместо целой текстуры или всех пикселов в проекции соответствующего примитива, как происходит в стандартных шейдерных программах. Таким образом с помощью TSS можно существенно снизить шейдерную нагрузку в рендеринге стереоскопического изображения для VR, большая часть кадров для обеих глаз заполнена одними и теми же объектами и текстурами. И поскольку Texture Space Shading работает с текстурными данными, алгоритм неизбежно учитывает MIP-уровень, поэтому исполнение шейдеров на размытой копии текстуры, которая наложена на удаленный от точки зрения объект, автоматически происходит со сниженной выборкой образцов.

Multi-View Rendering

В архитектуре Pascal блоки обработки геометрии PolyMorph Engine были дополнены функцией Simultaneous Multi-Projection (SMP), за счет которой приложение может затребовать одновременную проекцию полигонов на экран с двух точек обзора, разнесенных по горизонтальной оси, и в 16 различных направлениях — главным образом для ускорения ранних этапов обработки геометрии в стереоскопическом 3D и мультимониторных системах.

В свою очередь, Multi-View Rendering (MVR) — это более гибкое расширение SMP, выполняющее за один проход проекцию полигонов с четырех произвольных точек, а количество направлений обзора по-прежнему составляет 16 на каждую точку. Технология MVR нужна в первую очередь для того, чтобы учесть при рендеринге внутреннюю геометрию VR-шлемов нового поколения с несколькими экранами и сверхшироким углом обзора, но может быть востребована и за пределами VR — например для быстрой генерации карт теней от нескольких источников света.

Гибридная модель рендеринга

Несмотря на высокую эффективность новой архитектуры в трассировке лучей, NVIDIA не призывает к полному переходу игровой графики на этот алгоритм. Более перспективно выглядит комбинированный подход, в котором RT-ядра привлекаются для таких задач, которые лучше всего решаются трассировкой лучей, а основную работу в построении изображения по-прежнему берет на себя растеризация. К примеру, растеризация с буфером глубины (z-буфером), преобладающая в играх, гораздо быстрее отсекает невидимые поверхности на раннем этапе рендеринга и полностью заменяет этап лучей первого порядка в RT. Затем при помощи лучей второго порядка можно получить любой набор эффектов освещения: начиная с дозированного формирования теней и отражений и заканчивая полным моделированием физически достоверного освещения. Трассировка лучей также является частью библиотек GameWorks для симуляции позиционного звука. Важную роль в алгоритмах RT сыграют тензорные ядра, за счет которых алгоритм нейросети сможет компенсировать нехватку плотности лучей путем аппроксимации недостающих результатов.

Для оценки производительности в рамках гибридной модели рендеринга NVIDIA предложила формулу, которая складывает пиковую пропускную способность (в TFLOPS) различных блоков GPU (ядра FP32, INT32, тензорные и RT-ядра) в показатель RTX-OPS. При этом учитывается, что в реальных приложениях GPU не может быть полностью загружен в силу ограничений TDP, конкуренции блоков за ПСП и другие общие ресурсы, а также практической необходимости задействовать в коде те или иные функции. Соответственно, слагаемым формулы RTX-OPS назначены веса в соответствии с тем, какую часть времени рендеринга кадра занимает определенный тип вычислений. К примеру, ядра FP32 активны в течение 80% времени кадра, и на примере GeForce RTX 2080 Ti Founders Edition их вклад в общее быстродействие составляет 14 TFLOPS × 0,8 = 11,2 Tera RTX-OPS.

Описанная математика опирается на массу предположений о том, как распределяется гибридная нагрузка в идеальном графическом движке, откалиброванном под соотношение блоков архитектуры Turing. А для расчета долей времени кадра и, соответственно, весов, назначенных слагаемым формулы, взят эталонный ускоритель (предположительно, GeForce RTX 2080 Ti), быстродействие которого не упирается ни в один из рассматриваемых типов ядер. Таким образом, формула RTX-OP не претендует на оценку производительности в реальных играх и годится лишь для сравнения между собой видеокарт семейства Turing. На референсных частотах GeForce RTX 2070, 2080 и 2080 Ti оцениваются в 42, 57 и 76 Tera RTX-OPS соответственно.

Модель гибридного рендеринга на архитектуре Turing уже доступна разработчикам через библиотеки трассировки лучей в составе Direct3D 12 (DXR) или OptiX — собственного API NVIDIA. Также ведутся работы по интеграции Ray Tracing в открытый стандарт Vulkan. На данный момент о поддержке функций трассировки лучей в адаптерах GeForce RTX объявили 11 игровых проектов, среди которых главными вестниками новой технологии станут Battlefield V, Metro Exodus и Shadow of the Tomb Raider. Намного больше игр присоединились к инициативе DLSS и со временем получат собственные профили нейросетей в драйвере NVIDIA.

Игра Ray Tracing Deep Learning Super Sampling (DLSS) Turing Advanced Shading
Ark: Survival Evolved   Да  
Assetto Corsa Competizione Да    
Atomic Heart Да Да  
Battlefield V Да    
Control Да    
Darksiders III   Да  
Dauntless   Да  
Deliver Us The Moon: Fortuna   Да  
Enlisted Да    
Fear the Wolves   Да  
Final Fantasy XV   Да  
Fractured Lands   Да  
Hellblade: Senua's Sacrifice   Да  
Hitman 2   Да  
In Death     Да
Islands of Nyne   Да  
Justice Да Да  
JX3 Да Да  
KINETIK   Да  
MechWarrior 5: Mercenaries Да Да  
Metro Exodus Да    
Outpost Zero   Да  
Overkill's The Walking Dead   Да  
PlayerUnknown's Battlegrounds   Да  
ProjectDH Да    
Remnant: From the Ashes   Да  
SCUM   Да  
Serious Sam 4: Planet Badass   Да  
Shadow of the Tomb Raider Да    
Stormdivers   Да  
The Forge Arena   Да  
We Happy Few   Да  
Wolfenstein II: The New Colossus     Да

Промежуточные выводы

В результате подробного изучения архитектуры Turing и видеокарт семейства GeForce RTX 2080 Ti остается лишь повторить то, с чего мы начали эту статью. Похоже, NVIDIA и вправду удалось пусть не в одночасье поменять облик 3D-рендеринга в реальном времени, но, по крайней мере, обеспечить уверенный старт направлению, в котором пойдет дальнейшее развитие компьютерных игр. Теряет силу преобладающая парадигма рендеринга в реальном времени, которая  зиждется на гибкой архитектуре множества программируемых вычислительных ядер. NVIDIA сделала ставку на принципиально иные алгоритмы, которые не могут обойтись без узкоспециализированного железа.

Дело не только в том, как трассировка лучей преображает графику, но и в том, что в долговременной перспективе борьба за сохранение закона Мура рано или поздно будет проиграна не только центральными процессорами, но и GPU. Переход к более эффективной архитектуре нужно совершить заранее, чтобы подготовиться к этому моменту. Ведь перемены такого масштаба не случаются быстро. Вспомните хотя бы, сколько лет понадобилось играм, чтобы начать использовать шейдеры. Но для трассировки лучей все сложилось как нельзя удачно. Новые процессоры обладают более чем достаточным быстродействием для таких задач и появились в условиях поддержки со стороны разработчиков API и игровых движков. А производителям других GPU и игровых консолей придется тоже рано или поздно объединиться с NVIDIA в развитии этих технологий.

Впрочем, не будем забывать, что большинство игр за время жизни семейства GeForce RTX 20 не смогут использовать его новые возможности, а цены передового железа NVIDIA как никогда высоки. Только тесты в реальных играх покажут, как GeForce GTX 2080 Ti справляется с вызовами сегодняшнего дня. Продолжение следует 19 сентября: не пропустите вторую, практическую часть этого обзора.

Автор: Валерий Косихин