Dlaczego gry działają o wiele lepiej w systemie Windows niż w OSX?

11

Na przykład na moim Macu Mini z Bootcamp Team Fortress 2 działa z prędkością około 20 klatek na sekundę w OSX i 80 klatek na sekundę w Windows. To wydaje się być częstym przypadkiem. Dlaczego to?

sans
źródło
To ta sama maszyna podwójnie uruchomiona w dowolnym systemie operacyjnym.
bez
uruchamiany podwójnie jak w „maszynie wirtualnej”, prawda?
horatio
1
Tak, uruchamianie bezpośrednio w dowolnym systemie operacyjnym.
bez
1
Zawsze uważam te pytania za interesujące - o ile nie zmieniają się one w bezmyślne ranty / płonięcie - ponieważ jako użytkownik Maca (10 miesięcy) dostrzegam nieporozumienia użytkowników Windows.
Ricket

Odpowiedzi:

15

Sterowniki Direct3D w systemie Windows są absurdalnie zoptymalizowane, czasem dla określonych gier i opracowane przez poszczególnych dostawców sprzętu.

Sterowniki OpenGL firmy Apple są napisane i obsługiwane przez Apple (AFAIK) i są przeznaczone do „ogólnego” użytkowania systemu operacyjnego, tworzenia interfejsu użytkownika i tym podobnych. Nie ma tak dużej optymalizacji gier i wysokiej wydajności.

Zasadniczo wiele zasobów z wielu źródeł przyczyniło się do szybkiego działania DirectX w systemie Windows, podczas gdy na Macu dostępnych jest znacznie mniej zasobów.

chrish
źródło
Jeszcze bardziej pochyliłbym się nad kompilatorem modułu cieniującego w sterowniku, ponieważ stanowi to część tej różnicy. altdevblogaday.com/2011/07/20/… mówi, że w przypadku popularnych gier NV / AMD nawet zoptymalizują shadery pod kątem sprzętu.
Adam
5
To nie tylko sterowniki ... to także twórcy gier. Zwykle inwestują więcej zasobów w optymalizację dla Direct3d / DirectX zamiast OpenGL. Innym przypadkiem jest to, że gra została początkowo opracowana tylko dla systemu Windows, a później została przeniesiona. To musi być naprawdę dobry port (np. Może spowodować dużo przepisywania kodu), jeśli ma osiągnąć podobną wydajność ... co w większości przypadków nie jest prawdą.
bummzack
Więc Team Fortress 2 jest renderowany w OpenGL na OSX, a D3D na Windows?
bez
sans, tak, Direct3D jest przeznaczony tylko dla systemu Windows, więc każda gra na dowolnej innej platformie jest renderowana przy użyciu OpenGL (lub oprogramowania ...). Windows obsługuje również OpenGL; ale większość gier dla systemu Windows korzysta z Direct3D, ponieważ, jak wspomniano, sterowniki dla systemu Windows są zwykle znacznie bardziej zoptymalizowane pod kątem D3D.
Ricket
13

Chociaż nie będę pomijać optymalizacji, którą Microsoft mógł zastosować w systemie Windows i / lub DirectX, mocno wierzę, że większość programów działa lepiej w systemie Windows po prostu dlatego, że na tym koncentrują się programiści (tam są pieniądze). Podejmują decyzje projektowe z myślą o systemie Windows, a następnie starają się, aby działał w innych systemach operacyjnych (Mac, Linux itp.). Ciągle spotykam się z tym w pracy: inne projekty mają tak duży problem z portowaniem do systemów innych niż Windows, ponieważ programiści potraktowali to jako następstwo. Wielokrotnie pisałem programy, które budują na wielu systemach operacyjnych przy bardzo małym wysiłku, ponieważ planowałem to w ten sposób od samego początku. Kiedy naprawdę spróbujesz to zrobić (w przeciwieństwie do niechętnego robienia portu po fakcie), dowiadujesz się, czego potrzeba i nie wymaga to dodatkowego wysiłku.

Klox
źródło
Ciekawostka niekodującego tutaj: co dzieje się z wydajnością, gdy projektujesz dla wielu platform? Na przykład, czy Twoja gra wieloplatformowa będzie działać tak szybko w systemie Windows, jak wersja przeznaczona dla systemu Windows?
Jason Pineo,
@Jason: Chodzi o czas i specyfikę platformy. Nic nie stoi na przeszkodzie, aby programista napisał kod, który jest całkowicie zoptymalizowany dla systemu Windows, napisał osobny kod, który jest całkowicie zoptymalizowany dla OSX, a następnie po prostu dokonał przełączenia, które jest używane w zależności od platformy. Jednak czas, a tym samym zasoby przeznaczone na to, często przewyższają korzyści płynące z tego.
Jordaan Mylonas,
@Jason: W takim przypadku tak naprawdę zależy to od tego, jak dobrze zaprojektowałeś swoją grę (a kiedy mówię „projektowanie”, mam na myśli planowanie, a nie faktyczne kodowanie) i od tego, jak różne są różne systemy operacyjne. Jeśli są one bardzo różne, komentarz Jordaana jest odpowiedni, gdy musisz osobno zająć się każdym systemem operacyjnym. Ale z popularnymi interfejsami, takimi jak OpenGL, i z czasem różne interfejsy API zapożyczają od siebie koncepcje, wszystkie stały się raczej podobne. Dzisiaj jest to ćwiczenie polegające na dopasowywaniu funkcji i projektowaniu oprogramowania tak, aby móc korzystać z każdej z tych funkcji bez wykluczania systemu operacyjnego.
Klox
7

