Nowoczesne procesory graficzne mają na ogół jedną sekcję interfejsu, która przetwarza całkowicie liniowy strumień poleceń z procesora. To, czy jest to naturalny projekt sprzętu, czy po prostu ewoluowało z czasów, gdy istniał pojedynczy rdzeń procesora generujący polecenia dla GPU, jest dyskusyjne, ale na razie tak jest. Więc jeśli wygenerujesz pojedynczy liniowy strumień poleceń stanowych, oczywiście sensowne jest wygenerowanie tego strumienia liniowo w jednym wątku procesora! Dobrze?
Cóż, współczesne procesory graficzne mają również na ogół bardzo elastyczny zunifikowany backend, który może pracować na wielu różnych rzeczach jednocześnie. Ogólnie rzecz biorąc, GPU działa na wierzchołkach i pikselach z dość drobną ziarnistością. Nie ma dużej różnicy między GPU przetwarzającym 1024 wierzchołki w jednym losowaniu i 512 + 512 wierzchołków w dwóch różnych losowaniach.
To sugeruje dość naturalny sposób na wykonanie mniejszej pracy: zamiast rzucać dużą liczbą wierzchołków w GPU w jednym wywołaniu losowania, podziel model na sekcje, wykonaj tanie gruboziarniste ubijanie na tych sekcjach i prześlij każdą porcję indywidualnie, jeśli przejdzie test uboju. Jeśli zrobisz to z odpowiednią dokładnością, powinieneś uzyskać niezłe przyspieszenie!
Niestety, w obecnej rzeczywistości graficznego interfejsu API, wywołania są bardzo kosztowne dla procesora. Uproszczone wyjaśnienie, dlaczego: zmiany stanu na GPU mogą nie odpowiadać bezpośrednio wywołaniom graficznego interfejsu API, więc wiele wywołań graficznego interfejsu API po prostu ustawia stan wewnątrz sterownika, a wywołanie losowania, które byłoby zależne od tego nowego stanu, przechodzi i sprawdza wszystkie stan oznaczony jako zmieniający się od ostatniego losowania zapisuje go w strumieniu poleceń GPU, a następnie inicjuje losowanie. To jest cała praca wykonywana w celu uzyskania ubogiego i średniego strumienia poleceń dla jednostki frontendowej GPU.
Sprowadza się to do tego, że masz budżet na losowanie połączeń, który jest całkowicie narzucony przez kierowcę . (Wydaje mi się, że słyszałem, że w dzisiejszych czasach można uzyskać około 5000 na klatkę za tytuł 60 klatek na sekundę). Możesz to zwiększyć o duży procent, budując ten strumień poleceń w równoległych porcjach.
Są też inne powody (na przykład asynchroniczne opóźnienie czasu w celu poprawy opóźnień VR), ale jest to duży problem w przypadku gier związanych z grafiką i innego oprogramowania wymagającego dużego zainteresowania (np. Pakietów do modelowania 3D).