Чому програмований трубопровід (GLSL) швидший, ніж фіксований трубопровід?


27

Тому я навчаю себе GLSL і намагаюся з'ясувати, чому це, мабуть, швидше, ніж конвеєр з фіксованою функцією.

Причина у мене виникає в тому, що, наскільки я розумію, створені вами шейдери замінюють ділянки трубопроводу, які були там раніше. Отже, як просто надання вашої власної версії прискорює роботу?

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

Я правильно це розумію?


Ви запитуєте, чи швидше створити власні версії існуючих функцій чи швидше вивантажити функції, які ви розраховували на процесорі?
MichaelHouse

Я знайшов допис на gamedev.net, який відповідає на мої запитання.
Joey Green

2
Розумію. Ви повинні опублікувати відповідь про це тут, щоб інші могли отримати користь. Можливо, в процесі уточнення вашого питання.
MichaelHouse

@ joey-green, будь ласка, зв’яжіть тут gamedev.net . Буду корисний людям, які натрапляють на це питання.
Куазі Ірфан

1
Щоб більше плутати питання, в моїх тестах фіксований трубопровід може бути фактично швидшим, ніж шейдери, принаймні у простих випадках; дивіться sol.gfxile.net/instancing.html
Jari Komppa

Відповіді:


27

Створені вами шейдери не стануть вашою власною версією конвеєра з фіксованою функцією (FFP), а власними операціями, що управляють вершиною та пікселями, для досягнення чогось крутого та складного.

Багато речей, які ви робите через програмований конвеєр (ПП), працюватимуть швидше, ніж можливі їх виконання FFP, оскільки ПП зменшує кількість пропусків або кількість магії комбінатора та кубічної карти, необхідної для надання цих гіпотетичних речей у ПЗМ.

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

Загалом, ПП перетворюється повільно і неможливо на швидке і можливе. Але якщо ви вирішите написати шейдер для реалізації тих же алгоритмів, які використовуються у FFP, ви дізнаєтесь, що FFP буде трохи швидшим, оскільки він дуже оптимізований апаратно.


1
Приємна відповідь ... +1.
Амір Заде

@Green Не впевнений у цьому. Якось пропускає суть. Відповідь Килотана набагато більше відповідає фактичному питанню.
Кріс каже, що повернеться до Моніки

14

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

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


1

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


1

Саме так, ваші шейдери замінюють частини трубопроводу. Але часто ваші шейдери спеціалізуються на конкретному ефекті, якого ви хочете досягти, і не обробляєте будь-яку можливу особливу функцію, яка може бути активована, тому є простішою, ніж шейдер, що імітує повний конвеєр з фіксованою функцією. Тоді як шлях з фіксованою функцією повинен враховувати багато речей і функцій OpenGL, які ви, можливо, просто не хочете використовувати (або про них навіть не чули).

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


"Що, мабуть, трапляється при використанні конвеєра з фіксованою функцією, це те, що ваш драйвер просто завантажує власні спеціальні шейдери, які реалізують шляхи фіксованої функції." .. ти впевнений у цьому? Чи можете ви надати будь-який надійний ресурс? Спасибі.
Куазі Ірфан

@iamcreasy У мене немає надійного джерела (отже, ймовірно), мушу визнати. Але я сильно сумніваюся, що на сьогоднішній день відеокарти (які є лише безліччю невеликих процесорів), все ще мають спеціальне обладнання для обчислення освітлення або обчислення туману. Натомість, швидше за все, вони просто завантажують попередньо складені програми для цього в конкретні етапи шейдерів (чи вони надходять з драйвера або з якихось ROM-накопичувачів, я не знаю).
Кріс каже, що відбудеться Моніка

@iamcreasy відповідно до вікі nouveau nouveau.freedesktop.org/wiki/CodeNames , фіксований конвеєр видалено в GeForce 6xxx.
Брудне iCE

"Що, мабуть, трапляється при використанні конвеєра з фіксованою функцією, це те, що ваш драйвер просто завантажує власні спеціальні шейдери, які реалізують шляхи фіксованої функції." Правда. "Але вони можуть бути дуже складними, щоб забезпечити кожну функцію фіксованої функції трубопроводу." Хороший драйвер генерує шейдери лише для функцій, які ви включили.
Кріс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.