1 ポイント 投稿者 GN⁺ 2025-03-05 | 1件のコメント | WhatsAppで共有

なぜ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件のコメント

 
GN⁺ 2025-03-05
Hacker Newsのコメント
  • MPVパッチ v0.1 のビルド36は、性能向上に大きく貢献した。"Cripy最適化" は、ステータスバーのパーセント表示レンダリングを、変更がない場合は noop に切り替えることで 2fps の向上をもたらした。最初は信じがたかったが、PCDOOMv2 にパッチを適用してみると、驚くほどの速度向上が確認できた

    • ボトルネックは予想外の場所に存在することがあり、それを見つけるにはプロファイリングと計測が必要だ
    • Doom の構造は専門家には比較的明快かもしれないが、一般的にはボトルネックになるとは予想しにくい部分だ
  • 性能の進化を理解するために、fastDOOM、PCDOOMv2、元の DOOM.EXE の 52 個のリリースをダウンロードし、すべてのバージョンで -timedemo demo1 を実行する RUN.BAT を作成した

    • mTCP の NETDRIVE を使って、ネットワーク経由で保存する選択肢が昔から存在していたことを知った
    • NetDrive は、別のコンピュータでホストされているリモートのディスクイメージを、ローカルデバイスのようにアクセスできるようにする DOS デバイスドライバだ
  • GitHub での Ken Silverman とのスレッドは非常に有益だ。FastDOOM の作者と Ken が 486 レジスタとクロックサイクル効率について議論している様子が印象的だった

    • Doom の性能改善が今も続いているのはうれしい
  • "IBM PS/1 486-DX2 66Mhz, "Mini-Tower", モデル 2168" は、10代の頃に欲しかったが手に入れられなかったコンピュータだった

    • 1992 年には、自作した 4 台目の PC を使っていた
    • KCS コンピュータショーは、部品を買って PC を組み立て、使ったあとで売り、また部品を買うという流れを繰り返せる素晴らしい資源だった
    • 1992 年末には、486-DX3 100 と ULSI 487 数学コプロセッサを使っていた
    • 当時、キャンパスで最速の PC を持っていると主張できた
    • 専攻は環境科学だったが、キャリアはコンピュータ関連になった
  • FastDOOM の独特なビデオモードには触れられていなかった

    • IBM MDA テキストモード
    • EGA & Plantronics ColorPlus
    • クラシックな青とピンクの CGA
    • CGA, 320x200x16 の "ANSI from Hell" ハック
    • Hercules
    • ほとんどは VGA より性能が低い
  • 昔なら、486DX50 を DX2-66 より好んでいただろう。50MHz のバスインターフェースは 33MHz より優れていた

  • 文書内で John Carmack の姓が "Carnmack" と誤記されていた

  • "Ibuprofen を服用しながらゲームをしなければならなかったが、fastDOOM を知った" という表現が理解できない

  • 可読性のために、HTML にシステム UI フォントを追加することを検討してもよいかもしれない。コードブロックは引き続き等幅フォントで表示される。等幅フォントは本文には向かない

  • "Ibuprofen を服用しながらゲームをしなければならなかったが、fastDOOM を知った" という表現の意味がわからない