Warum FastDOOM schnell ist
- Im Winter 2024 wurde beim Restaurieren eines IBM PS/1 486-DX2 66Mhz-Computers FastDOOM getestet. Das ursprüngliche DOOM lief mit 21,5 fps, FastDOOM dagegen mit 30 fps und damit 30 % schneller.
Historischer Hintergrund
- DOOM wurde auf einer NeXT Workstation entwickelt, und das DOS-I/O wurde von id Software geschrieben. 1997 wurde der Quellcode wegen einer Sound-Bibliothek namens DMX nicht veröffentlicht; stattdessen wurde die Linux-Version freigegeben. Später rekonstruierte die Community die DOS-Version über PCDOOM v2.
Das große Bild der Leistungssteigerung
- Victor "Viti95" Nieto investierte viel Arbeit in die Leistungssteigerung von FastDOOM. Es wurden 52 FastDOOM-Releases heruntergeladen und in ihrer Performance verglichen, um Verbesserungen zu analysieren.
Git-Archäologie
- Viti95 zeigte in git hervorragende Pflege und Organisation: Jeder Commit erfüllte genau eine Aufgabe, und jedes Release war mit einem Tag versehen. Die Git-Historie von FastDOOM besteht aus 3.042 Commits, wodurch sich einzelne Funktionen benchmarken ließen.
FastDOOM v0.1
- Dieses Release enthält 220 Commits; die wichtigste Optimierung reduzierte das Rendering der Statusleiste und brachte einen Leistungsgewinn von 2 fps.
FastDOOM v0.6
- In diesem Release mit 33 Commits wurden Optimierungen umgesetzt, etwa das Überspringen unnötigen Renderings und das Entfernen indirekter Dereferenzierung des Spieler-Zeigers.
FastDOOM v0.8
- Dieses Release mit 282 Commits konzentrierte sich auf den Textmodus-Renderer und enthielt verschiedene Optimierungen.
FastDOOM v0.9.2
- In diesem Release mit 110 Commits wurden eine Optimierung des skyflatnum-Vergleichs und eine Optimierung von
R_DrawColumn vorgenommen.
FastDOOM v0.9.7
- In diesem Release mit 293 Commits wurden Änderungen an x86-ASM getestet und die CPU-Auswahl optimiert.
Modus 13h vs. Modus Y
- FastDOOM versuchte, für verschiedene CPUs und Video-Busse zu optimieren. Modus 13h kopiert Daten aus dem RAM ins VRAM, während Modus Y Daten direkt ins VRAM schreibt. Die Leistung jedes Modus hängt von CPU- und Bus-Geschwindigkeit ab.
Zusätzliche Optimierungen
- Es wurden Optimierungen mit prozessorspezifischen Flags von OpenWatcom versucht, doch die 386-Version lief stets schneller. FastDOOM wechselt den Compiler von OpenWatcom v2 zu DJGPP (GCC), um schnelleren Code zu erzeugen.
Gesamteindruck
- Dank der herausragenden Arbeit von Victor Nieto zeigt FastDOOM mit 3.000 Optimierungen eine bemerkenswerte Leistung. Durch die Nutzung bestehender Verbesserungen und die Einführung neuer Optimierungen erhielt es viel Aufmerksamkeit.
1 Kommentare
Hacker-News-Kommentare
Build 36 des MPV-Patches v0.1 hat erheblich zur Leistungssteigerung beigetragen. Die „Cripy-Optimierung“ wandelte das Rendern der Prozentanzeige in der Statusleiste in ein No-op um, wenn sich nichts geändert hatte, was 2 fps mehr brachte. Anfangs war das kaum zu glauben, aber nach dem Anwenden des Patches auf PCDOOMv2 wurde eine enorme Geschwindigkeitssteigerung bestätigt
Um die Entwicklung der Leistung zu verstehen, wurden 52 Releases von fastDOOM, PCDOOMv2 und dem ursprünglichen DOOM.EXE heruntergeladen und eine RUN.BAT erstellt, die bei allen Versionen
-timedemo demo1ausführtDer Thread auf GitHub mit Ken Silverman ist sehr aufschlussreich. Eindrucksvoll ist, wie der fastDOOM-Autor und Ken über die Effizienz von 486-Registern und Taktzyklen diskutieren
Der „IBM PS/1 486-DX2 66Mhz, „Mini-Tower“, Modell 2168“ war der Computer, den man sich als Teenager gewünscht hatte, aber nicht besitzen konnte
Die einzigartigen Videomodi von fastDOOM wurden nicht erwähnt
Früher hätte man einen 486DX50 einem DX2-66 vorgezogen. Das 50-MHz-Bus-Interface war besser als 33 MHz
In dem Dokument wurde John Carmacks Nachname fälschlich als „Carnmack“ geschrieben
Die Formulierung „Ich musste Ibuprofen nehmen, um das Spiel zu spielen, aber dann lernte ich fastDOOM kennen“ ist nicht verständlich
Für eine bessere Lesbarkeit könnte man erwägen, in HTML System-UI-Schriftarten hinzuzufügen. Code-Blöcke würden weiterhin in einer nichtproportionalen Schrift angezeigt. Nichtproportionale Schriften eignen sich nicht für Fließtext
Ich verstehe die Bedeutung der Formulierung „Ich musste Ibuprofen nehmen, um das Spiel zu spielen, aber dann lernte ich fastDOOM kennen“ nicht