本当にパフォーマンスが重要な領域で作業している場合、後から考えて効率を先送りすることはできません。これらの場合、および最終結果の保守性に関連する方法で早期に設計する場合に考えることは、最も重要なことの1つです。
大規模なサーバーを設計して実装することはできず、システム全体をロックして個々のクライアント要求を処理せずにロックするグローバルスレッドロックを使用して、すべてのブロック関数を使用するだけの簡単で十分に文書化されたコードの記述から始めることはできません共有状態、スレッドの競合、非同期性について考えました。これは災害のレシピであり、あなたが書いた素敵に文書化されたコードの大部分を再設計し、書き直さなければなりません。効率的でシンプルな作業設計を前もって考えていたのではなく、後知恵で必要な効率を達成します。
32コアの最高速度のハードウェアで1秒あたり2フレームしか動作せず、画面がビジーになるたびに15秒間ストールする傾向があるエンジンを使用して、8か月でゲーム開発チームが制作を開始1つの小さなローカライズされたホットスポットを修正します。コードベースの隅々にまで及ぶ可能性のある、図面ボードと設計変更の壮大な再訪を保証する方法で、設計がFUBARである可能性があります。
John Carmackと共に、彼は技術デモを実稼働環境に統合するために、毎秒最低数百から数千フレームで実行する方法について一度話しました。それは効率に対する不健全な執着ではありません。彼は、顧客がゲームを受け入れられるようにするには、ゲーム全体を30+ FPSで実行する必要があることを事前に知っています。その結果、ソフトシャドウシステムのような小さな側面は30 FPSで実行できません。さもないと、ゲーム全体が必要なリアルタイムフィードバックを提供するのに十分な速度にならない可能性があります。それはだ使用できない、それは必要な効率を達成するまで。効率のための基本的な要件があるようなパフォーマンスが重要な領域では、適切な速度を達成できないソリューションは、実際にはまったく機能しないソリューションよりも優れています。。また、その効率性について多くのことを事前に考えない限り、リアルタイムゲームエンジンに必要な1秒あたり数百から数千フレームで実行する効率的なソフトシャドウシステムを設計することはできません。実際、このような場合、パストレースを使用してフレームあたり2時間で正常に機能するソフトシャドウシステムを考えるのは簡単なため、作業の90 +%が効率に重点を置いていますが、調整することは期待できませんアプローチにまったく異なる変更を加えることなく、毎秒数百フレームで実行します。
効率がアプリケーションの設計の基本的な部分である場合、後知恵で機能する設計を達成することは期待できないため、それを無視することで節約したよりも劇的に多くの時間を失うことなく、後知恵で効率を達成することは期待できません。「デザインについて考えることを後回しにすることは許されません。コードを適切に文書化するだけで、後で適切なデザインを思いつくことができます。」しかし、パフォーマンスが重要なアーキテクチャでは、効率的な設計を事前に細心の注意を払わなければ、それが効果的に行われます。
これは、実装をすぐに微調整する必要があるという意味ではありません。実装の詳細については、設計を変更する必要がなければ、測定後に高速ソリューションに向けて反復する余地が多くあります。多くの場合、それが最も生産的な方法です。しかし、設計レベルでは、設計とアーキテクチャが最初から効率にどのように関係するかを十分に検討する必要があります。
ここでの主な違いはデザインです。デザインが依存関係を蓄積するため、後から見たデザインに大きな変更を加えることは容易ではなく、デザインが変更されると依存関係が壊れます。そして、デザインが合理的に効率的である必要がある場合、または場合によってはその品質が効率によって大部分が測定されるという要件がある場合、適切なデザインを後から考えて達成できると期待すべきではありません。オペレーティングシステム、コンパイラ、ビデオプロセッサ、レイトレーサー、ゲームエンジン、物理エンジンなど、効率が品質の大きな側面である競合製品では、効率とデータ表現に関する考えが最初から綿密に考えられていました。そして、そのような場合、事前に効率性に多くの考えを入れるのは時期尚早な最適化ではありません。そのような考えを最も生産的な時期に正確に配置し、