Oyunlar neden Windows'ta OSX'ten daha iyi çalışıyor?


11

Örneğin, Bootcamp özellikli Mac Mini'mde Team Fortress 2, OSX'te yaklaşık 20 fps ve Windows'ta 80 fps'de çalışıyor. Bu yaygın bir durum gibi görünüyor. Bu neden?


Her iki işletim sistemine de aynı makine çift önyükleme.
sans

"sanal makine değil" gibi çift önyükleme doğru mu?
horatio

1
Evet, doğrudan her iki işletim sistemine de önyükleme yapın.
sans

1
Bu soruları her zaman ilginç buluyorum - akılsız rantlara / alevlere dönüşmedikleri sürece - çünkü bir Mac kullanıcısı olarak (10 aylık), Windows kullanıcılarının yanlış anlamalarını görüyorum.
Ricket

Yanıtlar:


15

Windows'taki Direct3D sürücüleri bazen belirli oyunlar için gülünç bir şekilde optimize edilir ve bireysel donanım satıcıları tarafından geliştirilir.

Apple'ın OpenGL sürücüleri Apple tarafından yazılır ve korunur (AFAIK) ve "genel" işletim sistemi kullanımı için tasarlanmıştır, kullanıcı arayüzünü bir araya getirir. Oyun ve yüksek performanslı iş hacmi için çok fazla optimizasyon yoktur.

Temel olarak, birçok kaynaktan gelen birçok kaynak Windows'ta DirectX'i hızlı hale getirirken, Mac'te de bunu yapmak için çok daha az kaynak mevcut.


Farkın biraz parçası olarak sürücüdeki gölgelendirici derleyicisine daha da özel olarak eğilirdim. altdevblogaday.com/2011/07/20/… popüler oyunlar için NV / AMD'nin gölgelendiricileri donanımları için elle optimize edeceğini söylüyor.
Adam

5
Sadece sürücüler değil, aynı zamanda oyun geliştiriciler. Genellikle OpenGL yerine Direct3d / DirectX için optimizasyona daha fazla kaynak yatırırlar. Başka bir durum, bir oyunun sadece pencereler için geliştirildiği ve daha sonra taşındığı zamandır. Benzer bir performans elde etmesi gerekiyorsa, bu gerçekten iyi bir bağlantı noktası olmalıdır (örneğin, çok fazla kod yeniden yazılmasına neden olabilir) ...
bummzack

Team Fortress 2 OSX'te OpenGL'de, Windows'da D3D'de mi oluşturuldu?
sans

sans, evet, Direct3D yalnızca Windows içindir, bu nedenle başka herhangi bir platformdaki herhangi bir oyun OpenGL (veya yazılım ..) kullanılarak oluşturulur. Windows, OpenGL'yi de destekler; ancak oyunların çoğu Windows sürümü Direct3D kullanacaktır, çünkü belirtildiği gibi, Windows sürücüleri genellikle D3D için çok daha optimize edilmiştir.
Ricket

13

Microsoft'un Windows ve / veya DirectX'e koyduğu optimizasyonu azaltmayacak olsam da, çoğu programın Windows'ta daha iyi performans gösterdiğine inanıyorum, çünkü geliştiricilerin odaklandığı şey bu (paranın olduğu yer). Tasarım kararlarını Windows göz önünde bulundurarak yaparlar ve daha sonra diğer işletim sistemlerinde (Mac, Linux, vb.) Çalışmaya çalışırlar. İş yerinde sürekli olarak bu durumla karşılaşıyorum: diğer projeler Windows dışındaki sistemlere geçişte çok sorun yaşıyor çünkü geliştiriciler bunu bir düşünce olarak değerlendiriyorlardı. Birden fazla işletim sistemi üzerine çok az çaba harcayan programlar yazdım çünkü en başından bu şekilde planladım. Bunu gerçekten yapmaya çalıştıktan sonra (gerçekte limanı kindarca yapmak yerine), ne gerektiğini öğrenirsiniz ve çok az çaba gerektirir.


Burada kodlayıcı olmayan birinin merakı: Çoklu platform için tasarladığınızda performansa ne olur? Örneğin, çoklu platform oyununuz Windows üzerinde Windows odaklı bir sürümde olduğu kadar hızlı çalışır mı?
Jason Pineo

@Jason: Daha çok harcanan zaman ve platformun özgüllüğü hakkında. Bir geliştiricinin Windows için tamamen optimize edilmiş kod yazmasını, OSX için tamamen optimize edilmiş ayrı bir kod yazmasını ve daha sonra sadece platforma dayalı olarak kullanılan anahtarlamayı bırakmasını engelleyen bir şey yoktur. Bununla birlikte, bunu yapmak için harcanan zaman ve dolayısıyla kaynaklar bunu yapmanın yararından daha ağır basar.
Jordaan Mylonas

