23

私は CS の修士課程の学生で、次の学期には論文の作成を開始する必要があります。論文のアイデアを思いつくのに苦労しましたが、ゲーム開発に情熱を傾けていて、いつかプロのゲーム プログラマーとして働きたいと思っているので、コンピューター グラフィックスに関連するものにしようと決めました。

残念ながら、私は 3D コンピューター グラフィックスの分野に少し慣れていません。この分野の学部課程を受講しており、次の学期には上級課程を受講したいと考えています。また、さまざまな本や記事を読んで、より多くのことを学びました。それでも、私の指導教官は、私が今、一般的な論文のアイデアを思いつき、論文の提案を行う準備としてそれについて学ぶことに時間を費やした方が良いと考えています. スーパーバイザーはいくつかの良いアイデアを提供してくれましたが、自分でもっと面白いことをしたいと思っています。ゲームと関係があり、この分野についてもっと学ぶ機会が増えることを願っています. すでに完了しているかどうかは気にしません。私にとって論文は、物事について深く学び、自分自身で実質的な作業を行う機会です。

私は GPU プログラミングについてあまり詳しくなく、シェーダーや CUDA などの言語についてまだ学んでいます。私が思いついたアイデアの 1 つは、すべてのゲーム ロジック、AI、およびテストを含めて、GPU でゲーム全体 (または可能な限り) をプログラミングすることでした。これは、GPGPU に関する論文を読んで、このような質問に触発されたものです。私の知識ではそれがどれほど実現可能かはわかりません。また、上司は最近の GPU についてあまり詳しくありません。そのうち、この質問に自分で答えられるようになると思いますが、事前に答えを知っていれば、他のアイデアも検討できるので便利です。

ここまでできたら、私の質問です。シェーダーまたは CUDA のようなものだけを使用して、GPU の本来のパワーと並列性を活用する完全でシンプルな 3D ゲームを作成できますか? または、コードの大部分を常に CPU にバインドする GPU と CPU の間の制限または違いを見逃していますか? GPU で実行されている物理エンジンについて読んだことがありますが、それ以外はすべてそうではないのはなぜですか?

4

9 に答える 9

18

免責事項: 私は博士号を取得しましたが、自分の学生を指導したことはありません。

できるだけ多くのゲームを GPU に強制しようとすることは、プロジェクトを開始するための優れた方法だと思いますが、最終的に作業のポイントは次のようになるはずです。現在の状態は GPU にうまく適合しません: うまく適合するように変更した方法を次に示します

たとえば、fortran は、AI アルゴリズムは再帰に依存する傾向があるため問題であると述べました。確かに、これは必ずしも問題を解決するものではありません。再帰アルゴリズムを反復形式に変換する技術は、学界から好意的に見られており、論文の中心的な要素となるでしょう。

ただし、修士課程の学生は時間がないため、対象のカーネルを非常に迅速に特定する必要があります。マスターの結果の一部として、ゲーム全体を実際に GPU に適合させようとすることは気にしません。どの部分が適合しないかを確認するための演習として扱い、その部分だけに焦点を当てます。

ただし、監督者の選択には注意してください。上司に関連する経験がない場合は、経験のある他の人を選ぶ必要があります。

于 2009-11-24T12:18:48.467 に答える
5

GPU で完全に実行されるゲームボーイ エミュレーターをまだ待っています。ゲーム ROM 自体と現在のユーザー入力が供給され、ゲームを表示するテクスチャが生成されます。サウンド出力用の 2 番目のテクスチャかもしれません :)

主な問題は、永続ストレージ、ユーザー入力、または GPU からのオーディオ出力にアクセスできないことです。定義上、これらのパーツは CPU 上にある必要があります (HDMI を備えたカードにはオーディオ出力がありますが、GPU からは制御できないと思います)。それとは別に、すでにゲーム コードの大部分を GPU にプッシュすることができますが、3D ゲームには十分ではないと思います。3D データを GPU にフィードし、どのシェーダーがどの部分に適用されるべきかを伝える必要があるからです。 . GPU 上のデータにランダムにアクセスしたり、任意のコードを実行したりすることはできません。誰かがセットアップを行う必要があります。

