「マルチスレッドの問題」について話していますが、実際にどのような問題について話していますか?ある意味では、存在しないかもしれない幻の問題を引用しています。本当の課題は、あなたが自分で作るものです-ハードウェアから最後の一滴の力を完全に落とすことに絶対に決心しているなら、それはハードウェアを使用して最高の効果をもたらしますが、最も強力なマシン間のギャップも広げますそして、最も強力ではありません。これが意味するのは、PS3を最大限に活用するゲームがある場合(たとえば)、とにかく安価な携帯電話で実際に実行することはできないため、問題は「どうすれば1つのプログラムを入手できますか」 「非常に異なるハードウェアで動作するように」が「異なるゲームのハードウェアで動作するように、1つのゲームのアイデアをいくつかの異なる方法で実装する方法」になります。
SDLのようなライブラリは、スレッド化のためのクロスプラットフォームラッパーAPIを提供しますが、これが非常に異なるプラットフォーム(デスクトップ/モバイル)でのゲームの簡単な開発に直接つながると考えるのは単純だと思います。
ゲームの簡単な開発-確かに。最適なマルチスレッド、いいえ。ただし、ゲームを作成するためにマルチスレッドは必要ありません。高性能のものを作成するには、確かに役立ちます。しかし、多くの優れたゲームは単一のスレッドで実行されます。
次の点を考慮して、この方法で開発に取り組む最良の方法は何ですか(クロスプラットフォームスレッドAPIが与えられた場合):
- 異なる数のコア
- コアごとに大幅に異なる処理機能
- 一般的に異なるシステムアーキテクチャ、たとえば。キャッシュ、RAM、およびI / Oアクセスのさまざまなレイテンシ
システムをスレッドに割り当てようとする代わりに、タスクをスレッドに割り当てます。各タスクに実行に必要なデータを与え、利用可能なハードウェアにタスクをファームします。通常、さまざまなコアまたはプロセッサを抽象化するためのある種のスレッドプールと、タスクのキューを持ち、スレッドが前のタスクを終了したことを通知したときにさまざまなスレッドにそれらを渡すタスクマネージャーがあります新しいものの準備ができています。より多くのコアを備えたハードウェアは、明らかにタスクをより迅速に完了し、より迅速にレンダリングできるようになります。異なる特性を持つシステムで最適に動作するようにこのシステムを特化することは、高度な最適化の問題になりますが、特定のヒューリスティックに基づいている場合があります(たとえば、
ただし、ゲーム機能を個別のタスクに分解することは非常に複雑な問題であり、パフォーマンスが必要であることが確実でない限り、努力する価値がないことが多いため、ほとんどの人はそれを試みさえしません。
さらにいくつかの読書:
http://www.gamasutra.com/view/feature/1830/multithreaded_game_engine_.php-「データ並列」セクションを参照してください。このモデルでは、データは複数の同一のタスクに分割され、個々のスレッドにファームアウトされます。
http://software.intel.com/en-us/articles/designing-the-framework-of-a-parallel-game-engine/-非常に高密度で、ゲームレベルではなくOSレベルで説明します。
http://drdobbs.com/high-performance-computing/216500409-ゲーム固有ではありませんが、タスクを分割する方法を説明するという点で完全に関連しています。
http://www.itfgaming.com/news/tech-focus-crysis-2-and-the-future-of-cryengine-3-このインタビューの半分は、彼らがタスクベースのシステムにどのように移行したかについての逸話です。