Por que os jogos rodam muito melhor no Windows do que no OSX?

11

Por exemplo, no meu Mac Mini com Bootcamp, o Team Fortress 2 é executado a cerca de 20fps no OSX e 80fps no Windows. Este parece ser um caso comum. Por que é isso?

sans
fonte
É a mesma máquina inicializada em ambos os sistemas operacionais.
sans
dual inicializado como em "não é uma máquina virtual" correto?
horatio
1
Sim, inicializando diretamente em qualquer sistema operacional.
sans
1
Eu sempre acho essas perguntas interessantes - desde que não se transformem em brigas / chamas irracionais - porque, como usuário de Mac (de 10 meses), percebo os conceitos errôneos dos usuários do Windows.
Ricket

Respostas:

15

Os drivers do Direct3D no Windows são ridiculamente otimizados, às vezes para jogos específicos, e desenvolvidos por fornecedores de hardware individuais.

Os drivers OpenGL da Apple são gravados e mantidos (AFAIK) pela Apple e destinam-se ao uso "geral" do SO, compondo a interface do usuário e outros enfeites. Não há tanta otimização para jogos e taxa de transferência de alto desempenho.

Basicamente, muitos recursos de várias fontes foram utilizados para tornar o DirectX rápido no Windows, enquanto muito menos recursos estão disponíveis para fazer o mesmo no Mac.

chrish
fonte
Eu me inclinaria ainda mais especificamente para o compilador de sombreador no driver como parte da diferença. altdevblogaday.com/2011/07/20/… diz que, para jogos populares, a NV / AMD ainda otimiza manualmente os shaders para seu hardware.
Adam
5
Não são apenas os drivers ... são também os desenvolvedores de jogos. Eles geralmente investem mais recursos na otimização do Direct3d / DirectX em vez do OpenGL. Outro caso é quando um jogo foi desenvolvido inicialmente apenas para Windows e é portado posteriormente. Essa deve ser uma porta realmente boa (por exemplo, pode resultar em muita reescrita de código) se ela atingir um desempenho semelhante ... o que geralmente não é o caso.
bummzack
Então, o Team Fortress 2 é renderizado no OpenGL no OSX, mas no D3D no Windows?
sans
sans, sim, o Direct3D é apenas para Windows; portanto, qualquer jogo em qualquer outra plataforma é renderizado usando o OpenGL (ou software ..). O Windows também suporta OpenGL; mas a maioria das versões de jogos do Windows usará o Direct3D porque, como mencionado, os drivers do Windows geralmente são muito mais otimizados para o D3D.
Ricket
13

Embora não descarte a otimização que a Microsoft pode ter colocado no Windows e / ou no DirectX, acredito firmemente que a maioria dos programas tem um desempenho melhor no Windows simplesmente porque é nisso que os desenvolvedores se concentram (é aí que está o dinheiro). Eles tomam decisões de design com o Windows em mente e depois tentam fazê-lo funcionar em outros sistemas operacionais (Mac, Linux etc.). Eu sempre me deparo com isso no trabalho: outros projetos têm muitos problemas em migrar para sistemas que não são Windows porque os desenvolvedores o trataram como uma reflexão tardia. Escrevi repetidamente programas que se baseiam em vários sistemas operacionais com muito pouco esforço, porque planejei dessa maneira desde o início. Uma vez que você realmente tentou fazê-lo (em vez de fazer a porta de má vontade depois do fato), você aprende o que é preciso e requer muito pouco esforço extra.

Klox
fonte
A curiosidade de um não codificador aqui: O que acontece com o desempenho quando você cria para plataformas múltiplas? Por exemplo, seu jogo multiplataforma será executado tão rápido no Windows quanto uma versão focada no Windows?
Jason Pineo 02/09/11
@ Jason: É mais sobre o tempo gasto e a especificidade da plataforma. Não há nada que impeça um desenvolvedor de escrever um código totalmente otimizado para o Windows, escrever um código separado totalmente otimizado para o OSX e apenas mudar o que é usado com base na plataforma. No entanto, o tempo e, portanto, os recursos gastos para isso frequentemente superam os benefícios de fazê-lo.
Jordaan Mylonas
@ Jason: Nesse caso, realmente depende de quão bem você projetou seu jogo (e quando digo design, quero dizer planejamento, não a codificação real) e quão divergentes são os diferentes sistemas operacionais. Se eles forem muito diferentes, o comentário de Jordaan é apropriado para onde você deve abordar cada SO separadamente. Porém, com interfaces comuns como o OpenGL, e com o tempo diferentes APIs emprestam conceitos umas das outras, elas se tornam bastante semelhantes. Portanto, hoje é mais um exercício de combinar recursos e projetar seu software para poder usar cada um dos recursos sem excluir um sistema operacional.
Klox 02/02
7

