Znajdujesz się w sekcji Blogosfera. Zamieszczone tutaj materiały zostały opracowane przez użytkowników serwisu, bądź są owocem samodzielnej pracy redaktorów. Redakcja ITHardware nie ponosi odpowiedzialności za treść poniższej publikacji.

Czy deweloperzy gier "ograniczają" układy AMD? Kilka słów o wielowątkowości

Czy deweloperzy gier "ograniczają" układy AMD? Kilka słów o wielowątkowości

Przez lata mojej aktywności w Internecie natrafiłem na dziesiątki opinii, jakoby deweloperzy gier intencjonalnie nie chcieli optymalizować swych produkcji pod kątem procesorów wielowątkowych, idąc tym samym na rękę Intelowi, który w sektorze konsumenckim oferuje układy mniej rozbudowane od konkurencyjnego AMD. Nagonka rozpoczęła się gdzieś w 2012 roku wraz z premierą mikroarchitektury Bulldozer i trwa do dzisiaj, bo też sytuacja na rynku niewiele się zmieniła. W dalszym ciągu obserwujemy starcie 4-rdzeniowców o mocnym pojedynczym wątku ze słabszymi jednowątkowo 8-rdzeniowcami, z którego te pierwsze wychodzą zwycięsko, przynajmniej jeśli chodzi wyłącznie o gry. Czyżby Intel zbudował lobby tak mocne, że deweloperom gier nawet przez myśl nie przejdzie rozbicie nakładu pracy silnika na wiele wątków? Cóż, Intel to niewątpliwie bogata firma, która ma bogatą historię praktyk monopolistycznych, co czyni takie wyjaśnienie najbardziej oczywistym. Ale w tym konkretnym przypadku problem jest o wiele bardziej złożony. Wyjaśnię dlaczego.

Jak wiadomo, procesor jest nadrzędną jednostką obliczeniową komputera. To właśnie on odpowiada za wszystkie obliczenia związane z mechaniką świata gry. Karta graficzna jedynie generuje obraz, działając w oparciu o dane binarne dostarczone uprzednio właśnie przez procesor. Funkcję procesora w grach najłatwiej zobrazować można na przykładzie gier sportowych, np. tenisa ziemnego. Fizyka lotu piłki odbitej rakietką i zmierzającej w przeciwną stronę kortu musi zostać wyliczona dla każdej kolejnej klatki animacji, uwzględniając nie tylko przemieszczenie, ale także kąt czy siłę odbicia, a w bardziej zaawansowanych przypadkach nawet wpływ wiatru. I tutaj pojawia się zalążek wspomnianego w poprzednim akapicie problemu. Piłka jest tylko jedna, a oddziaływania fizyczne wobec niej mają jasną kolejność - uderzenie rakietką nadające kąt i siłę, detekcja ewentualnej kolizji (np. z siatką) i uwzględnienie warunków atmosferycznych. Teraz rodzi się, mam nadzieję, oczywiste pytanie: jak to wszystko policzyć na wielu wątkach, nie tracąc sensu wykonywania takich obliczeń?

Ano, właśnie. Wyobraźcie sobie wątki procesora jako boskie ręce prowadzące naszą piłkę przez kort. Ile rąk potrzeba, aby piłka znalazła się po drugiej stronie? Odpowiem: jedną. Wprawdzie można byłoby przypisać poszczególne etapy lotu do innego wątku, lecz z punktu widzenia optymalizacji niczego by to nie zmieniło. W dalszym ciągu pracę w określonej jednostce czasu wykonywałby wyłącznie jeden wątek. Reszta rąk mogłaby w tym czasie pracować nad zachowaniem publiczności czy fizyką scenerii, ale to już tylko kwestie drugorzędne. Dlatego też czasem po prostu niemożliwym jest przygotowanie gry optymalnie wykorzystującej zasoby procesorów wielowątkowych, szczególnie gdy mówimy o równoległym prowadzeniu kilkunastu operacji. Mogłoby się wydawać, że w światach współczesnych gier odnajdziemy znacznie więcej zjawisk niż banalny z pozoru lot piłki tenisowej, ale dopóki zjawiska te nie są równoległe, utylizacja kilkunastu wątków pozostaje bezzasadna. 

Co więcej, nawet występowanie wielu równoległych zjawisk nie gwarantuje optymalnego kodu. Dlaczego, zapytacie? Kolejne problemy przy optymalizacji związane są z dystrybucją nakładu pracy, bo przecież każda operacja charakteryzuje się inną złożonością obliczeniową. Idąc za przykładem, wątek liczący tor lotu piłeczki może zostać przeciążony, podczas gdy reszta będzie "nudzić się" przy losowym generowaniu assetów publiczności. Końcową wydajność i tak ograniczy ten pierwszy. W efekcie gra lepiej poradzi sobie na procesorze z mniejszą liczbą, ale mocniejszych wątków, choć w teorii będzie potrafiła zrobić użytek nawet z 8-rdzeniowca. Dystrybucja nakładu pracy w szczególności daje się we znaki studiom piszącym gry na obecne konsole do gier, jak Microsoft Xbox One czy Sony PlayStation 4, których architektura wymusza prowadzenie 6 lub 7 równoległych, ale możliwie prostych obliczeń. Zresztą podobnie, a nawet bardziej skomplikowanie było już w przypadku Sony PlayStation 3, gdzie jednostki SPE pełniące rolę dodatkowych wątków w procesorze Cell nie mają pełnej funkcjonalności nadrzędnego rdzenia (choćby przewidywania rozgałęzień). Niemniej jest to temat na inny wpis.

Ale czy mając świadomość powyższego nie można przygotować gry nastawionej na wielowątkowość? Teoretycznie można, jednakowoż warunkuje to realizację rozgrywki, jak również mechanikę - co jakby nie patrzeć również stanowi pewien problem. Zwróćcie uwagę, że tytuły dobrze radzące sobie z układami wielowątkowymi reprezentują konkretne gatunki. Są to przeważnie strategie czasu rzeczywistego, w których oglądamy setki niezależnych jednostek na ekranie. Niska złożoność przy dużym natężeniu wydarzeń równoległych pozwala uzyskać imponujące efekty, ot choćby takie Ashes of the Singularity. Niezmiernie nudnym byłoby jednak ogrywanie produkcji należących wyłącznie do jednego gatunku, tylko dlatego, że idealnie wpasowują się one w specyfikę najnowszych procesorów. Podsumowując, umiarkowana wielowątkowość współczesnych silników nie wynika z niechęci twórców, a bardziej braku możliwości technicznych. Grę pod wielowątkowce można napisać, ale wiąże się to z obostrzeniami w temacie jej konwencji. I niestety nie ma tutaj za bardzo szans na zmianę w przyszłości.

Pokaż / Dodaj komentarze do: Czy deweloperzy gier "ograniczają" układy AMD? Kilka słów o wielowątkowości

 0