У последних архитектур GPU от AMD и NVIDIA есть общая черта: производители не устают рассказывать о новых функциях, но при этом тактично умалчивают детали реализации непосредственно самих потоковых процессоров. Причина понятна: компании не желают делиться с конкурентами улучшениями на аппаратном уровне, которые довольно важны для общего увеличения эффективности. Тем более что тема увеличения эффективности стояла очень остро, так как несколько лет AMD и NVIDIA приходилось довольствоваться 28-нм техпроцессом.
Дэвид Кантер (David Kanter) из Real World Tech является признанным экспертом в сфере GPU, он смог более подробно показать, какие изменения внесла NVIDIA в архитектуры Maxwell и Pascal по сравнению с Fermi и Kepler. Сама NVIDIA при объявлении первого поколения Maxwell указала прирост производительности шейдеров 35%, в случае перехода на Pascal производительность шейдеров не изменилась, если не считать преимущества перехода с 28-нм на 16-нм техпроцесс. В любом случае, будет интересно узнать причину подобного прироста производительности.
По всей видимости, NVIDIA для архитектур Maxwell и Pascal использовала так называемый тайловый рендеринг или растеризацию (Tile Based Rendering или Tile Based Rasterization). Тайловый рендеринг – технология не новая, она не является эксклюзивом NVIDIA. Imagination Technology или ARM уже давно опираются на Tile Based Rendering в графических ядрах PowerVR и Mali. Концепция Tile Based Rendering является противоположностью рендерингу Immediate Mode Rendering. Процесс растеризации IMR выполняется для всего кадра, в случае же TBR кадр разделяется на множество прямоугольных тайлов, и процесс растеризации выполняется уже отдельно для тайлов. Как правило, тайлы имеют размер 16x16 или 32x32 пикселей. Подобная параллелизация нагрузки отлично подходит для современных GPU с тысячами потоковых процессоров. Кроме того, у Immediate Mode Rendering довольно высокие требования к пропускной способности памяти.
У тайлового рендеринга имеется подвид под названием TBDR (Tile Based Deferred Rendering) или отложенный тайловый рендеринг. Он использовался, например, видеокартами 3dfx. Компания 3dfx приобрела технологию у Gigapixel за 150 млн. долларов США, поскольку чип GP-1 в 90-х годах привлек к себе немало внимания. Годами позже NVIDIA купила производителя видеокарт Voodoo 3dfx, и данное вложение оправдало себя в будущем.
Но у Tile Based Rendering есть и недостатки. Почти все игры и другие приложения оптимизируются под режим Immediate Mode Rendering. Поэтому с архитектурами Maxwell и Pascal NVIDIA пришлось пойти на ряд хитростей, чтобы тайловый рендеринг работал эффективно. Среди них – специальный код DirectX, управляющий растеризацией треугольников. Кроме использования Tile Based Rendering остальная часть графического конвейера осталась прежней. К ней относится тесселяция, геометрия, шейдеры и т.д.
Кроме NVIDIA тайловый рендеринг используют Imagination Technology и ARM. Он применялся и Intel в GPU Larabee. У приставок Microsoft Xbox 360 и Xbox One имеется 10 или 32 Мбайт памяти eDRAM/eSRAM. Ее все же недостаточно, чтобы хранить полный кадр. Поэтому встроенная на чип память (кэш) используется для хранения тайлов при использовании Tile Based Rendering, без которого не обойтись в случае 4x MSAA при разрешениях 720p или 1080p.
Схожий метод использует и NVIDIA. Пропускная способность памяти стала очень важным фактором, влияющим на производительность современных GPU. AMD и NVIDIA работают над тем, чтобы реализовать более эффективные схемы сжатия памяти, чтобы сэкономить пропускную способность. Но лучший способ экономии – отсутствие передаваемых данных, этого как раз позволяет добиться Tile Based Rendering. Соответствующие данные должны храниться во внутренней памяти GPU, поэтому и кэш L2 стал большего объема. С архитектурой Kepler NVIDIA считала достаточным 256 кбайт, у Maxwell кэш был увеличен до 2.048 кбайт.
Меньшее число операций чтения и записи в памяти приводит к увеличению эффективности энергопотребления. Таким образом, Tile Based Rendering внес свой вклад в снижение энергопотребления архитектур Maxwell и Pascal.
К сожалению, NVIDIA при объявлении архитектур Maxwell и Pascal не стала указывать подробностей, в том числе и использование Tile Based Rendering. Поэтому прошло несколько лет, прежде чем аналитики, в том числе и Дэвид Кантер, сделали соответствующее открытие. Программу, которая использовалась для анализа, можно найти на GitHub. Впрочем, Tile Based Rasterization – лишь небольшая часть улучшений, которые внесла NVIDIA в свою архитектуру. Большая их часть остается скрытой.