@Jason: Bu durumda, oyununuzu ne kadar iyi tasarladığınıza (ve tasarım dediğimde gerçek kodlamayı değil planlama demek istediğime) ve farklı işletim sistemlerinin ne kadar farklı olduğuna bağlıdır. Eğer çok farklılarsa, Jordaan'ın yorumları her işletim sistemini ayrı ayrı ele almanız gereken yerlerde uygundur. Ancak OpenGL gibi ortak arabirimlerle ve zamanla farklı API'ler kavramları birbirinden ödünç alıyorlar, hepsi oldukça benzer hale geldi. Bu nedenle bugün, özelliklerin eşleştirilmesi ve yazılımınızın bir işletim sistemi hariç tutulmadan her bir özelliği kullanabilmek için tasarlanması daha çok bir alıştırmadır.
Klox

7

Diğer bir Mac kullanıcısı olarak, ek bir faktör daha sunmak istiyorum: OS X'teki CPU zamanlayıcı, Windows'dan daha "adil".

Bu bir tür karmaşık bilgisayar bilimi konusudur, bu yüzden CPU zamanlayıcınızı düşünmenin basit bir yolu: işlemciniz birçok görevi aynı anda (tüm açık programlarınız ve arka plan sistem süreçleriniz) dengelemelidir. Sadece olabilir aslında (; bir çift çekirdekli i7 örneğin aynı anda 4 görevleri yapabileceği çekirdekler sayısı çekirdek başına iplik sayısı) aynı anda bir kaç şeyler yapıyorlar. Böylece tüm işi parçalara ayırır ve aralarında dönüşümlü olarak çalışır, böylece aynı anda birçok şey yapıyormuş gibi görünür. Eğer iki program çalıştırdığınızda, işlemci aslında sadece ileri geri bu iki program işleme arasında dönüşümlü olduğunu gerçekten hızlı bir şekilde değişiyor ( , burada birkaç mikrosaniye ve sonra birkaç mikrosaniye).

Bir şeylerin hangi sırada ve ne kadar süreyle bir "zamanlama algoritması" tarafından yürütüldüğü paterni. Örneğin, yuvarlak robin zamanlayıcısı görevleri bir daire içinde düzenler ve her birini sırayla işler. Başka bir zamanlayıcı, görevleri en azdan en fazla zamana kadar düzenleyebilir - küçük görevler hızlı bir şekilde yapılır ve büyük görevlerin yapılmadan önce bir süre beklemesi gerekebilir.

Windows ve OS X çok farklıdır ve zamanlama algoritmaları da biraz farklıdır. Windows, şeylere öncelik vermek konusunda biraz "daha akıllı" olduğundan, bilgisayarın daha hızlı görünmesi için görünür programlara ekstra öncelik verir. Ancak OS X, arka plan süreçleri için daha adil. Genel algoritmalar iki işletim sistemi arasında aynıdır (her ikisi de çok düzeyli geri bildirim kuyruklarıdır) ), ancak bu küçük ayrıntı farklı bir kullanıcı deneyimiyle sonuçlanır.

Her iki tarafın da avantajları vardır. Dediğim gibi, Windows'daki görünür programlar daha öncelikli olacağından daha hızlı görünecek; ancak görünür bir program çok fazla güç almaya karar verirse, tüm bilgisayar biraz daha fazla acı çeker. OS X'in daha adil zamanlayıcısı, daha öngörülebilir ve sabit hızlarla sonuçlanır, bu da ses ve video işlemleri için iyidir. Örneğin, arka planda bir şarkı çalıyorsanız, Windows'takinden aynı anda başka şeyler yaptığınızda kekeme olasılığı daha düşüktür.

Yani, paket servisi olan nokta şu: Windows'da tam ekran bir oyun CPU'da yüksek öncelik kazanacak ve arka planda çalışan her şeyin beklemesi gerekecek. OS X'te durum daha azdır.

Programlayıcılar hakkında bazı teknik bilgiler burada verilmiştir ; Bu cevabın geri kalanı, bilgisayar bilimleri eğitimimden ve son 10 ay içinde, Windows'u 10 yıldan fazla bir süredir (ve bazen de Linux) kullandıktan sonra OS X'i kullanmamdan kaynaklanıyor. Bazen daha adil bir zamanlayıcı tarafından hayal kırıklığına uğrarım, ancak diğer zamanlarda avantajlarını takdir ediyorum.

Bu arada Linux, daha adil bir zamanlayıcı uygulamasına sahiptir; Bu onu harika bir sunucu yapan şeydir, ancak bence kullanıcı deneyimi bozulmuştur. Örneğin, bilgisayarınız görevlerle dolup taştığında, imleciniz diğer her şeyle aynı önceliğe sahip olduğu için sorunsuz bir şekilde yanıt vermeyecektir. Bu temelde Windows veya OS X'te asla gerçekleşmez.


-2

MacOSX'a "taşınan" bazı oyunlar aslında bir emülatörde çalışan Windows oyunlarıdır. Örneklerin tam bir listesi olmasa da, en az SPORE gibi görünüyor gibi görünüyor:

SPORE, GNU / Linux'ta hiçbir zaman resmi olarak yayınlanmadı ve Mac sürümü kötü yaşlandı. Mac bağlantı noktası aslında, CINE ile paketlenmiş Windows oyunudur ve bu, WINE'ın (şimdi eski) bir sürümünü oyunların etrafına saran amortismanlı bir teknolojidir. ( Kaynak )

Bir emülatörde yazılım çalıştırmak tanımı gereği yerel olarak çalıştırmaktan daha yavaştır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.