マルチアダプター システム
複数のアダプターがインストールされているシステムのDirect3D 12のサポートについて説明します。アプリケーションが複数の GPU アダプターを明示的に対象とするシナリオと、ドライバーがアプリケーションの代わりに複数の GPU アダプターを暗黙的に使用するシナリオについて説明します。
マルチアダプターの概要
GPU アダプターには、Direct3D 12をサポートする任意の製造元の任意のアダプター (グラフィックスまたはコンピューティング、ディスクリートまたは統合) を使用できます。
複数のアダプターが ノードとして参照されます。 キューなどの要素の数が各ノードに適用されるため、2 つのノードがある場合、既定の 3D キューが 2 つになります。 パイプラインの状態やルート署名、コマンド署名などの他の要素は、図に示すように、1 つ以上またはすべてのノードを参照できます。
アダプター間でのヒープの共有
「共有ヒープ」トピックを参照してください。
マルチアダプター API とノード マスク
以前の Direct3D API と同様に、リンクされたアダプターの各セットは 1 つの IDXGIAdapter3 オブジェクトとして列挙されます。 リンク内のすべてのアダプターにアタッチされたすべての出力は、単一の IDXGIAdapter3 オブジェクトにアタッチされたのものとして列挙されます。
アプリケーションは、 ID3D12Device::GetNodeCount を呼び出すことによって、特定のデバイスに関連付けられている物理アダプターの数を決定できます。
Direct3D 12の多くの API は、ノード マスク (ビット マスク) を受け入れます。これは、API 呼び出しが参照するノードのセットを示します。 各ノードには、0 から始まるインデックスがあります。 ただし、ノード マスクでは、0 はビット 1 に変換されます。1 はビット 2 に変換されます。などなど。
単一ノード
次の (単一ノード) API を呼び出すとき、アプリケーションは API 呼び出しが関連付けられる単一のノードを指定します。 ほとんどの場合、これはノード マスクによって指定されます。 マスク内の各ビットは、単一ノードに対応します。 このセクションで説明するすべての API では、ノード マスクに 1 ビットを設定する必要があります。
- D3D12_COMMAND_QUEUE_DESC : NodeMask メンバーを持ちます。
- CreateCommandQueue : D3D12_COMMAND_QUEUE_DESC 構造体からキューを作成します。
- CreateCommandList: 1 つの nodeMask パラメーターを取ります。
- D3D12_DESCRIPTOR_HEAP_DESC : NodeMask メンバーを持ちます。
- CreateDescriptorHeap : D3D12_DESCRIPTOR_HEAP_DESC 構造体から記述子ヒープを作成します。
- D3D12_QUERY_HEAP_DESC : には NodeMask メンバーがあります。
- CreateQueryHeap : D3D12_QUERY_HEAP_DESC 構造体からクエリ ヒープを作成します。
複数のノード
次の (複数のノード) API を呼び出すとき、アプリケーションは API 呼び出しを関連付けるノードのセットを指定します。 ノード アフィニティはノード マスクとして指定します。複数のビットが設定されている可能性があります。 アプリケーションがこのビット マスクに対して 0 を渡した場合、Direct3D 12 ドライバーはその値をビット マスク 1 に変換します (オブジェクトがノード 0 に関連付けられていることを示します)。
- D3D12_CROSS_NODE_SHARING_TIER : クロス ノード共有のサポートを決定します。
- D3D12_FEATURE_DATA_D3D12_OPTIONS : D3D12_CROSS_NODE_SHARING_TIERを参照する構造体。
- D3D12_FEATURE_DATA_ARCHITECTURE : NodeIndex メンバーが含まれています。
- D3D12_GRAPHICS_PIPELINE_STATE_DESC : には NodeMask メンバーがあります。
- CreateGraphicsPipelineState : D3D12_GRAPHICS_PIPELINE_STATE_DESC 構造体からグラフィックス パイプライン状態オブジェクトを作成します。
- D3D12_COMPUTE_PIPELINE_STATE_DESC : NodeMask メンバーがあります。
- CreateComputePipelineState : D3D12_COMPUTE_PIPELINE_STATE_DESC 構造体からコンピューティング パイプライン状態オブジェクトを作成します。
- CreateRootSignature: 1 つの nodeMask パラメーターを取ります。
- D3D12_COMMAND_SIGNATURE_DESC: NodeMask メンバーがあります。
- CreateCommandSignature : D3D12_COMMAND_SIGNATURE_DESC 構造体からコマンド 署名オブジェクトを作成します。
リソース作成 API
次の API はノード マスクを参照します。
- D3D12_HEAP_PROPERTIES: CreationNodeMask メンバーと VisibleNodeMask メンバーの両方があります。
- GetResourceAllocationInfo: 1 つの visibleMask パラメーターを持ちます。
- GetCustomHeapProperties: 1 つの nodeMask パラメーターを持ちます。
予約済みリソースを作成する場合、ノード インデックスまたはマスクは指定されません。 予約済みリソースは、任意のノード上のヒープ上で (クロスノード共有の規則に従って) マップできます。
MakeResident メソッドはアダプター キューで内部的に動作します。アプリケーションでこれを指定する必要はありません。
次の ID3D12Device API を呼び出すとき、API 呼び出しがすべてのノードに適用されるため、API 呼び出しが関連付けられるノードのセットをアプリケーションで指定する必要はありません。
- CreateFence
- GetDescriptorHandleIncrementSize
- SetStablePowerState
- CheckFeatureSupport
- CreateSampler
- CopyDescriptors
- CopyDescriptorsSimple
- CreateSharedHandle
- OpenSharedHandleByName
- OpenSharedHandle: パラメーターとして 1 つの "フェンス" を持ちます。 パラメーターとして 1 つの "リソース" または 1 つの "ヒープ" を持つこのメソッドでは、以前に作成したオブジェクトからノード マスクが継承されるため、パラメーターとしてノードを受け入れません。
- CreateCommandAllocator
- CreateConstantBufferView
- CreateRenderTargetView
- CreateUnorderedAccessView
- CreateDepthStencilView
- CreateShaderResourceView
関連トピック
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示