Чи погано використовувати багато текстурних карт для кешування?


10

Якщо у мене багато текстур (скажімо, 5+ карт) прив’язані до однієї і тієї ж одиниці текстури, чи це працює гірше для кешу, ніж якщо б у мене було лише 2 або 3 текстури?

Відповіді:


16

Лише додаючи відповідь imallett , правда, що збільшення кількості доступу до різних текстурних даних у шейдері призведе до посилення тиску на кеш-пам'ять GPU, але є кілька інших факторів, які можуть суттєво вплинути на ефект. Це також можливо ускладнюється тим, що, як і кеші процесора, в графічному процесорі може бути кілька шарів кешу, тобто. Текстурна одиниця <= L0 <= L1 <= ..Пам'ять

Уникайте спотворення -> Використовуйте MIP-карти

Якщо у вас є сцена з мінімізацією даних текстур, будь то через перспективу або просте масштабування, і ви не використовуєте MIP-зіставлення, ви отримаєте згладжування. Це не просто збирається створити візуальні артефакти; велика ймовірність, що це буде проблема продуктивності.

Як тільки у вас з'явиться псевдонім, доступ до тексту до тексту стане невідповідним, що не лише закінчить обробку кеш-пам'яті, але й введе багато "розривів сторінок" DRAM (правильніше, розривів рядків), що може дорого коштувати. MIP-картографування допомагає знизити неузгодженість.

Стиснення текстури

Можливо, трохи очевидний варіант, але якщо ви можете використовувати стиснення текстури (наприклад, DXTn | ETC * | PVRTC * | тощо), орієнтовану від 8bpp до, скажімо, 2bpp, ви можете значно підвищити ефективність пропускної здатності / кешу пам'яті на коефіцієнти від 4х до 16х. Тепер я не можу говорити для всіх графічних процесорів, але деякі схеми стиснення текстури (наприклад, перераховані вище) настільки прості для декодування в апаратному забезпеченні, що дані можуть залишатися стиснутими протягом усієї ієрархії кешу і лише декомпресуватися в блок текстури, таким чином ефективно помножуючи розмір цих кешів.

Розмір даних

Очевидно, що деякі дані, наприклад, цілі візуалізації, використовувані як текстурні дані в наступних візуалізації, не можуть використовувати стиснення текстури. Коли ви можете, використовуйте найменший формат пікселів, який буде виконувати цю роботу, тобто якщо RGB 32 / 16bpp (A) буде робити, не використовуйте плаваючі формати 4x32!

Рідкий доступ

Це дещо пов'язане з прикладом псевдоніму, який викладений вище, але ми бачили випадки, коли створюються великі цілі візуалізації, але потім лише дуже рідко вибірки. Рядки кеша, будь то в процесорах чи графічних процесорах, досить довгі, тому якщо ви використовуєте лише один піксель у кожній лінії кешу, ви будете витрачати гроші на передачу.

Крім того, стиснуті текстури WRT, вони досягають стиснення за рахунок ефективного обміну даними між місцевим регіоном текстолів. Якщо у вас немає узгодженого доступу, окрім зниження пам’ятки пам’яті, стискання, ймовірно, не допоможе.

Залежний текст читає

Не стільки проблема кешу (ну, крім випадків, коли обчислюваний доступ є досить невідповідним), але доступ до текстури, який не визначається безпосередньо УФ-координатами, що надається вершинами, може бути повільнішим, ніж ті, що визначені безпосередньо.

Черепиця / Мортон VS Штрихові текстури

Хоча я підозрюю, що більшість фактур в наші дні зберігатимуться в черепичному або мортоноподібному (він же Twiddled / Swizzled) порядку (або навіть у поєднанні обох), деякі текстури все ще можуть бути в порядку сканування, що означає, що обертання текстура, ймовірно, призведе до значної кількості пропусків кешу / розривів сторінки. На жаль, я не знаю, як визначити, якщо певний формат влаштований таким чином.

(Для фонового читання, спробуйте Блінн " Правда про картографування текстур" . FWIW, зробивши кілька кроків далі, використовував текстури подвійного порядку (тобто замовлення Мортона) принаймні в деяких програмних засобах раннього ПК ).


8

Відповідь залежить від того, що ви маєте на увазі. Сучасне обладнання (наприклад, з невмілими текстурами) насправді не надто переймається тим, скільки текстур "пов'язане". Справжнє питання - скільки ви використовуєте .

Текстури, як правило, зберігають дані в кешований спосіб (я вважаю, крива Мортона). Якщо ви використовуєте більше текстур, ви отримаєте більше пропусків кешу, оскільки зараз текстури конкурують між собою за простір.

Це дійсно просто зводиться до відомого, давнього евристичного програмування шейдерного режиму: текстові дотики повільні; не використовуйте занадто багато

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.