Share via


D3D12_FEATURE_DATA_ARCHITECTURE 구조체(d3d12.h)

애플리케이션이 특정 어댑터 속성에 더 잘 최적화할 수 있도록 어댑터 아키텍처에 대한 세부 정보를 제공합니다.

참고 이 구조체는 D3D12_FEATURE_DATA_ARCHITECTURE1 구조체로 대체되었습니다. 애플리케이션이 Windows 10 버전 1703(크리에이터스 업데이트) 이상을 대상으로 하는 경우 대신 D3D12_FEATURE_DATA_ARCHITECTURE1(및 D3D12_FEATURE_ARCHITECTURE1)를 사용합니다.
 

구문

typedef struct D3D12_FEATURE_DATA_ARCHITECTURE {
  UINT NodeIndex;
  BOOL TileBasedRenderer;
  BOOL UMA;
  BOOL CacheCoherentUMA;
} D3D12_FEATURE_DATA_ARCHITECTURE;

멤버

NodeIndex

다중 어댑터 작업에서 디바이스의 실제 어댑터가 관련됨을 나타냅니다. 다중 어댑터 시스템을 참조하세요. NodeIndex 는 애플리케이션이 각 어댑터의 아키텍처에 대한 세부 정보를 검색할 수 있으므로 CheckFeatureSupport를 호출하기 전에 애플리케이션에 의해 채워집니다.

TileBasedRenderer

하드웨어 및 드라이버가 타일 기반 렌더러를 지원하는지 여부를 지정합니다. 하드웨어 및 드라이버가 타일 기반 렌더러를 지원하는 경우 런타임은 이 멤버를 TRUE 로 설정합니다.

UMA

하드웨어 및 드라이버가 UMA를 지원하는지 여부를 지정합니다. 하드웨어 및 드라이버가 UMA를 지원하는 경우 런타임은 이 멤버를 TRUE 로 설정합니다.

CacheCoherentUMA

하드웨어 및 드라이버가 캐시 일관성 UMA를 지원하는지 여부를 지정합니다. 하드웨어 및 드라이버가 캐시 일관성 UMA를 지원하는 경우 런타임은 이 멤버를 TRUE 로 설정합니다.

설명

UMA 및 CacheCoherentUMA를 사용하는 방법

D3D12 앱은 메모리 상주 관리 및 최적의 힙 속성 제공에 대해 염려해야 합니다. D3D12 앱은 D3D12_HEAP_TYPE_DEFAULT 힙의 리소스에 대한 상주만 관리하여 많은 GPU 아키텍처에서 간소화된 상태를 유지하고 합리적으로 잘 실행할 수 있습니다. 이러한 앱은 DXGI_MEMORY_SEGMENT_GROUP_LOCAL IDXGIAdapter3::QueryVideoMemoryInfo 를 호출하기만 하면 되며, D3D12_HEAP_TYPE_UPLOAD 및 D3D12_HEAP_TYPE_READBACK 동일한 메모리 세그먼트 그룹에서 오는 것을 관대해야 합니다.

그러나 이러한 간단한 디자인은 한계를 뛰어넘는 애플리케이션에 비해 너무 제한적입니다. 따라서 D3D12_FEATURE_DATA_ARCHITECTURE 애플리케이션이 기본 어댑터 속성에 더 잘 최적화하는 데 도움이 됩니다.

일부 애플리케이션은 불연속 어댑터에 대해 더 잘 최적화하고 시스템 메모리 및 비디오 메모리 예산을 관리하는 추가 복잡성을 고려해야 할 수 있습니다. 업로드 힙의 크기가 기본 텍스처의 크기와 다른 경우 메모리 사용률이 거의 두 배로 증가할 수 있습니다. 이러한 최적화를 지원할 때 애플리케이션은 두 개의 상주 예산을 검색하거나 UMAfalse임을 인식할 수 있습니다.

