共用方式為


共用堆積

共用對於多進程和多配接器架構很有用。

共用概觀

共用堆積可啟用兩件事:跨一或多個進程在堆積中共享數據,並排除對堆積內資源未定義的紋理配置不具決定性選擇。 跨配接器共用堆積也不需要CPU封送處理數據。

可以共用堆積和認可的資源。 共用認可的資源實際上會與認可的資源描述共用隱含堆積,讓相容的資源描述可以對應至另一個裝置的堆積。

所有方法都是自由線程,並繼承NT句柄共用設計的現有 D3D11 語意。

跨進程共用堆積

共用堆積是使用D3D12_HEAP_FLAGS列舉D3D12_HEAP_FLAG_SHARED成員來指定。

CPU 可存取堆積不支持共用堆積:D3D12_HEAP_TYPE_UPLOAD、D3D12_HEAP_TYPE_READBACK,以及沒有D3D12_CPU_PAGE_PROPERTY_NOT_AVAILABLE的D3D12_HEAP_TYPE_CUSTOM。

排除未定義紋理配置的非決定性選擇可能會大幅損害某些 GPU 上的延遲轉譯案例,因此這不是放置和認可的資源的默認行為。 某些 GPU 架構上的延後轉譯會受損,因為決定性紋理配置可同時轉譯為相同格式和大小的多個轉譯目標紋理時,降低達到的有效記憶體頻寬。 GPU 架構會逐漸遠離利用不具決定性的紋理版面配置,以支援標準化的旋轉模式和標準化版面配置,以有效率地進行延後轉譯。

共用堆積也隨附其他次要成本:

  • 由於資訊洩漏考慮,共用堆積數據無法像同進程堆積一樣靈活回收,因此物理記憶體會更頻繁地回收。
  • 在建立和銷毀共用堆積期間,會有一些額外的CPU額外負荷和增加的系統記憶體使用量。

跨配接器共用堆積

使用D3D12_HEAP_FLAGS列舉D3D12_HEAP_FLAG_SHARED_CROSS_ADAPTER成員來指定跨適配卡的共享堆積。

交叉配接器共用堆積可讓多個配接器共享數據,而不需要CPU封送處理它們之間的數據。 雖然不同的配接器功能可決定適配卡在兩者之間傳遞數據的方式,但只啟用 GPU 複本會增加達到的有效頻寬。 即使不支援這類紋理配置,在交叉配接器堆積上允許某些紋理配置支援紋理數據的交換。 某些限制可能適用於這類紋理,例如僅支持複製。

交叉配接器共用適用於呼叫ID3D12Device::CreateHeap所建立的堆積 然後,您的應用程式可以透過 CreatePlacedResource 建立資源。 CreateCommittedResource建立的資源/堆積也允許它,但僅適用於數據列主要D3D12_RESOURCE_DIMENSION_TEXTURE2D資源(請參閱D3D12_RESOURCE_DIMENSION)。 交叉配接器共用不適用於 CreateReservedResource

針對跨配接器共用,所有一般跨佇列資源分享規則仍適用。 您的應用程式必須發出適當的障礙,以確保兩個適配卡之間的適當同步處理和一致性。 您的應用程式應該使用交叉配接器柵欄來協調提交至多個配接器的命令清單排程。 沒有機制可跨 D3D API 版本共用跨配接器資源。 系統記憶體僅支援跨配接器共享資源。 D3D12_HEAP_TYPE_DEFAULT堆積和D3D12_HEAP_TYPE_CUSTOM堆積支援跨適配卡共用堆積/資源(具有 L0 記憶體集區和寫入合併 CPU 頁面屬性)。 驅動程式必須確定跨適配卡共享堆積的 GPU 讀取/寫入作業與系統上的其他 GPU 一致。 例如,驅動程式可能需要從 GPU 快取中排除堆積數據,而當 CPU 無法直接存取堆積數據時,通常不需要排清。

您的應用程式應將交叉配接器堆積的使用限制為僅需要其提供功能的案例。 交叉配接器堆積位於 D3D12_MEMORY_POOL_L0,這不一定是 GetCustomHeapProperties 所建議的。 該記憶體集區對離散/NUMA 配接器架構沒有效率。 而且,最有效率的紋理配置不一定可供使用。

下列限制也適用於:

  • 與堆積層相關的堆積旗標必須D3D12_HEAP_FLAG_ALLOW_ALL_BUFFERS_AND_TEXTURES。
  • 也必須設定D3D12_HEAP_FLAG_SHARED。
  • 必須設定D3D12_HEAP_TYPE_DEFAULT或使用 D3D12_MEMORY_POOL_L0 D3D12_HEAP_TYPE_CUSTOM,且必須設定D3D12_CPU_PAGE_PROPERTY_NOT_AVAILABLE。
  • 只有具有D3D12_RESOURCE_FLAG_ALLOW_CROSS_ADAPTER的資源可以放在交叉配接器堆積上。
  • 指定D3D12_HEAP_FLAG_SHARED_CROSS_ADAPTER時,無法將受保護的會話傳遞至堆積的建立

如需使用多個配接器的詳細資訊,請參閱 多配接器系統 一節。