Por que o FastDOOM é rápido
- No inverno de 2024, ao restaurar um computador IBM PS/1 486-DX2 66Mhz, foi feito um teste com o FastDOOM. O DOOM original rodava a 21,5 fps, enquanto o FastDOOM rodava a 30 fps, ou seja, 30% mais rápido.
Contexto histórico
- O DOOM foi desenvolvido em uma NeXT Workstation, e o I/O para DOS foi escrito pela id Software. Em 1997, o código-fonte não foi publicado por causa de uma biblioteca de som chamada DMX; em vez disso, a versão para Linux foi liberada. Depois, a comunidade restaurou a versão para DOS por meio do PCDOOM v2.
Panorama geral do ganho de desempenho
- Victor "Viti95" Nieto dedicou muito esforço para melhorar o desempenho do FastDOOM. Foram baixados 52 releases do FastDOOM e comparados seus desempenhos para analisar os pontos de melhoria.
Arqueologia de Git
- Viti95 demonstrou uma excelente capacidade de organização no git, com cada commit realizando uma única tarefa e cada release marcada com tag. O histórico do FastDOOM no git é composto por 3.042 commits, o que permitiu fazer benchmark de cada funcionalidade.
FastDOOM v0.1
- Este release inclui 220 commits, e a principal otimização foi reduzir a renderização da barra de status, resultando em um ganho de 2 fps.
FastDOOM v0.6
- Neste release, com 33 commits, foram feitas otimizações como pular renderizações desnecessárias e remover a indireção do ponteiro do jogador.
FastDOOM v0.8
- Este release, com 282 commits, focou no renderizador em modo texto e trouxe várias otimizações.
FastDOOM v0.9.2
- Neste release, com 110 commits, foram feitas a otimização da comparação de skyflatnum e a otimização de
R_DrawColumn.
FastDOOM v0.9.7
- Neste release, com 293 commits, foram realizados testes de mudanças em ASM x86 e otimizações de seleção de CPU.
Modo 13h vs Modo Y
- O FastDOOM tentou se otimizar para diferentes CPUs e barramentos de vídeo. O modo 13h copia dados da RAM para a VRAM, enquanto o modo Y escreve os dados diretamente na VRAM. O desempenho de cada modo varia conforme a velocidade da CPU e do barramento.
Otimizações adicionais
- Foram tentadas otimizações com flags específicas de processador do OpenWatcom, mas a versão para 386 sempre executava mais rápido. O FastDOOM pretende trocar o compilador de OpenWatcom v2 para DJGPP (GCC) para gerar código mais rápido.
Impressão geral
- Graças ao excelente trabalho de Victor Nieto, o FastDOOM apresentou um desempenho impressionante com 3.000 otimizações. Aproveitando melhorias já existentes e introduzindo novas otimizações, ele chamou bastante atenção.
1 comentários
Comentários no Hacker News
O build 36 do patch MPV v0.1 contribuiu bastante para melhorar o desempenho. A "otimização Cripy" transformou a renderização da porcentagem da barra de status em
noopquando não havia mudança, o que trouxe um ganho de 2 fps. No começo parecia difícil de acreditar, mas ao aplicar o patch no PCDOOMv2 foi possível confirmar um aumento enorme de velocidadePara entender a evolução do desempenho, foram baixados 52 releases do fastDOOM, PCDOOMv2 e do DOOM.EXE original, e foi criado um RUN.BAT que executa
-timedemo demo1em todas as versõesA thread no GitHub com Ken Silverman é muito informativa. É impressionante ver o autor do FastDOOM e o Ken discutindo a eficiência dos registradores do 486 e dos ciclos de clock
O "IBM PS/1 486-DX2 66Mhz, "Mini-Tower", model 2168" era o computador que eu queria na adolescência, mas nunca pude ter
Os modos de vídeo peculiares do FastDOOM não foram mencionados
Na época, eu provavelmente teria preferido um 486DX50 a um DX2-66. A interface de barramento de 50MHz era melhor que a de 33MHz
No documento, o sobrenome de John Carmack foi escrito errado como "Carnmack"
Não entendi a frase "Eu precisava tomar ibuprofeno para jogar, mas descobri o fastDOOM"
Pode valer a pena considerar adicionar uma fonte de system UI ao HTML para melhorar a legibilidade. Blocos de código ainda seriam exibidos em fonte monoespaçada. Fonte monoespaçada não é ideal para texto corrido
Também não entendi o significado da frase "Eu precisava tomar ibuprofeno para jogar, mas descobri o fastDOOM"