DirectX 12 відкриває черги команд для будь-якої графіки (називається "Прямий"), обчислює або копіює завдання. З точки зору наданої функціональності, кожен з них є супернабір наступного. У специфікації зазначено, що черги команд можуть виконуватися пристроєм одночасно. Однак API жодним чином не обмежує кількість черг команд (принаймні, я не знаю жодних обмежень).
Мабуть, різні постачальники справляються з цим дуже різними:
- В останній презентації Intel (слайд 23) Intel заявляє, що в даний час їхні графічні процесори не в змозі паралельно працювати з Graphics & Compute і що система копіювання має слабку пропускну здатність. Вони не рекомендують використовувати декілька черг графіки / обчислень.
- AMD давно почав рекламувати використання черг / "асинхронних шейдерів", починаючи з мантії та поточних генконсолей. Є також деякі розробники ( приклад ), які підтверджують значне підвищення продуктивності, паралельно виконуючи обчислювальні та графічні завдання.
- Останнім часом суєта з приводу того, що Nvidia не підтримує асинхронний шейдер в апараті: Використання окремої графіки та обчислювальної черги одразу робить все повільніше, що вказує на емуляцію драйвера. З іншого боку, паралельні операції з копіюванням підтримуються CUDA дуже давно, що дає зрозуміти, що двигун DMA може працювати незалежно.
Чи є спосіб вирішити під час виконання, якщо доцільно призначати CommandLists до кількох CommandQueues замість однієї? (враховуючи, що колишній випадок не передбачає особливих витрат на техніку)
Хоча я легко бачу, як корисно виконувати операції з пам’яттю паралельно обчислювальній / графічній операціям, це вважає мене як надмірно складним для паралельного запуску декількох обчислювальних і графічних процесів (якщо немає великих переваг для персоналу). Мені також не зрозуміло, як це все одно може призвести до значно кращих показників; за винятком патологічних випадків, коли багато невеликих послідовних завдань не здатні генерувати достатнє навантаження GPU.