DirectX 12 の詳細 - DX12 の何が優れているのか?

これが Direct X12 のメリットです。実際にはどのような利点があり、誰が使用できるのでしょうか?

GameStar Plus を続ける


良いゲームがあなたにとって重要な場合。

ロールプレイング ヒーロー、ホビー全般、シングル プレイヤー ファン向けの、何がプレイされているかを知る専門家による特別レポート、分析、背景情報。あなたの利点:

GameStar のすべての記事、ビデオ、ポッドキャスト

バナーやビデオ広告は無料です

ネットで簡単に解約できる

DirectX 12 がもたらすものは次のとおりです。
• CPU オーバーヘッドの削減
• 3D パフォーマンスの向上
• ゲーム開発者にとってのハードウェアの近接性の向上
• マルチコア CPU の使用率が大幅に向上

ついにマルチコア化

DirectX は、ゲーム開発者にさまざまなオプションを提供する多数のソフトウェア インターフェイス (DirectDraw、Direct3D、DirectSound など) で構成されています。これらのインターフェイス (略して API) により、アプリケーション (ゲームなど) とコンピューターまたはコンソールのハードウェア コンポーネント間の通信が可能になります。 DirectX は、開発者がさまざまなハードウェア構成に合わせてプログラムできるように設計されました。たとえば、特定のオブジェクトをゲームで表現する必要があります。開発者は、さまざまなグラフィック カードに必要なコマンド セットをすべて実装することはできないため、インターフェイスとして Direct3D を使用します。つまり、コンピュータに DirectX をサポートするグラフィック カードがあれば、コマンドは認識されます。

DirectX の利点は、幅広いハードウェア向けに比較的簡単に開発できることです。ただし、DirectX は非常に複雑であるため、特定のハードウェア コンポーネントの実際に可能なパフォーマンスを完全に活用することはほとんど不可能です。さらに、直接的には、

さらに悪いことに、DirectX 11 は実質的に並列動作せず、DirectX リクエストの処理と描画呼び出しの送信時に、単一の CPU コアがほぼすべての作業を引き受け、残りのコアは未使用のままになるという事実があります。 「描画コール」とは、CPU がグラフィックス カードに送信する描画コマンドです。オブジェクトの色、サイズ、位置に関する情報が含まれています。 DirectX 11 にはマルチスレッドの最適化がないため、グラフィックス カードが大幅に多くの処理を実行できる場合でも、CPU は同時に数千の描画呼び出ししか送信できない場合があり、(CPU) ボトルネックが発生します。

へのリンクYouTube コンテンツ

DirectX 12、AMD の Mantle、およびそれをベースにした Vulkan (OpenGL の後継) などの下位レベルの API は、マルチスレッドでより適切に拡張できます。これは、特に、いわゆる「コマンド バッファリング」を処理する新しい方法を説明する「マルチスレッド コマンド バッファ記録」によって実現されます。これらのメモリ領域は、発生するコンピューティング タスクを管理し、次々に処理するためにプロセッサによって作成されます。 DirectX 11 では、ドライバーがどの「コマンド バッファー」コンテンツを計算するかを制御します。DirectX 12 では、開発者がこれを決定し、バッファーを複数の CPU コアに分散することもできます。このアプローチでは開発者の労力は増加しますが、同時に描画呼び出しを大幅に増やすことも可能になります。

さらなるグラフィックスパワー

将来的にプロセッサに加えてグラフィックス カードも DirectX 12 の恩恵を受けられるようにするために、AMD は、ブログエントリー「Asynchronous Shader」テクノロジーの利点も示します。たとえば、DirectX 11 では、グラフィックス、コンピューティング、およびメモリのコマンドがレンダー パイプラインに次々と並べられます。 DirectX 12 では、3 つのタスクすべてを並行して計算できるため、時間が節約され、効率が向上します。ただし、複数のスレッドに分割すると、複雑さが増し、コマンドの供給がより困難になります。

たとえば、DirectX 11 では、グラフィックス、コンピューティング、およびメモリのコマンドがレンダー パイプラインに次々と並べられます。

AMD は交通量の多い通りを例に挙げています。 DirectX 11 では、この道路への入り口は 1 つだけであり、車両 (反射など) は他の車両 (物理演算など) が通り過ぎるまで待たなければなりません。そうして初めて彼らは後ろに並ぶことができるので、渋滞が発生します。 DirectX 12 のマルチスレッド機能は、追加の入口ランプ (グラフィックス、コンピューティング、ストレージ) によって道路のイメージを拡張し、従来の信号機のようにアクセスを規制します。車両の 1 列が停止するよう合図され、もう 1 列が道路に移動します。

これにより、パイプラインへのコマンドの供給を制御しやすくなりますが、依然として信号渋滞が発生し、重要なコマンドと関連性の低いコマンドの区別がありません。 「PreEmption」などのアプローチ、つまり特定のコマンドを他のコマンドよりも優先する場合も、パイプライン内のフローを停止し続ける必要があるため、アイドル時間が発生します。さらに、さまざまな優先順位付けによる計算量によりオーバーヘッドが発生し、パフォーマンスが低下します。

複数のスレッドに分割すると、複雑さも増し、コ​​マンドの挿入がより困難になります。

ここで非同期シェーダが活躍します。道路の例では、非同期シェーダは、交通の隙間が空いたときを検出し、道路にコマンドを送信 (計算) する時計のようなものです。このジッパーの原理は、交通渋滞がないことを意味します。路上で 。これらのクロックは AMD では「ACE」(Asynchronous Compute Engine)と呼ばれており、2011 年から使用されています(Radeon HD 7970)「GCN アーキテクチャ」(Graphics Core Next)の一部。しかし、DirectX 11 はマルチスレッド向けに設計されていない厳格なワークフローのため、これまでほとんど使用できませんでした。 Mantle は長い間マルチスレッドをサポートしているため、ACE の恩恵も受けられますが、これまでのところ、ACE は PC でのみ利用できます。泥棒使用するために。