다음을 통해 공유


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 쓰기가 어떤 영향을 미쳤는지 명확하지 않은 경우에도 특정 쓰기 조사식 페이지는 더러워 보일 수 있습니다. 업로드 및 읽기 저장 힙 사용 시나리오와 관련된 GPU 작업은 쓰기-조사식 페이지에서 잘 작동하지만 경우에 따라 무시해도 되는 가양성 생성이 발생할 수 있습니다.

발언

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 애플리케이션이 기본 어댑터 속성을 더 잘 최적화하는 데 도움이 됩니다.

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

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

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

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

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

요구 사항

요구
헤더 d3d12.h

참고 항목

핵심 구조

D3D12_FEATURE