Скільки значень Direct / Compute / Copy Queues мають значення?


11

DirectX 12 відкриває черги команд для будь-якої графіки (називається "Прямий"), обчислює або копіює завдання. З точки зору наданої функціональності, кожен з них є супернабір наступного. У специфікації зазначено, що черги команд можуть виконуватися пристроєм одночасно. Однак API жодним чином не обмежує кількість черг команд (принаймні, я не знаю жодних обмежень).

Мабуть, різні постачальники справляються з цим дуже різними:

  • В останній презентації Intel (слайд 23) Intel заявляє, що в даний час їхні графічні процесори не в змозі паралельно працювати з Graphics & Compute і що система копіювання має слабку пропускну здатність. Вони не рекомендують використовувати декілька черг графіки / обчислень.
  • AMD давно почав рекламувати використання черг / "асинхронних шейдерів", починаючи з мантії та поточних генконсолей. Є також деякі розробники ( приклад ), які підтверджують значне підвищення продуктивності, паралельно виконуючи обчислювальні та графічні завдання.
  • Останнім часом суєта з приводу того, що Nvidia не підтримує асинхронний шейдер в апараті: Використання окремої графіки та обчислювальної черги одразу робить все повільніше, що вказує на емуляцію драйвера. З іншого боку, паралельні операції з копіюванням підтримуються CUDA дуже давно, що дає зрозуміти, що двигун DMA може працювати незалежно.

Чи є спосіб вирішити під час виконання, якщо доцільно призначати CommandLists до кількох CommandQueues замість однієї? (враховуючи, що колишній випадок не передбачає особливих витрат на техніку)

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


1
Я не думаю, що існує якийсь змістовний спосіб зробити такий виклик рішення, окрім перевірки того, хто робить GPU. Зрештою, є більше факторів, ніж просто "може апаратне виконання команд з декількох черг одночасно", і D3D12 абстрагує ці деталі. Насправді D3D12 навіть не розрізняє апаратне забезпечення, яке може виконувати черги одночасно, і те, що може робити це послідовно, документи просто кажуть, що їх абстракція дозволяє одночасно виконувати.
MJP

1
Гарне питання ! Я також вважаю, що було б спеціально отримати perf для виконання обчислень та затінення одночасно. можливо, виграш може статися завдяки тим самим фактам, що робить гіпертодію якось швидше. операції перемежування, коли одні підрозділи зайняті для іншої черги. як шейдери, забиваючи одиниці текстури, які не використовуються на етапі обчислення, який сам забиває FPU або DPU.
v.oddou

Хм занадто погано. Можливо, тоді "окрім перевірки того, хто робить графічний процесор, ні", вже вважається відповіддю, якщо його більше немає. Прочитавши всі ці маркетингові матеріали AMD, я радий почути, що я не один з моєю плутаниною.
Wumpf

1
Ви знаєте лише принести трохи ваги на важливість (фактично неважливість) цієї справи. У PS4 SDK є помилка, яка не дозволяє випромінювати будь-яку іншу чергу, крім черги 0. Я думаю, якби це було настільки важливо, воно було б виправлене швидше.
v.oddou

Відповіді:


1

Додайте свою заявку за допомогою послідовності тестування, перевіряючи фактичну платформу. (Можливо, відповідь на багато питань я думаю ...)

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

"... черги команд можуть одночасно виконуватись пристроєм ..."

Ключове слово МОЖЛИВО. Я не бачу жодної причини, чому будь-який продавець би накрутив це. Зрештою, саме постачальник платформи (Intel / AMD / Nvidia) відповідає за те, щоб зробити вас досить хорошим драйвером, щоб ви не розглядали питання про переключення постачальника. Якщо у них є "проблема ноу" з цією функціональністю (яка, до речі, не має функціонального значення, а лише продуктивність), вони також повинні вирішити це, використовуючи те, що вони знають. Я маю на увазі, щоб плакати вголос, запас - це те, що вони вже реалізували; синхронне виконання.

Обладнання достатньо вуду, як і для нас, розробників.


GCN AMD буде виконувати графіку та обчислювати одночасно, навіть коли обидва випускаються у графічну чергу, але, як правило, не через декілька буферів команд (кілька дзвінків малювання можуть бути навіть схематичними). Драйвер (або додаток - я думаю, в DX12 або Vulkan) повинен перевірити наявність даних і заблокувати між малюнком (графікою) і відправленням (обчислення), якщо це потрібно. Кілька командних черг, ймовірно, будуть корисні, якщо у вас є обчислення, які є справді асинхронними від графіки (як фізика для наступного кадру), але я не маю прямого досвіду з цим.
Даніель М Гессел
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.