Como colega usuário do Mac, gostaria de oferecer um fator adicional: o agendador de CPU no OS X é mais "justo" do que no Windows.

Esse é um tópico complicado de ciência da computação, então aqui está uma maneira simples de pensar em seu agendador de CPU: seu processador precisa executar várias tarefas ao mesmo tempo (todos os seus programas abertos, além de processos do sistema em segundo plano). Na verdade, ele só pode fazer algumas coisas ao mesmo tempo (o número de núcleos vezes o número de threads por núcleo; um i7 de núcleo duplo pode executar 4 tarefas ao mesmo tempo, por exemplo). Então, divide todo o trabalho em pedaços e alterna entre eles, para que pareça que ele está fazendo muitas coisas ao mesmo tempo. Quando você executa dois programas, o processador está apenas alternando entre o processamento desses dois programas, muito rápido (como alguns microssegundos aqui e depois alguns microssegundos).

O padrão para o qual as coisas são executadas em que ordem e por quanto tempo é decidido por um "algoritmo de agendamento". Por exemplo, o agendador round robin apenas organiza as tarefas em um círculo e processa cada uma em ordem. Outro agendador pode organizar as tarefas do menor tempo possível - pequenas tarefas seriam feitas rapidamente e grandes tarefas podem ter que esperar um pouco antes de serem feitas.

Windows e OS X são muito diferentes e seus algoritmos de agendamento também são um pouco diferentes. O Windows é um pouco mais "inteligente" em priorizar as coisas, por isso dá prioridade extra aos programas visíveis para fazer o computador parecer mais rápido. O OS X, no entanto, é mais justo em processos em segundo plano. Os algoritmos gerais são praticamente os mesmos entre os dois sistemas operacionais (ambos são filas de feedback multinível ), mas esse pequeno detalhe resulta em uma experiência do usuário diferente.

Ambos os lados têm suas vantagens. Como eu disse, os programas visíveis no Windows aparecerão mais rapidamente porque têm mais prioridade; mas se um programa visível decide consumir muita energia, o computador inteiro sofre um pouco mais. O agendador mais justo do OS X resulta em velocidades mais previsíveis e estáveis, o que é bom para operações de áudio e vídeo. Por exemplo, se você estiver tocando uma música em segundo plano, é menos provável que gagueje ao fazer outras coisas ao mesmo tempo que no Windows.

Portanto, o ponto principal é o seguinte: um jogo em tela cheia no Windows terá alta prioridade na CPU e tudo o que estiver sendo executado em segundo plano terá que esperar. No OS X, esse é menos o caso.

Algumas informações técnicas sobre os agendadores são fornecidas aqui ; o restante desta resposta é da minha formação em ciência da computação e do uso do OS X nos últimos 10 meses, depois de usar o Windows por mais de 10 anos (e o Linux ocasionalmente). Às vezes, fico frustrado com o agendador mais justo, mas outras vezes aprecio suas vantagens.

A propósito, o Linux tem uma implementação de agendador ainda mais justa; é isso que o torna um ótimo servidor, mas, na minha opinião, a experiência do usuário é degradada. Por exemplo, quando o computador está sobrecarregado com tarefas, o cursor para de responder sem problemas porque recebe a mesma prioridade que tudo o resto. Isso basicamente nunca acontece no Windows ou no OS X.

Ricket
fonte
-2

Alguns jogos que foram "portados" para o MacOSX são na verdade jogos do Windows executando em um emulador. Embora eu não tenha uma lista completa de exemplos, parece que há pelo menos o SPORE assim:

O SPORE nunca foi lançado oficialmente no GNU / Linux, e a versão para Mac envelheceu mal. A porta Mac é, na verdade, a versão do Windows empacotada com a Cider, que é uma tecnologia depreciada que envolve uma versão (agora antiga) do WINE em torno dos jogos. ( Fonte )

A execução de um software em um emulador é, por definição, mais lenta que a execução nativa.

não
fonte