Якщо у мене багато текстур (скажімо, 5+ карт) прив’язані до однієї і тієї ж одиниці текстури, чи це працює гірше для кешу, ніж якщо б у мене було лише 2 або 3 текстури?
Якщо у мене багато текстур (скажімо, 5+ карт) прив’язані до однієї і тієї ж одиниці текстури, чи це працює гірше для кешу, ніж якщо б у мене було лише 2 або 3 текстури?
Відповіді:
Лише додаючи відповідь imallett , правда, що збільшення кількості доступу до різних текстурних даних у шейдері призведе до посилення тиску на кеш-пам'ять GPU, але є кілька інших факторів, які можуть суттєво вплинути на ефект. Це також можливо ускладнюється тим, що, як і кеші процесора, в графічному процесорі може бути кілька шарів кешу, тобто. Текстурна одиниця <= L0 <= L1 <= ..Пам'ять
Якщо у вас є сцена з мінімізацією даних текстур, будь то через перспективу або просте масштабування, і ви не використовуєте MIP-зіставлення, ви отримаєте згладжування. Це не просто збирається створити візуальні артефакти; велика ймовірність, що це буде проблема продуктивності.
Як тільки у вас з'явиться псевдонім, доступ до тексту до тексту стане невідповідним, що не лише закінчить обробку кеш-пам'яті, але й введе багато "розривів сторінок" DRAM (правильніше, розривів рядків), що може дорого коштувати. MIP-картографування допомагає знизити неузгодженість.
Можливо, трохи очевидний варіант, але якщо ви можете використовувати стиснення текстури (наприклад, DXTn | ETC * | PVRTC * | тощо), орієнтовану від 8bpp до, скажімо, 2bpp, ви можете значно підвищити ефективність пропускної здатності / кешу пам'яті на коефіцієнти від 4х до 16х. Тепер я не можу говорити для всіх графічних процесорів, але деякі схеми стиснення текстури (наприклад, перераховані вище) настільки прості для декодування в апаратному забезпеченні, що дані можуть залишатися стиснутими протягом усієї ієрархії кешу і лише декомпресуватися в блок текстури, таким чином ефективно помножуючи розмір цих кешів.
Очевидно, що деякі дані, наприклад, цілі візуалізації, використовувані як текстурні дані в наступних візуалізації, не можуть використовувати стиснення текстури. Коли ви можете, використовуйте найменший формат пікселів, який буде виконувати цю роботу, тобто якщо RGB 32 / 16bpp (A) буде робити, не використовуйте плаваючі формати 4x32!
Це дещо пов'язане з прикладом псевдоніму, який викладений вище, але ми бачили випадки, коли створюються великі цілі візуалізації, але потім лише дуже рідко вибірки. Рядки кеша, будь то в процесорах чи графічних процесорах, досить довгі, тому якщо ви використовуєте лише один піксель у кожній лінії кешу, ви будете витрачати гроші на передачу.
Крім того, стиснуті текстури WRT, вони досягають стиснення за рахунок ефективного обміну даними між місцевим регіоном текстолів. Якщо у вас немає узгодженого доступу, окрім зниження пам’ятки пам’яті, стискання, ймовірно, не допоможе.
Не стільки проблема кешу (ну, крім випадків, коли обчислюваний доступ є досить невідповідним), але доступ до текстури, який не визначається безпосередньо УФ-координатами, що надається вершинами, може бути повільнішим, ніж ті, що визначені безпосередньо.
Хоча я підозрюю, що більшість фактур в наші дні зберігатимуться в черепичному або мортоноподібному (він же Twiddled / Swizzled) порядку (або навіть у поєднанні обох), деякі текстури все ще можуть бути в порядку сканування, що означає, що обертання текстура, ймовірно, призведе до значної кількості пропусків кешу / розривів сторінки. На жаль, я не знаю, як визначити, якщо певний формат влаштований таким чином.
(Для фонового читання, спробуйте Блінн " Правда про картографування текстур" . FWIW, зробивши кілька кроків далі, використовував текстури подвійного порядку (тобто замовлення Мортона) принаймні в деяких програмних засобах раннього ПК ).
Відповідь залежить від того, що ви маєте на увазі. Сучасне обладнання (наприклад, з невмілими текстурами) насправді не надто переймається тим, скільки текстур "пов'язане". Справжнє питання - скільки ви використовуєте .
Текстури, як правило, зберігають дані в кешований спосіб (я вважаю, крива Мортона). Якщо ви використовуєте більше текстур, ви отримаєте більше пропусків кешу, оскільки зараз текстури конкурують між собою за простір.
Це дійсно просто зводиться до відомого, давнього евристичного програмування шейдерного режиму: текстові дотики повільні; не використовуйте занадто багато