なぜFastDOOMは高速なのか
- 2024年の冬、IBM PS/1 486-DX2 66Mhzコンピューターを復元する中でFastDOOMをテストすることになった。元のDOOMは21.5 fpsだったが、FastDOOMは30 fpsで動作し、30%高速だった。
歴史的背景
- DOOMはNeXT Workstationで開発され、DOS I/Oはid Softwareによって書かれた。1997年にはDMXというサウンドライブラリのためソースは公開されず、代わりにLinux版が公開された。その後、コミュニティはPCDOOM v2を通じてDOS版を復元した。
性能向上の全体像
- Victor "Viti95" NietoはFastDOOMの性能向上のために多大な努力を注いだ。52本のFastDOOMリリースをダウンロードして性能を比較し、改善点を分析した。
Git考古学
- Viti95はgitで優れた管理能力を示しており、各コミットは1つの作業だけを行い、各リリースにはタグが付けられていた。FastDOOMのgit履歴は3,042件のコミットで構成されており、各機能をベンチマークできた。
FastDOOM v0.1
- このリリースには220件のコミットが含まれており、主な最適化はステータスバーのレンダリングを減らすことで、2 fpsの性能向上をもたらした。
FastDOOM v0.6
- 33件のコミットを含むこのリリースでは、不要なレンダリングをスキップし、プレイヤーポインタの間接参照を削除するなどの最適化が行われた。
FastDOOM v0.8
- 282件のコミットを含むこのリリースでは、テキストモードレンダラーに焦点を当て、複数の最適化が行われた。
FastDOOM v0.9.2
- 110件のコミットを含むこのリリースでは、skyflatnum比較の最適化とR_DrawColumnの最適化が行われた。
FastDOOM v0.9.7
- 293件のコミットを含むこのリリースでは、x86 ASMの変更テストとCPU選択の最適化が行われた。
モード13h 対 モードY
- FastDOOMはさまざまなCPUとビデオバスに合わせた最適化を試みた。モード13hはRAMからVRAMへデータをコピーする方式で、モードYはVRAMへ直接データを書き込む方式である。各モードの性能はCPUとバス速度によって異なる。
追加の最適化
- OpenWatcomのプロセッサ別フラグを使って最適化を試みたが、386版が常により高速に動作した。FastDOOMはより高速なコードを生成するため、コンパイラをOpenWatcom v2からDJGPP(GCC)へ切り替えようとしている。
全体的な印象
- Victor Nietoの優れた仕事のおかげで、FastDOOMは3,000件の最適化を通じて驚異的な性能を示した。既存の改善点を活用し、新たな最適化を導入することで大きな注目を集めた。
1件のコメント
Hacker Newsのコメント
MPVパッチ v0.1 のビルド36は、性能向上に大きく貢献した。"Cripy最適化" は、ステータスバーのパーセント表示レンダリングを、変更がない場合は noop に切り替えることで 2fps の向上をもたらした。最初は信じがたかったが、PCDOOMv2 にパッチを適用してみると、驚くほどの速度向上が確認できた
性能の進化を理解するために、fastDOOM、PCDOOMv2、元の DOOM.EXE の 52 個のリリースをダウンロードし、すべてのバージョンで
-timedemo demo1を実行する RUN.BAT を作成したGitHub での Ken Silverman とのスレッドは非常に有益だ。FastDOOM の作者と Ken が 486 レジスタとクロックサイクル効率について議論している様子が印象的だった
"IBM PS/1 486-DX2 66Mhz, "Mini-Tower", モデル 2168" は、10代の頃に欲しかったが手に入れられなかったコンピュータだった
FastDOOM の独特なビデオモードには触れられていなかった
昔なら、486DX50 を DX2-66 より好んでいただろう。50MHz のバスインターフェースは 33MHz より優れていた
文書内で John Carmack の姓が "Carnmack" と誤記されていた
"Ibuprofen を服用しながらゲームをしなければならなかったが、fastDOOM を知った" という表現が理解できない
可読性のために、HTML にシステム UI フォントを追加することを検討してもよいかもしれない。コードブロックは引き続き等幅フォントで表示される。等幅フォントは本文には向かない
"Ibuprofen を服用しながらゲームをしなければならなかったが、fastDOOM を知った" という表現の意味がわからない