Direct3D* 12 概要 パート 7: ダイナミック・ヒープ

ゲーム特集

この記事は、インテル® デベロッパー・ゾーンに公開されている「Direct3D 12 Overview Part 7: Dynamic Heaps」(https://software.intel.com/en-us/blogs/2014/08/27/direct3d-12-overview-part-7-dynamic-heaps) の日本語参考訳です。


パート 6 では、D3D 12 において、コマンドリストがどのように効率良くマルチスレッドで描画を行うかを説明しました。複数のスレッドが、並列にコマンドリストを生成し、GPU 上でシリアル実行するためコマンドキューに送出することができます。では、ダイナミック・ヒープについて説明していきます。

以前の記事で説明したように、ゲームがコマンドを並列に生成することによりリソースリネームを制御しています。さらに、リソースリネームは D3D 12 で容易になりました。D3D 11 は、バーテックス、定数もしくはインデックス・バッファーの型付バッファーを提供していました。ゲーム開発者がたびたび D3D 開発チームに対して行った要求は、予約済みメモリーを定義できる機能でした。D3D 12 のバッファーはもはや型を持たないため、まさに開発者の望んだようになったと言えるでしょう。これは、ゲームが必要に応じてフレーム (もしくは複数のフレーム) を処理するため、必要なサイズを割り当てることができるメモリーチャンクです。より効率良いプロセスを生成するため、ヒープ・アロケーターを割り当て、必要に応じて細分化できます。また、D3D 12 は標準的なアライメントを持ち、ゲームはこの標準アライメントをすべての GPU に使用してデータを読み込むことができます。私たちは、パソコンの領域で容易に CPU や GPU そしてその他ハードウェアの多くの種類に渡ってうまく動作するコンテンツを作成するには、さらなる標準化が必要であることを理解しています。また、メモリーも常に CPU に通知されるアドレスにマッピングされます。さらなる CPU の並列処理を可能にすると、スレッドはそのメモリーに CPU を割り当て、CPU はどのようなデータがフレームで必要であるかを推測できます。タスクは、より効率良い描画のためゲームによって並列化できます。

図の上は、D3D 11 における型付バッファースタイルです。下は、ゲームによって制御される D3D 12 の新しいヒープによるモデルです。それぞれの型付バッファーがメモリーの異なる場所に配置されるのに変わり、一貫した一か所のメモリーを観察できます。そのバッファーサイズは、現在の、もしくは数フレームの描画の要求に応じて、ゲームによって調整されます。

次のパート 8 では、CPU の並列性について説明します。

図とコード例は、BUILD 2014 のプレゼンテーションから抜粋しました。マイクロソフトの D3D 開発リードである Max McCullen によるプレゼンテーションから抜粋したものです。

コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

タイトルとURLをコピーしました