Share via


D3D12_FEATURE_DATA_ARCHITECTURE1 구조체(d3d12.h)

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

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

구문

typedef struct D3D12_FEATURE_DATA_ARCHITECTURE1 {
  UINT NodeIndex;
  BOOL TileBasedRenderer;
  BOOL UMA;
  BOOL CacheCoherentUMA;
  BOOL IsolatedMMU;
} D3D12_FEATURE_DATA_ARCHITECTURE1;

멤버

NodeIndex

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

TileBasedRenderer

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

UMA

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

CacheCoherentUMA

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

IsolatedMMU

SAL: Out

하드웨어 및 드라이버가 격리된 MMU(메모리 관리 단위)를 지원하는지 여부를 지정합니다. GPU가 MEM_WRITE_WATCH(자세한 내용은 VirtualAlloc 참조) 및PAGE_READONLY 같은 CPU 페이지 테이블 속성을 적용하는 경우 런타임은 이 멤버를 TRUE로 설정합니다(자세한 내용은 메모리 보호 상수 참조).

TRUE이면 GPU가 예기치 않은 방식으로 이러한 페이지 테이블 속성을 트리거할 수 있으므로 애플리케이션은 GPU에서 이러한 페이지 테이블 속성과 함께 메모리를 사용하지 않아야 합니다. 예를 들어 GPU 쓰기 작업은 애플리케이션이 예상하는 것보다 더 거칠 수 있으며, 특히 셰이더 내에서 씁니다. GPU 쓰기가 어떤 영향을 미쳤는지 명확하지 않은 경우에도 특정 쓰기 watch 페이지가 더티 나타날 수 있습니다. 업로드 및 읽기 저장 힙 사용 시나리오와 관련된 GPU 작업은 쓰기 watch 페이지에서 잘 작동하지만 경우에 따라 무시해도 되는 가양성 생성이 발생할 수 있습니다.

설명

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 어댑터는 기본 및 업로드 힙의 CPU 액세스 없음 및 쓰기 결합 속성을 모두 활용할 수 있습니다. 자세한 내용은 GetCustomHeapProperties 를 참조하세요.

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

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

요구 사항

요구 사항
헤더 d3d12.h

추가 정보

핵심 구조체

D3D12_FEATURE