楽しいゲームの要素の1つは、その動作速度です。 この投稿では、Linuxゲームのグラフィックスパフォーマンスについて学んだことについてお話します。
開発者は、生産性は非常に混乱しやすいと言うでしょう。 したがって、ナレーションを簡単にするために、次の最上位の構成に注目します。
鉄
- Intel Core i7 3930k
- NVIDIA GeForce GTX 680
- 32 GB RAM
ソフトウェア
- Windows 7 Service Pack 1 64ビット
- レフト4デッド2
- Ubuntu 12.04 32ビット
心配しないでください。Linuxの32ビットバージョンを一時的に使用しているため、このリリースは64ビットアーキテクチャで動作します。
Direct3Dドライバーを使用してWindows 7でLeft 4 Dead 2を実行すると、270.6 FPSの値が得られます。 データは内部テストを使用して生成されます。
Linuxでの作業を開始したとき、最初のバージョンは6 FPSで動作しました。 これは、ゲームを新しいプラットフォームに移植する初期段階では正常です。
パフォーマンスの改善は、主に次の3つの方向で実施されました。
- カーネルでゲームをより良くする
- OpenGLでゲームをより良くする
- グラフィックドライバーを最適化する
たとえば、カーネルとの相互作用を改善するために、メモリ割り当てメカニズムを変更して、Linuxで受け入れられる機能を使用するようにしました。 また、不要なOpenGL呼び出しの数を減らし、グラフィックエンジンのインターフェイスを拡張して、OpenGLおよびDirect3dとの対話を改善しました。
3番目の点は特に興味深いものです。これには、鉄メーカーと協力してドライバーの弱点を特定し、その結果、他のLinuxゲームにプラスの影響を及ぼす弱点を改善することが含まれます。 ドライバーの遅延を調査し、それにマルチスレッドサポートを追加することは、チームの共同作業から生じた変更の2つの例です。
すべての作業が完了した後、Left 4 Dead 2はLinuxの315 FPSで実行されます。 Windows(270.6)と比較してLinuxの生産性は向上しますが、一見、移植に費やされた時間を考えると、少々論理的ではないように見えます。 ただし、これはコアとOpenGLの背後にある潜在的な機会について述べています。 ところで、機器メーカーと協力する過程で、OpenGL for Windowsの実装も加速しました。 この構成では、Left 4 Dead 2は303.4 FPSで実行されます。
Windows 7でのOpenGLとDirect3D
これらすべてが疑問につながります。なぜ、Windows 7のゲームのOpenGLバージョンはDirect3Dバージョンよりも速いのですか? これは、マルチスレッドの実装には当てはまらないようです。 かなり正直な分析を行った結果、Direct3Dの各バッチでわずかな遅延(数マイクロ秒)が見つかりましたが、これはOpenGLには影響しません。 これで、機器でさらに多くのことができることがわかったので、Direct3Dで新しい制限に到達する方法を見つけます。
ビデオカードメーカーと連携する
NVIDIA、AMD、およびIntelと協力して、Linuxのドライバーパフォーマンスを改善しました。 私たちは一緒に素晴らしい仕事をしました。開発者がどのように彼らと協力し、受け取ったデータを注意深く分析しているかを見るのはとてもうれしかったです。 それぞれの未解決のバグは啓示であり、ゲーム、レンダラー、ドライバー、ハードウェアを理解し、それらを並べて作業する人々の近くにいて、パフォーマンスの問題を攻撃することは非常に貴重です。
これは、ソフトウェア開発者とハードウェア開発者間の緊密なコラボレーションの利点の優れた例であり、このコラボレーションはLinuxコミュニティに大きく貢献するはずです。