CG & C++ blog
57 subscribers
13 photos
2 files
129 links
Краткий обзор публикаций, презентаций, докладов по графике и C++
Download Telegram
Breaking down barriers
Статья из 6 частей, расказывается как работает GPU, как происходят синхронизации.
В 5й части рассказывают про работу драйвера windows на разных версиях ОС.
В 6й части есть примеры с async compute.
#gpu_sync #dx #vk
Command queues
Моя статья по асинхронным очередям на 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
Кадр из NSight GPUTrace.
#gpu_sync #nvidia
Особенности шедулера в 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