Archiwa tagu: egpu szyna

„PCI-Express Scaling” w grach wg TechPowerup

PCI_Express_logo-660x268

Na łamach serwisu techpowerup.com pojawił się właśnie bardzo interesujący artykuł zatytułowany GeForce GTX 980 PCI-Express Scaling, który choć nie dotyczy stricte tematu eGPU, to jednak w istotny sposób przybliża nam jego słabości. Z okazji premiery kart NVDII najnowszej generacji, redakcja postanowiła wziąć na warsztat GTX980 i sprawdzić jak sprawuje się w aktualnie wydanych grach w zależności od zastosowanej szyny PCI-E oraz rozdzielczości.

Niestety, autorzy testu nie „zniżyli” się do naszego poziomu (tzn. przepustowości PCI-E x1 2.0 4Gbps) i swoje testy rozpoczęli od szyny PCI-E x4 1.1 (czyli 8Gbps), a skończyli na PCI-E x16 3.0 (czyli 128Gbps). Nie zmienia to jednak faktu, że skoro dana gra ma już znacznie obniżoną wydajność w przypadku x4 1.1, to na x1 2.0 z pewnością lepiej już nie będzie.

Kto wypadł najgorzej? Na pierwszym miejscu (co nie jest dla mnie zaskoczeniem) Ryse: Son of Rome na silniku CryEngine 4. Jak wyjaśniają autorzy testu, w grze zaobserwowano bardzo dużą wymianę danych pomiędzy GPU a CPU.

Na drugim miejscu (jakżeby inaczej) Wolfenstein: The New Order. Tutaj również nie można mówić o zaskoczeniu, bowiem już w moim amatorskim teście było widać znaczne problemy z szyną na domyślnych ustawieniach.  Autor testu potwierdza zresztą moje ówcześnie postawione wnioski:

Virtual Textures certainly look great in-game, providing highly detailed, non-repeating textures, but they also put a significant load on the PCI-Express bus. One key challenge here is to have texture data ready for display in-time. Sometimes too late, it manifests as the dreaded texture pop-in some users have been reporting.

Średnio wypadły również Battlefield 4 oraz World of Warcraft: Warlords of Draenor.

Optymizmem napawa jedynie fakt, że wydajność uzyskana na PCI-E x16 2.0 oraz PCI-E x8 3.0 była zbliżona do PCI-E x16 3.0, co sugeruje, że branża gier komputerowych nadal nie jest w stanie wykorzystać tak dużej przepustowości. W świetle pojawiających się ostatnio stacji dokujących (Alienware 13) na niepełnej szynie, jest to dobry prognostyk.

Co tak naprawdę „zapycha” szynę w eGPU ?

PCI_Express_logo-660x268

Pytanie na które długo nie byłem sobie w stanie odpowiedzieć. To że skrócona szyna PCI-E do x1 2.0 w niektórych grach ograniczała wartość fps lub powodowała sporadyczne, lecz irytujące spadki wiedziałem od dawna. To że problemem była komunikacja CPU<->GPU przez tę szynę domyśliłem się niedawno. Ale co tak naprawdę powodowało, że szyna oferująca prawie 630MB/s w obie strony zapychała się, dowiedziałem się dopiero dzisiaj przy okazji testów gry Wolfenstein: The New Order opartej na OpenGL i silniku id Tech 5…

Wąskim gardłem jest procesor. A raczej wypełnienie obiektów teksturami przez procesor. Generalnie jest to całkowicie słuszna zmiana optymalizacyjna. Dzisiejsze gry w bardzo małym stopniu wykorzystują wielowątkowość procesora dlatego każda zmiana która odciąża kartę graficzną jest chwalebna. A przecież wypełnianie obiektów teksturami jest na tyle prostą czynnością, że procesor w zupełności powinien sobie z tym poradzić.

W przypadku eGPU optymalizacyjna zmiana „na plus” okazuje się jednak fatalną decyzją. Jeśli bowiem w VRAM mam zaalokowane 1GB tekstur to przesłanie ich do procesora przez skróconą szynę by ten je powstawiał, a potem przesłał efekt końcowy z powrotem do GPU musi spowodować gigantyczne spadki fps. Właśnie to obserwujemy w takich grach jak wspomniany wcześniej Wolfenstein: The New Order, Total War: Rome II, Total War: Shogun II, czy w dość ograniczonym na szczęście stopniu w serii Battlefield oraz Crysis 3.