일부 애플리케이션은 통합/UMA 어댑터, 특히 모바일 디바이스에서 배터리 수명을 연장하는 데 관심이 있는 어댑터에 더 잘 최적화하려고 할 수 있습니다. UMA에서 항상 필요하지 않은 경우 간단한 D3D12 애플리케이션은 특성이 다른 힙 간에 데이터를 복사해야 합니다. 그러나 UMA 속성 자체에는 GPU 디자인의 모호한 회색 영역이 포함됩니다. UMA가 모든 GPU 액세스 가능 메모리를 CPU에 자유롭게 액세스할 수 있도록 만들 수 있다고 가정하지 마세요. CacheCoherentUMA라는 속성이 이러한 사고 유형에 더 밀접하게 부합합니다.

CacheCoherentUMAfalse이면 단일 상주 예산을 사용할 수 있지만 UMA 디자인은 일반적으로 세 가지 힙 특성의 이점을 누릴 수 있습니다. 메모리에 대한 CPU 액세스를 제공하는 업로드 및 읽기 저장 리소스 및 힙의 현명한 사용을 통해 리소스 복사를 제거할 기회가 있습니다. 하지만 이러한 기회는 명확하지 않습니다. 따라서 애플리케이션은 주의해야 합니다. 특정 디바이스 ID를 사용하거나 배제하는 것이 보증될 수 있으므로 다양한 "UMA" 시스템에서 실험하는 것이 좋습니다. GPU 메모리 아키텍처와 힙 유형이 캐시 속성으로 변환되는 방식을 이해하는 것이 좋습니다. 성공의 타당성은 각 프로세서가 데이터를 읽거나 쓰는 빈도, 데이터 액세스의 크기 및 지역성에 따라 달라질 수 있습니다. 고급 개발자의 경우: UMA 가 true이고 CacheCoherentUMAfalse인 경우 이러한 어댑터의 가장 고유한 특징은 업로드 힙이 여전히 쓰기 결합된다는 것입니다. 그러나 일부 UMA 어댑터는 기본 및 업로드 힙의 NO-CPU 액세스 및 쓰기 결합 속성을 모두 활용할 수 있습니다. 자세한 내용은 GetCustomHeapProperties 를 참조하세요.

CacheCoherentUMA가 true인 경우 애플리케이션은 힙의 특성을 포기하고 모든 곳에서 힙 업로드에 해당하는 사용자 지정 힙을 사용하는 것을 더 강력하게 즐겁게 할 수 있습니다. 더 많은 시나리오가 공유 사용의 이점을 활용하기 때문에 0 복사 UMA 최적화가 더 일반적으로 권장됩니다. 메모리 모델은 더 많은 시나리오와 광범위한 채택에 매우 도움이 됩니다. 혜택이 쉽게 얻을 수 없는 일부 코너 사례는 여전히 존재할 수 있지만 다른 옵션보다 훨씬 희귀하고 덜 해로워야 합니다. 고급 개발자의 경우: CacheCoherentUMA 는 메모리 계층 구조의 상당한 양의 캐시도 CPU와 GPU 간에 통합되거나 통합됨을 의미합니다. 가장 독특한 특징은 업로드 힙이 실제로 CacheCoherentUMA에 쓰기 저장된다는 것입니다. 이러한 아키텍처의 경우 업로드 힙에서 쓰기 결합을 사용하는 것은 일반적으로 해로울 수 있습니다.

대부분의 단일 어댑터 애플리케이션에서는 하위 수준 세부 정보를 무시해야 합니다. 일반적으로 단일 어댑터 애플리케이션은 환경을 간소화하고 힙 업로드를 위해 CPU 쓰기가 쓰기 결합에 친숙한 패턴을 사용하도록 할 수 있습니다. 하위 수준 세부 정보는 다중 어댑터 애플리케이션에 대한 개념을 강화하는 데 도움이 됩니다. 다중 어댑터 애플리케이션은 어댑터 간에 데이터를 효율적으로 이동하기 위해 최적의 사용자 지정 힙 속성을 선택할 수 있을 만큼 어댑터 아키텍처 속성을 잘 이해해야 할 수 있습니다.

요구 사항

요구 사항
헤더 d3d12.h

추가 정보

핵심 구조체

D3D12_FEATURE