Command queues
Моя статья по асинхронным очередям на GPU.
Показаны async compute, ascync transfer очереди для дискретных GPU и только async compute для мобильных.
Демо позволяет покрутить ползунки и увидеть как меняется производительность.
Особенности на Mac M1:
* на
* на
На
#gpu_sync #vk #dx #metal
Моя статья по асинхронным очередям на GPU.
Показаны async compute, ascync transfer очереди для дискретных GPU и только async compute для мобильных.
Демо позволяет покрутить ползунки и увидеть как меняется производительность.
Особенности на Mac M1:
* на
Metal
получается более +25% при использовании Double buffering
, без него не параллелится.* на
MoltenVk
async compute наоборот дает потерю до 10%.Intel GPU
на dx12
поддерживает async compute несмотря на то, что он не поддерживается в железе, и дает до +50%, а на Vulkan
разницы нет, похоже что драйвер на dx12
хорошо эмулирует очереди.На
Android
девайсах так и не получилось распараллелить, хотя для Mali GPU
есть примеры, где получается до +10%.#gpu_sync #vk #dx #metal
Особенности шедулера в NVidia
1. Работает 2 очереди, зеленое - пиксельный шейдер, оранжевое - асинхроный компьют шейдер. На NVidia когда активна графическая очередь, на асинхронную компьют очередь выделяется не более 30% варпов.
2. По какой-то причине графическая очередь вытесняет компьют очередь.
3. Заканчивается рендер пасс и начинается обновление юниформ для следующего рендер пасса. Небольшой всплеск похож на рендеринг до фрагментного шейдера, который ждет обновление юниформ.
Барьер никак не затрагивает компьют очередь, асинхронный компьют как раз и нужен чтобы заполнять такие пустоты, но запуск шейдеров не происходит. Как и в начале (1) шедулер раскидывает графику по всем варпам и только потом добавляет к ним асинхронный компьют.
4. Начинаются короткие рендер пассы, разделенные барьерами. При этом на компьют выделяется не более 30% варпов, даже когда часть варпов простаивает (светло-сервый).
5. При более долгом простое (полная остановка графической очереди), компьют очередь занимает более 30%.
В итоге обновление юниформ буфера между рендер пассами может вызвать простой ГП на 0.3мс и даже асинхронные очереди не заполняют простаивающие варпы.
Более правильный способ - обновлять юниформы один раз в начале кадра.
#gpu_sync #nvidia
1. Работает 2 очереди, зеленое - пиксельный шейдер, оранжевое - асинхроный компьют шейдер. На NVidia когда активна графическая очередь, на асинхронную компьют очередь выделяется не более 30% варпов.
2. По какой-то причине графическая очередь вытесняет компьют очередь.
3. Заканчивается рендер пасс и начинается обновление юниформ для следующего рендер пасса. Небольшой всплеск похож на рендеринг до фрагментного шейдера, который ждет обновление юниформ.
Барьер никак не затрагивает компьют очередь, асинхронный компьют как раз и нужен чтобы заполнять такие пустоты, но запуск шейдеров не происходит. Как и в начале (1) шедулер раскидывает графику по всем варпам и только потом добавляет к ним асинхронный компьют.
4. Начинаются короткие рендер пассы, разделенные барьерами. При этом на компьют выделяется не более 30% варпов, даже когда часть варпов простаивает (светло-сервый).
5. При более долгом простое (полная остановка графической очереди), компьют очередь занимает более 30%.
В итоге обновление юниформ буфера между рендер пассами может вызвать простой ГП на 0.3мс и даже асинхронные очереди не заполняют простаивающие варпы.
Более правильный способ - обновлять юниформы один раз в начале кадра.
#gpu_sync #nvidia
Advanced API Performance: Async Compute and Overlap
Статья от NVidia, рассказывают как правильно использовать async compute, как профилировать.
#gpu_sync #nvidia
Статья от NVidia, рассказывают как правильно использовать async compute, как профилировать.
#gpu_sync #nvidia
Advanced API Performance: Async Copy
Рассказывают как оптимизировать стриминг ресурсов через асинхронную очередь.
#gpu_sync #nvidia
Рассказывают как оптимизировать стриминг ресурсов через асинхронную очередь.
#gpu_sync #nvidia
NVIDIA Technical Blog
Advanced API Performance: Async Copy
These quick recommendations give guidelines on how to arrange your work queues to maximize your gains with async copy on NVIDIA GPUs.