以前は、ソース データ、結果データのレンダー ターゲット、および変換を行うピクセル シェーダーを使用してテクスチャをセットアップするだけでした。次に、シェーダーを使用してクワッドをレンダー ターゲットにレンダリングし、計算を実行してから、テクスチャを読み戻します (または、それをさらにレンダリングするために使用します)。今日では、第 4 世代と第 5 世代のシェーダー (Shader Model 4.0 および DirectX 11 に含まれるもの) によって物事が単純化されているため、より大きなシェーダーを使用して、より簡単にメモリにアクセスできます。しかし、それでも外部から設定する必要があり、フレーム間でデータを保持することに関して、現在はどうなっているのかわかりません。最悪の場合、CPU は GPU から読み返し、再度プッシュしてゲーム データを保持する必要がありますが、これは常に低速です。しかし、もしあなたが本当にそこにたどり着くことができれば、ゲームを実行するには、単一の一般的なセットアップ/レンダリング サイクルで十分です。ゲームは GPU 上で実行されると言えます。ただし、コードは通常のゲーム コードとはかなり異なります。GPU のパフォーマンスのほとんどは、GPU が同じプログラムを数百または数千の並列シェーディング ユニットで実行するという事実に由来し、特定の位置に画像を描画できるシェーダーを単に作成することはできません。ピクセル シェーダーは、定義上、常に 1 つのピクセルで実行され、他のシェーダーは任意の座標で実行できますが、ピクセルを処理しません。簡単ではないでしょうね。

私が言ったポイントを試してみることをお勧めします。私の意見では、最も重要なのはフレーム間で状態を保持することです。すべてのデータを保持できなければ、すべてが不可能だからです。

于 2009-11-24T10:43:09.517 に答える
3

まず、私はコンピューター エンジニアではないので、私の仮定は一粒の塩でさえありません。おそらくナノ スケールです。

  • 人工知能?問題ありません。Google で並行して実行されている無数のニューラル ネットワークの例があります。例: http://www.heatonresearch.com/encog
  • 経路探索?すでにインターネット上にあるいくつかの並列経路探索アルゴリズムを試すだけです。そのうちの 1 つ: https://graphics.tudelft.nl/Publications-new/2012/BB12a/BB12a.pdf
  • 描く?dx または gl と cuda または cl の相互運用性を使用して、描画が PCI レーンを超えないようにします。コーナーでレイトレーシングを行うこともできるため、Z ファイティングはもうありません。純粋なレイトレーシングされたスクリーンでも、低い深度制限を使用して主流の GPU で実行できます。
  • 物理?最も簡単な部分は、単純な Euler または Verlet 積分を反復し、エラーの次数が大きい場合は安定性を頻繁にチェックすることです。
  • マップ/地形生成? 必要なのは、メルセンヌ ツイスターと三角測量機だけです。
  • ゲームを保存する?もちろん、バッファに書き込む前にデータを並列に圧縮できます。次に、スケジューラがそのデータを DMA 経由で HDD に 1 つずつ書き込むので、遅延はありません。
  • 再帰?ローカル メモリではなく、メイン vram を使用して独自のスタック アルゴリズムを記述し、他のカーネルがウェーブフロントで実行でき、GPU 占有率が向上します。
  • 必要な整数が多すぎますか? float にキャストしてから、すべてのコアを使用して 50 ~ 100 の計算を実行し、結果を整数にキャストすることができます。
  • 分岐しすぎ?単純な場合は両方のケースを計算して、すべてのコアが一列に並び、同期して終了します。そうでない場合は、自分の分岐予測子を配置するだけで、次回は、独自の本物のアルゴリズムを使用してハードウェア (そうでしょうか?) よりも優れた予測を行うことができます。
  • メモリが多すぎる?システムに別の GPU を追加し、通信を高速化するために DMA チャネルまたは CF/SLI を開くことができます。
  • 私の意見では、GPU で疑似オブジェクトを構築するのは非常に奇妙で、ハードウェアに依存するため、最も難しいのはオブジェクト指向の設計です。オブジェクトはホスト (CPU) メモリで表現する必要がありますが、効率を高めるには GPU 内の多くの配列に分割する必要があります。ホスト メモリ内のオブジェクトの例: orc1xy_orc2xy_orc3xy。GPU メモリ内のオブジェクトの例: orc1_x__orc2_x__ ... orc1_y__orc2_y__ ...
于 2014-08-27T18:59:17.337 に答える
2

修士論文を書き始めるときは慣れていない主題とツールを使用して、修士論文を作成することは実行可能です。しかし、それは取る大きなチャンスです!

もちろん、修士論文は楽しいはずです。しかし最終的には、優秀な成績を収めることが不可欠であり、それは、すでに習得した難しいテーマに取り組むことを意味する場合があります。

同様に重要なのはあなたの上司です。彼らが興味を示している問題、つまり彼ら自身がよく知っている問題にあなたが取り組むことが不可欠です

あなたはかゆみを掻くための趣味の時間をたくさん持ってきました。将来も間違いなくもっと多くの趣味の時間を持てるでしょう。しかし、残念ながら修士論文の時間は趣味の時間ではありません。

于 2009-11-25T12:27:18.533 に答える
2

すでに完了しているかどうかは気にしません。私にとって論文は、物事について深く学び、自分自身で実質的な作業を行う機会です。

