DirectX 12 D3D12は、GPUまたはCPUへのメモリ割り当てを動的に制御できる新機能を取得します

ハードウェア / DirectX 12 D3D12は、GPUまたはCPUへのメモリ割り当てを動的に制御できる新機能を取得します 読んだ3分

DirectX 12



Windows 10 OSの今後のメジャーアップデートでは、DirectX12、より具体的にはDirect3D(D3D12)が 1つではなく新しいフラグを取得する これにより、メモリリソースの割り当て方法が変わります。 Microsoftは、メモリと処理能力がアプリケーションによって要求され、アプリケーションに割り当てられる方法について当然のことながら懸念しているようです。これにより、ボトルネックが発生することがよくあります。ちなみに、これらの新しいフラグはメモリに直接影響を与えるのではなく、割り当てと管理の方法に影響を与えます。

マイクロソフトは、デスクトップゲームの主要な標準であるDirectXプラットフォームの最新バージョンを積極的に開発してきました。 Microsoft DirectX 12の最新バージョンは、最近いくつかの新機能を取得しています。最近、私たちは DirectX12の最も顕著で重要な新機能 これは、開発者とエンドユーザーに大きなメリットをもたらします。今週、Microsoftは、Windows 10の次のメジャーアップデートに、DirectX12Direct3Dの2つの新しいフラグを含める必要があることを示しました。興味深いことに、今日同じことを探求したい開発者は、Windows InsiderProgramから最新のWindows10 InsiderPreviewビルドとSDKPreview Build for Windows 10(20H1)をダウンロードしてインストールするだけです。



Windows 10 DirectX 12 Direct3Dは、CPUとGPU間の動的メモリ割り当てのための2つの新しいフラグを取得します。

今後のWindows10の更新では、D3D12はD3D12_HEAP_FLAG列挙に2つの新しいフラグを追加します。ちなみに、これらの新しいフラグは「永続的」なプロパティです。簡単に言えば、これは、新しいフラグが結果のメモリ自体に直接影響を与えないことを意味します。代わりに、新しいフラグはメモリの割り当て方法に影響します。さらに、これらのフラグはから反映されません ID3D12Heap :: GetDesc または ID3D12Resource :: GetHeapProperties



D3D12_HEAP_FLAG_CREATE_NOT_RESIDENT:

現在の反復では、開発者がD3Dにヒープまたはコミットされたリソースを割り当てるように要求するたびに、オブジェクトを取り戻す前に最後に発生するのは、メモリが常駐することです。これは非常に似ています ID3D12Device :: MakeResident 実行されています。言うまでもなく、このようなプロセスには2つの問題があります。



  1. デザインは、メモリが完全に使用できるようになるまでCPUスレッドをブロックします。これは理想的または望ましい状況ではありません
  2. このプロセスにより、開発者は、現在のプロセス予算が使用すべきであると示している範囲を超えて、メモリをオーバーコミットすることもできます。

新しく追加された ID3D12Device3 :: EnqueueMakeResident アプリがさまざまな選択を行えるようにします。アプリは、CPUではなくGPUを使用して常駐を待機するか、予算超過ではなく常駐操作の失敗を要求する可能性があります。非常駐状態でメモリを割り当てると、リソースの最初の使用に両方の利点がもたらされます。

D3D12_HEAP_FLAG_CREATE_NOT_ZEROED:

このフラグは、受信したD3Dによって新しく作成されたリソースとヒープをコミットしたゼロ化されたコンテンツに対処しようとします。 Microsoftは、ゼロ化せずに特定のプロセスの範囲を離れることのなかったメモリの再利用を可能にすることで、このプロセスを最適化しようとしました。ただし、これはうまく機能せず、Microsoftのエンジニアはゼロにされたメモリのみを返すように強制されました。言うまでもなく、メモリマネージャは、メモリを開発者に返して再利用する前に、メモリに明示的にゼロを書き込む必要があるため、この方法は非常に面倒でした。

プロセスを最適化する方法として、開発者は、ヒープ/リソースの割り当て中に新しいフラグを指定するだけで、面倒なプロセスをオプトアウトすることができます。基本的に、動的再割り当ては、必須の常時ゼロ化プロセスを最小限に抑え、開発者のプロセスが再ゼロ化プロセスを強制することなく使用していた解放されたメモリを割り当てることができます。



Microsoftはすでにこれらの新しいフラグを追加しており、新しいドライバーは必要ありません。また、専用はありません CheckFeatureSupport これらのオプション。基本的に、これらの新しいフラグは、ID3D12Device8が公開されているとき、またはD3D12_FEATURE_D3D12_OPTIONS7のチェックが成功したときにいつでも使用できます。すべての新しいフラグが要求するのは、開発者がそれらを理解するバージョンのD3D12でプロセスを実行する必要があるということです。

タグ ダイレクトX12 directx マイクロソフト ウィンドウズ