Як працює кеш текстури, враховуючи кілька шейдерних одиниць


11

Сучасні графічні процесори мають багато блоків паралельного затінення. Я хотів би знати, як кеш текстури керується в цьому сценарії.

Відповіді:


14

На верхньому рівні GPU підрозділяється на ряд шейдерних ядер. Невеликий графічний процесор у ноутбуці чи планшеті може мати лише декілька ядер, в той час як високоякісний графічний процесор може мати десятки.

Крім шейдерних стрижнів є також текстурні одиниці. Вони можуть бути згруповані разом з однією текстурною одиницею на одне ядро ​​шейдера або однією текстурною одиницею, поділеною між двома або трьома шейдерними ядрами, залежно від GPU.

Весь чіп розділяє один кеш L2, але різні одиниці матимуть окремі кеші L1. Текстурні блоки мають кешові текстури, а шейдерні блоки мають кеші для інструкцій та констант / уніформи, а може бути і окремий кеш для даних буфера, залежно від того, буферні навантаження є окремим шляхом від текстурних навантажень чи ні (залежить від архітектури GPU).

Текстурні блоки працюють незалежно та асинхронно від шейдерних ядер. Коли шейдер виконує зчитування текстури, він надсилає запит до блоку текстур через невелику шину між ними; Шейдер може продовжувати виконувати, якщо це можливо, або він може призупинитися і дозволити виконувати інші нитки шейдера, поки він чекає, коли текстура прочитає тексту.

Текстурна одиниця збирає купу запитів і виконує адресацію математики на них - вибираючи мип-рівні та анізотропію, перетворюючи УФ-сигнали в текстові координати, застосовуючи режими затискання / загортання і т.д. ієрархія кеша, так само, як читання пам'яті працює на процесорі (спочатку подивіться в L1, якщо не там, то L2, то DRAM). Якщо багато запитуючих текстур, що очікують, всі хочуть однакових або розташованих поруч текстів (як це часто робиться), то ви отримуєте тут велику ефективність, оскільки ви можете задовольнити багато очікувані запити лише за допомогою декількох транзакцій пам'яті. Усі ці операції є конвеєрними, тому, хоча блок текстури чекає пам’яті на одній партії, він може робити математику адресації для іншої партії запитів тощо.

Після повернення даних, блок текстури декодує стислі формати, за необхідності виконує перетворення sRGB та фільтрування, а потім повертає результати до ядра шейдера.


1
Дякую! Це було дуже корисно. Редагування констант / рівномірний кеш. Чи є якісь поради, крім точності (середня, низька), які я міг би використати для поліпшення співвідношення кількості кешів уніформи? Чи має порядок, в якому я декларую обмундирування, якісь зміни (як щодо упаковки більш щільно)?
Феліпе Ліра

2
@PhilLira Упаковка може змінити значення, так. Компілятор вставить прокладки, щоб запобігти розбиванню векторів на 16-байтові межі, тому постарайтеся уникнути цього. Я не думаю, що mediump / lowp насправді робить що-небудь на уніформах, принаймні, на настільних графічних процесорах (можливо, це і на мобільних). Я б не переймався надто однорідним співвідношенням кешу. Це вкрай рідко, якщо взагалі, вузьке місце.
Натан Рід
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.