2015-04-13 49 views
5

Mam zamiar użyć SLI w trybie AFR, aby zwiększyć FPS. Mam wrażenie, że sterownik NVIDIA SLI automatycznie i inteligentnie przydzieli VBO do poszczególnych procesorów graficznych. Czy to jest poprawne?W jaki sposób SLI decyduje, do którego VBO należy GPU w OpenGL?

Mam kod, który ma dużą liczbę wierzchołków/ścian reprezentowanych przez VAO z trzema różnymi VBO (wierzchołki, kolor, indeksy). Nie ma wzrostu liczby klatek na sekundę przy użyciu podwójnego procesora graficznego z obsługą SLI.

Powielam VAO i VBO z tymi samymi wierzchołkami/twarzami i na przemian wywołuję glDrawElements między dwoma VAO mając nadzieję, że sterownik NVIDIA SLI będzie na tyle sprytny, by wiedzieć, że jedno VAO jest dla jednego GPU, ale niestety wciąż nie zwiększa się liczba klatek na sekundę. Czy ktoś może mi powiedzieć, co zrobiłem źle?

Próbowałem również skomentować jedno z wywołań glDrawElements dla jednego z VAO, i pokazuje podwójne FPS i migotanie sceny z rzeczywistą sceną i czarnym ekranem zgodnie z oczekiwaniami.

+0

Jakie są liczby klatek na sekundę? Jeśli rysujesz bardzo prostą geometrię, prawdopodobnie jesteś ograniczony przez procesor, a nie przez GPU. Również SLI może odtwarzać mięśnie tylko wtedy, gdy masz dość skomplikowaną scenę, w której renderowanie pojedynczej klatki zajmuje więcej czasu dla jednego GPU niż jeden cykl odświeżania monitora. – datenwolf

+0

@datenwolf fps otrzymuję około 25 ~ 30, scena jest z pliku warstwy i rysuję tak jak jest. Istnieje wiele wierzchołków/ścian, ale nie ma oświetlenia/cieni itp., Więc nie jestem pewien, czy jest to "złożone". Jedno jest pewne, jeśli załaduję tylko połowę wierzchołków/ścian podwojonych fps. Czy SLI nie powinno pomóc w tego rodzaju scenariuszu? – user3667089

Odpowiedz

1

Jak wspomniano here,

Warto zauważyć, że podczas gdy częstotliwość, przy której ramek przybyć może być podwojona, czas produkować ramki nie jest zmniejszona

Dodatkowo, nigdy nie słyszałem o VAO lub VBO, które zostały przeznaczone dla jednego GPU. O ile mi wiadomo, oba adaptery mają te same sklonowane bufory. Powielanie odbywa się bez Ciebie nawet o tym wiedząc, a każdy GPU wykorzystuje swoją własną kopię do produkcji swojej części ramki. Mogę się mylić, ale wątpię w to.

To jest powód, dla którego, jeśli masz karty 2 x 2 GB VRAM, nie dostaniesz 4 GB VRAM. Nadal pracujesz z 2 GB. Ponadto, jeśli twoje adaptery SLI mają różną pojemność, pamięć o większej karcie jest obniżana w celu dopasowania do mniejszej. Całe zwiększenie wydajności, jakie uzyskujesz, wynika z mocy przetwarzania równoległego dwóch procesorów graficznych oraz z faktu, że przepustowość pamięci jest dwa razy większa. Zapisy z pamięci są sprzętowo programowane, o ile wiem, więc nie ma tam dużego obciążenia.

EDYTOWANIE: Read these interesting points about SFR and AFR. Okazuje się, że AFR jest zalecany przy dużym obciążeniu wierzchołków, podczas gdy SFR jest lepszy w przypadku modułu cieniującego pikseli. To było interesujące nawet dla mnie. Korzystając z AFR, powinieneś również upewnić się, że jesteś podwójnie buforowany, aby jak najlepiej wykorzystać. Brak wielu buforów dosłownie zabija AFR. Wyłącz swoją vsync - zabija też!

+0

Przełączyłem się w tryb SFR i nie było zwiększenia wydajności. Czy sugerujesz, że fps może być ograniczone przez przepustowość pamięci? Długo trwało kopiowanie danych z pamięci procesora do VBO, ale jest to jednorazowa operacja. Czy mógłbyś wyjaśnić, dlaczego fps jest ograniczone przez przepustowość pamięci? – user3667089

+1

Czy nadal "duplikujesz VAO i VBO z tymi samymi wierzchołkami/twarzami i na przemian wywołujesz glDrawElements między dwoma VAO mając nadzieję, że sterownik NVIDIA SLI będzie na tyle sprytny, by wiedzieć, że jedno VAO jest dla jednego GPU"? –

+0

Próbowałem nie duplikować i duplikować, a FPS jest nadal ten sam – user3667089