Jako inny użytkownik komputerów Mac chciałbym zaoferować dodatkowy czynnik: harmonogram CPU w OS X jest bardziej „sprawiedliwy” niż w Windows.

Jest to dość skomplikowany temat informatyki, dlatego oto prosty sposób na pomyślenie o harmonogramie procesora: procesor musi żonglować wieloma zadaniami jednocześnie (wszystkie otwarte programy oraz procesy systemowe w tle). Może faktycznie wykonywać tylko kilka rzeczy naraz (liczba rdzeni razy liczba wątków na rdzeń; na przykład dwurdzeniowy i7 może wykonywać 4 zadania jednocześnie). Dzieli więc całą pracę na części i naprzemiennie, tak że wygląda na to, że robi wiele rzeczy naraz. Kiedy uruchamiasz dwa programy, procesor tak naprawdę naprzemiennie naprzemiennie przetwarza te dwa programy, naprawdę szybko (na przykład kilka mikrosekund tutaj, a następnie kilka mikrosekund).

Wzorzec, dla którego rzeczy są wykonywane w jakiej kolejności i jak długo określa „algorytm planowania”. Na przykład program do planowania robin okrągłych po prostu porządkuje zadania w okręgu i przetwarza je kolejno. Inny harmonogram może uporządkować zadania od pozostałego do najkrótszego czasu - małe zadania byłyby wykonywane szybko, a duże zadania musiałyby chwilę poczekać.

Windows i OS X są bardzo różne, a ich algorytmy planowania są nieco inne. Windows jest trochę „mądrzejszy”, jeśli chodzi o ustalanie priorytetów, dlatego nadaje priorytet widocznym programom, aby komputer wyglądał szybciej. OS X jest jednak bardziej sprawiedliwy dla procesów działających w tle. Ogólne algorytmy są zasadniczo takie same między dwoma systemami operacyjnymi (oba są wielopoziomowymi kolejkami informacji zwrotnych ), ale ten mały szczegół powoduje inne wrażenia użytkownika.

Obie strony mają swoje zalety. Tak jak powiedziałem, widoczne programy w systemie Windows pojawią się szybciej, ponieważ będą miały wyższy priorytet; ale jeśli jeden widoczny program decyduje się na pobór dużej mocy, cały komputer cierpi nieco bardziej. Bardziej sprawiedliwy harmonogram OS X zapewnia bardziej przewidywalne i stabilne prędkości, co jest dobre dla operacji audio i wideo. Na przykład, jeśli grasz piosenkę w tle, rzadziej jąka się, gdy robisz inne rzeczy w tym samym czasie niż w systemie Windows.

Zatem kwestią na wynos jest to: gra pełnoekranowa w systemie Windows będzie miała wysoki priorytet na procesorze, a wszystko działające w tle będzie musiało poczekać. W OS X tak nie jest.

Niektóre informacje techniczne na temat harmonogramów podano tutaj ; pozostała część tej odpowiedzi pochodzi z mojej edukacji informatycznej i korzystania z systemu OS X w ciągu ostatnich 10 miesięcy, po tym, jak korzystałem z systemu Windows przez ponad 10 lat (i czasami Linux). Czasami frustruje mnie bardziej sprawiedliwy harmonogram, ale innym razem doceniam jego zalety.

Nawiasem mówiąc, Linux ma jeszcze bardziej sprawiedliwą implementację harmonogramu; to sprawia, że ​​jest to świetny serwer, ale moim zdaniem wrażenia użytkownika są obniżone. Na przykład, gdy komputer jest zajęty zadaniami, kursor przestanie odpowiadać płynnie, ponieważ ma taki sam priorytet jak wszystko inne. Zasadniczo nigdy nie dzieje się to w systemie Windows lub OS X.

Ricket
źródło
-2

Niektóre gry, które zostały „przeniesione” na MacOSX, to tak naprawdę gry na Windows działające w emulatorze. Chociaż nie mam pełnej listy przykładów, wydaje się, że istnieje co najmniej SPORE:

SPORE nigdy nie został oficjalnie wydany na GNU / Linuksie, a wersja na Maca starzeje się źle. Port Mac jest w rzeczywistości wersją systemu Windows wyposażoną w Cider, który jest przestarzałą technologią obejmującą (obecnie starą) wersję WINE wokół gier. ( Źródło )

Uruchamianie oprogramowania w emulatorze jest z definicji wolniejsze niż uruchamianie go natywnie.

don
źródło