Uściślając, problem występuje we wszystkich grach w których tekstury są wypełniane dynamicznie (tylko w obrębie pola naszego widzenia) przez CPU. Tam gdzie tekstury wstawiane są „na stałe” podczas „ekranu wczytywania” problem z szyną nie występuje. Do takich gier należy m.in. Natural Selection 2 (występuje tam tkz. „precaching”), seria Half Life (słynny „paseczek” między etapami nawet tej samej mapy) czy Metro: Last Light (również ekrany ładowania między misjami). Ciekawym wyjątkiem jest Wiedźmin 2, w którym tekstury również były nakładane „w tle” (przykładowo wejście do karczmy we Flotsam u mnie często najpierw wyświetlało „plastelinowe” obiekty, a sekundę potem właściwe tekstury). Podejrzewam jednak, że w naszej polskiej superprodukcji końcowym etapem wypełniania teksturami zajmuje się jednak GPU co by potwierdzało znikome użycie CPU.

W Wolfenstein: The New Order zaobserwowałem inne bardzo interesujące zjawisko – nawet na włączonej obsłudze tekstur przez CPU (vt_maxPFF >0) jeśli stanąłem w miejscu, nie poruszyłem myszą ani nie kliknąłem w klawiaturę to w ciągu 2 sekund fps z 10-15 rósł samoistnie do 60. Każda, nawet najmniejsza „zmiana stanu” powodowała drop z powrotem do 10-15fpsów. Wniosek – CPU na nowo musiał przeliczyć i powstawiać tekstury w „nowym polu widzenia”. Na szczęście engine zastosowany w tej grze pozwala przełączyć te operacje z powrotem na GPU co znacznie zwiększy ilość fps kosztem tego, że zapełnianie tychże obiektów teksturami potrwa dłużej (przez co przez ułamek sekundy możemy ujrzeć niewyraźne, „plastikowe” ściany).

Prognoza na przyszłość jest raczej dla eGPU niewesoła. Coraz więcej gier to sandboxy w których głównym zadaniem programistów jest ukryć wszelkie doczytywania lokacji i tekstur „w tle”. jeśli udział CPU w takich operacjach będzie częstszy, a engine gry nie pozwoli na zmianę w pliku konfiguracyjnym, będziemy mieć do czynienia z bardzo dużym ograniczeniem przez szynę w przypadku eGPU.

FAQ: Jak mogę sprawdzić czy eGPU ogranicza moją wydajność w grze ?

Najlepiej zainstalować sobie darmowy program-monitor zasobów HWInfo oraz Fraps. Następnie włączamy najpierw Frapsa a następnie HWInfo. W HWInfo włączamy logowanie wskaźników do pliku, uruchamiamy grę i po jakimś czasie sprawdzamy wskazania w logach.

Najlepiej z zanotowanych wyników: GPU Video Bus Load, Total CPU Usage, GPU D3D Usage oraz FPS stworzyć sobie wykres i na jego podstawie sprawdzić czy coś (a jeśli tak to co) nas ogranicza. Ograniczenie przez szynę objawia się dużymi spadkami wskaźnika FPS przy jednoczesnym wzroście wskaźnika GPU Video Bus Load.

Dobrym przykładem ograniczenia przez szynę są wykresy i testy przeprowadzone przez waldeksika na Crysis 3 > TUTAJ

Zwracam również uwagę że parametr GPU Video Bus Load jest dostępny tylko dla kart Nvidii

FAQ: Na jakie ograniczenia możemy się natknąć używając eGPU w grach ?

Generalnie wyróżniamy 3 ograniczenia:

  • Ograniczenie przez szynę – max. 0,5GB/s (x1 2.0 – 4Gbps) dla ExpressCard; max. 1,25GB/s (odpowiednik x2 2.0+12,5%) dla Thunderbolt. Do tego należy dodać trudną do oszacowania premię przy użyciu Optimusa na wewnętrznym ekranie.
  • Ograniczenie przez CPU – w małych laptopach posiadających slot EC/TB montują zazwyczaj 2 rdzeniowe procesory i3/i5; niektóre modele posiadają jednak możliwość upgrade do 4-rdzeniowych i7.
  • Ograniczenie przez GPU – to już jest zależne od tego co zamontujesz w swoim eGPU.

Trzeba jednak pamiętać że występowanie któregoś z powyższych ograniczeń wcale nie musi oznaczać że gra jest niegrywalna.