메모리 세그먼트를 사용하여 GPU 주소 공간 설명

비디오 메모리 관리자(VidMm)는 GPU의 주소 공간을 관리합니다. 이렇게 하려면 커널 모드 디스플레이 미니포트 드라이버(KMD)가 메모리 세그먼트를 사용하여 VidMm에 대한 GPU의 주소 공간을 설명해야 합니다.

KMD는 비디오 메모리 리소스를 일반화하고 가상화하는 메모리 세그먼트를 만듭니다. 하드웨어에서 지원하는 메모리 유형(예: 프레임 버퍼 메모리 또는 시스템 메모리 조리개)에 따라 메모리 세그먼트를 구성할 수 있습니다.

드라이버 초기화 중에 KMD는 VidMm에서 메모리 리소스를 관리하는 방법을 설명하는 세그먼트 형식 목록을 반환해야 합니다. KMD는 해당 DxgkDdiQueryAdapterInfo 함수에 대한 호출에 응답하여 지원하는 세그먼트 형식의 수를 지정하고 각 세그먼트 형식을 설명합니다. 드라이버는 DXGK_SEGMENTDESCRIPTOR 구조를 사용하여 각 세그먼트를 설명합니다. 자세한 내용은 메모리 세그먼트 사용 초기화를 참조 하세요.

그 후 세그먼트의 수와 형식은 변경되지 않은 상태로 유지됩니다. VidMm:

  • 각 프로세스가 특정 세그먼트에서 리소스의 공평한 몫을 받도록 합니다.

  • 모든 세그먼트를 독립적으로 관리합니다.

세그먼트는 겹치지 않습니다. 따라서 VidMm은 애플리케이션이 다른 세그먼트에서 보유하는 리소스의 양에 관계없이 한 세그먼트에서 상당한 양의 비디오 메모리 리소스를 할당할 수 있습니다.

KMD는 각 메모리 세그먼트에 세그먼트 식별자를 할당합니다. 나중에 VidMm이 비디오 리소스에 대한 할당을 만들고 해당 리소스를 렌더링하도록 요청하면 KMD는 다음을 수행합니다.

  • 요청을 지원하는 세그먼트를 식별합니다.

  • 드라이버에서 VidMm을 사용하는 것을 선호하는 세그먼트를 순서대로 지정합니다.

자세한 내용은 할당을 만들 때 세그먼트 지정을 참조 하세요.

KMD가 메모리 세그먼트에서 GPU에서 사용할 수 있는 모든 비디오 메모리 리소스를 지정할 필요는 없습니다. 그러나 KMD는 시스템에서 실행되는 모든 프로세스 중 VidMm관리하는 모든 메모리 리소스를 지정해야 합니다. 예시:

  • 고정 함수 파이프라인을 구현하는 꼭짓점 셰이더 마이크로코드는 GPU 주소 공간에 있을 수 있지만 VidMm관리하는 메모리 외부(즉, 세그먼트의 일부가 아님)에 있을 수 있습니다. 마이크로 코드는 항상 모든 프로세스에서 사용할 수 있으며 프로세스 간의 경합의 원본이 되지 않으므로 이 구성이 가능합니다.

  • 꼭짓점 버퍼, 텍스처, 렌더링 대상 및 애플리케이션별 셰이더 코드 와 같은 리소스의 경우 VidMm 은 드라이버의 메모리 세그먼트 중 하나에서 비디오 메모리 리소스를 할당해야 합니다. 이 요구 사항은 모든 프로세스에서 리소스 종류를 상당히 사용할 수 있어야 하기 때문입니다.

다음 그림에서는 KMD가 GPU 주소 공간에서 메모리 세그먼트를 구성하는 방법의 예를 보여 줍니다.

GPU 주소 공간을 메모리 세그먼트로 분할하는 것을 보여 주는 다이어그램

그림의 숫자는 다음 메모리 세그먼트에 해당합니다.

  1. CPU에서 액세스할 수 있는 선형 세그먼트: 이 세그먼트는 CPU에서 액세스할 수 있으며 선형 주소 공간으로 구성됩니다.

  2. CPU에 액세스할 수 없는 선형 세그먼트: 이 세그먼트는 선형 주소 공간으로 구성되지만 CPU에서 액세스할 수 없습니다. CPU 액세스가 필요하지 않은 리소스에 사용됩니다.

  3. 읽기 전용 AGP 조리개 세그먼트: 이 세그먼트는 AGP(가속 그래픽 포트) 메모리에 대한 읽기 전용 액세스에 사용됩니다.

  4. 조리개 세그먼트: 이 세그먼트는 AGP 조리개를 통해 액세스되는 리소스에 사용됩니다.

숨겨진 상자는 KMD가 VidMm에 노출하지 않는 메모리 세그먼트를 나타냅니다. VidMm에서 숨겨진 비디오 메모리는 사용자 공간에 매핑하거나 특정 프로세스에서만 사용할 수 있습니다. 이렇게 하면 시스템에서 실행되는 모든 프로세스가 모든 메모리에 액세스해야 하는 가상 메모리의 기본 규칙이 중단됩니다.