それでは、論文とは何かというあなたの考えは完全に間違っています。論文は独自の研究でなければなりません。--> 編集: 修士論文ではなく、博士論文について考えていました ^_^

あなたの質問について、GPU の命令セットと機能は、ベクトル浮動小数点演算に非常に固有のものです。通常、ゲーム ロジックは浮動小数点数をほとんど処理せず、多くのロジック (分岐と決定木) を処理します。

CUDA ウィキペディアのページを見ると、次のように表示されます。

C 言語の再帰フリー、関数ポインターフリーのサブセットを使用します。

そのため、基本的に再帰的な AI アルゴリズムをそこに実装することは忘れてください (経路探索の A* など)。スタックを使用して再帰をシミュレートできるかもしれませんが、明示的に許可されていない場合は、理由があるはずです。関数ポインタを持たないことは、ゲームの状態に応じてさまざまなアクションを処理するためにディスパッチ テーブルを使用する機能もいくらか制限します (チェーン化された if-else 構造を再度使用することもできますが、何か悪い匂いがします)。

言語のこれらの制限は、基本的なハードウェアがストリーミング処理タスクを実行すると考えられていることを反映しています。もちろん、回避策 (スタック、チェーン化された if-else) があり、理論的にはほぼすべてのアルゴリズムをそこに実装できますが、パフォーマンスが大幅に低下する可能性があります。

もう 1 つのポイントは、IO の処理に関するものです。既に述べたように、これはメイン CPU のタスクです (OS を実行するのはメイン CPU であるため)。

于 2009-11-24T11:20:27.400 に答える
1

複数のコアCPUとGPUをターゲットにしたゲームアーキテクチャを扱うプロジェクトは面白いと思います。これはまだ多くの作業が行われている分野だと思います。現在および将来のコンピュータハードウェアを利用するには、新しいゲームアーキテクチャが必要になります。私はGDC2008に行き、これに関連するいくつかの話がありました。Gamebryoには、計算を処理するためのスレッドを作成するという興味深いアプローチがありました。使用するコアの数を指定して、マルチコアである可能性のある他のライブラリを使い果たしないようにすることができます。計算はGPUも対象にできると思います。他のアプローチには、計算を並行して実行できるように、異なるコアの異なるシステムをターゲットにすることが含まれていました。例えば、話が提案した最初の分割は、レンダラーを独自のコアに配置し、ゲームの残りの部分を別のコアに配置することでした。他にももっと複雑な手法がありますが、基本的には、データをさまざまなコアにどのように取り込むかということになります。

于 2009-11-25T12:17:35.427 に答える
1

あなたが探しているかもしれないアプローチは、「汎用 GPU」の「GPGPU」と呼ばれます。良い出発点は次のとおりです。

このアプローチが目覚ましい成功を収めているという噂は数年前から出回っていますが、数年後には (CPU アーキテクチャが大幅に変更されて廃止されない限り) これが日常的な慣例になるのではないかと思います。

ここで重要なのは並列処理です。多数の並列処理ユニットが必要な問題がある場合。したがって、ニューラル ネットワークや遺伝的アルゴリズムは、GPU の能力を利用して攻撃するのに適した範囲の問題である可能性があります。暗号化ハッシュの脆弱性も探しているかもしれません (GPU で DES をクラックすることは素晴らしい論文になると思います:))。しかし、高速シリアル処理を必要とする問題は、GPU にはあまり適していないようです。したがって、ゲームボーイをエミュレートすることは範囲外かもしれません。(ただし、低電力マシンのクラスターをエミュレートすることは考慮される場合があります。)

于 2009-11-24T11:01:43.843 に答える
1

今日の GPU は非常に優れた計算能力を備えていますが、CUDA や OpenCL などの用途が制限されているにもかかわらず、CPU は一般的なものを計算するのにより適しています。特定の一般的なタスクを高速化するための SSE などの拡張機能があります。私が間違っていなければ、一部の GPU はハードウェアで 2 つの浮動小数点整数の除算を行うことができません。確かに、5 年前に比べて大幅に改善されています。

GPU で完全に実行するゲームを開発することは不可能です。何かを実行するには、ある段階で CPU が必要になりますが、ゲームのグラフィックス (および物理学さえも) だけでなく、GPU で実行することは確かに興味深いでしょう。 、PC 用のゲーム開発者は、さまざまなマシン仕様に対処しなければならないという最大の問題を抱えているため、後方互換性を組み込むことに制限する必要があり、事態が複雑になるという問題があります。システムのアーキテクチャは重要な問題になります。たとえば、Playstation 3 は、CPU と RAM、GPU とビデオ RAM の間で 1 秒間に数ギガバイトのスループットを実行できますが、GPU メモリにアクセスする CPU は 12MiB/ をわずかに超えるとピークに達します。秒。

于 2009-11-24T10:41:34.203 に答える