1 pontos por GN⁺ 2025-03-05 | 1 comentários | Compartilhar no WhatsApp

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

 
GN⁺ 2025-03-05
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 noop quando 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 velocidade

    • Gargalos podem existir em lugares inesperados, e é preciso fazer profiling e medições para encontrá-los
    • A estrutura de Doom pode ser relativamente clara para especialistas, mas no geral esse não é um ponto em que se esperaria um gargalo
  • Para 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 demo1 em todas as versões

    • Ao usar o NETDRIVE do mTCP, deu para perceber que a opção de salvar pela rede já existia naquela época
    • O NetDrive é um driver de dispositivo para DOS que permite acessar, como se fossem dispositivos locais, imagens de disco remotas hospedadas em outro computador
  • A 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

    • É bom ver que as melhorias de desempenho em Doom continuam acontecendo
  • O "IBM PS/1 486-DX2 66Mhz, "Mini-Tower", model 2168" era o computador que eu queria na adolescência, mas nunca pude ter

    • Em 1992, eu estava usando o quarto PC que montei com as próprias mãos
    • A feira de informática da KCS era um ótimo recurso para comprar peças, montar um PC, usar, vender e depois repetir o processo comprando novas peças
    • No fim de 1992, eu estava usando um 486-DX3 100 com um coprocessador matemático ULSI 487
    • Eu podia dizer que tinha o PC mais rápido do campus naquela época
    • Eu me formei em ciências ambientais, mas minha carreira acabou sendo na área de computadores
  • Os modos de vídeo peculiares do FastDOOM não foram mencionados

    • modo texto IBM MDA
    • EGA & Plantronics ColorPlus
    • CGA clássico azul e rosa
    • hack de CGA, 320x200x16, 'ANSI from Hell'
    • Hercules
    • a maioria tem desempenho pior que VGA
  • 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"