マルチアダプター システム

複数のアダプターがインストールされているシステムに対する Direct3D 12 のサポートについて説明します。アプリケーションが複数の GPU アダプターを明示的にターゲットとするシナリオと、ドライバーがアプリケーションに代わって複数の GPU アダプターを暗黙的に使用するシナリオについて説明します。

マルチアダプタの概要

GPU アダプターは、Direct3D 12 をサポートする任意のメーカーの任意のアダプター (グラフィックスまたはコンピューティング、個別または統合) にすることができます。

複数のアダプターは "ノード" として キューなどの要素の数が各ノードに適用されるため、2 つのノードがある場合、既定の 3D キューが 2 つになります。 パイプラインの状態、ルート、コマンド署名などの他の要素は、図に示すように、1 つ以上のノードまたはすべてのノードを参照できます。

各グラフィックス アダプターに適用されるキュー

アダプター間でのヒープの共有

共有ヒープ のトピックを参照してください。

マルチアダプタAPIとノードマスク

以前の Direct3D API と同様に、リンクされたアダプターの各セットは、単一の IDXGIAdapter3 オブジェクトとして列挙されます。 リンク内のすべてのアダプターにアタッチされたすべての出力は、単一の IDXGIAdapter3 オブジェクトにアタッチされたのものとして列挙されます。

アプリケーションは、 ID3D12Device::GetNodeCount を呼び出すことによって、特定のデバイスに関連付けられている物理アダプターの数を確認できます。

Direct3D 12 の多くの API は、API 呼び出しが参照するノードのセットを示す ノード マスク (ビット マスク) を受け入れます。 各ノードにはゼロベースのインデックスがあります。 ただし、ノード マスクでは、ゼロはビット 1 に変換され、1 はビット 2 に変換されます。

単一ノード

次の (単一ノード) API を呼び出す場合、アプリケーションは API 呼び出しが関連付けられる単一のノードを指定します。 ほとんどの場合、これはノード マスクによって指定されます。 マスク内の各ビットは、単一ノードに対応します。 このセクションで説明するすべての API では、ノード マスクに 1 ビットだけ設定する必要があります。

複数のノード

次の (複数ノード) API を呼び出す場合、アプリケーションは API 呼び出しが関連付けられるノードのセットを指定します。 ノード アフィニティをノード マスクとして指定します。複数のビットが設定される場合もあります。 アプリケーションがこのビット マスクに 0 を渡すと、Direct3D 12 ドライバーはそれをビット マスク 1 (オブジェクトがノード 0 に関連付けられていることを示す) に変換します。

リソース作成 API

次の API はノード マスクを参照します。

予約済みリソースを作成する場合、ノード インデックスまたはマスクは指定されません。 予約済みリソースは、任意のノード上のヒープ上で (クロスノード共有の規則に従って) マップできます。

メソッド MakeResident はアダプタ キューで内部的に動作するため、アプリケーションでこれに対して何かを指定する必要はありません。

次の ID3D12Device API を呼び出す場合、API 呼び出しはすべてのノードに適用されるため、アプリケーションでは API 呼び出しが関連付けられるノードのセットを指定する必要はありません。

Direct3D 12 プログラミング ガイド