Video Memory Management and GQU Scheduling

Video Memory Management and GQU Scheduling

아래 색션은 비디오메모리관리와 그래픽프로세싱유닛 스케줄 모델에 관해 서술하고 있습니다.


Handling Memory Segments

아래의 주제들은 메모리세그먼트를 소개하고 윈도우비스타의 디스플레이 드라이버 모델에서 어떻게 사용 되는지 서술하고 있습니다.


Using Memory Segments to Dscribe the GPU Address Space

비디오 매니저가 GPU의 주소공간을 관리하기 전, 디스플레이 미니포트 드라이버는 가상비디오메모리자원을 일반화하기위해 메모리 세그먼트를 이용하여 GPU의 주소공간을을 형성해야 합니다. 드라이버는 하드웨어가 지원하는 메모리 타입에 따라 메모리 세그먼트를 설정할 수 있습니다. (예를들어 프레임버퍼 메모리 혹은 시스템 메모리 애퍼쳐) 드라이버 초기화동안, 드라이버는 메모리 자원이 비디오 메모리 메니저에 의해 어떻게 관리될 수 있는지에 대한 세그먼트타입 리스트를 반환해야 합니다. 드라이버는 지원할 세그먼트 타입의 수를 정하고 DxgkDdiQueryAdapterInfo 함수 호출로 응답함으로써 각각의 세그먼트 타입을 형성합니다. 드라이버는 DXGK_SEGMENTDESCRIPTOR 구조체를 이용하여 각 세그먼트를 형성합니다. 더 많은 정보는, Initializing Use of Memory Segments를 보세요. 드라이버는 각 메모리 세그먼트에 따라 세그먼트 아이덴티파이어를 배정합니다. 이후, 비디오 메모리 매니저가 비디오 리소스와 렌더링 리소스의 할당을 요청할 때, 드라이버는 요청과 명시를 지원 하는 세그먼트를 확인합니다. 더 많은 정보는 Specifying Segments Creating Allocations를 참고하세요. 드라이버는 ‘GPU가 사용가능한 모든 메모리 세그먼드관련 비디오 메모리 자원’의 명시를 요청하지 않습니다. 그러나, 드라이버는 ‘시스템상의 모든 프로세스 사이에서 비디오 메모리 메니저가 관리하는 모든 메모리 자원’을 명시해야만 합니다. 예를들어, 고정기능 파이프라인이 구현하는 버텍스 셰이더 마이크로코드는 비디오 메모리메니저의 관리밖이 아닌, GPU 주소공간안에 존재할 수 있습니다. 왜냐하면 마이크로코드는 항상 모든 프로세스에서 사용가능하고, 프로세스의 자원경쟁 사이에 있지 않기 때문입니다. 하지만 비디오 메모리메니저는 버테스버퍼, 텍스처, 렌더타겟 어플리케이션 명시 셰이더코드와 같은 비디오 메모리 자원들을 드라이버 메모리 세그먼트로부터 할당해야만 합니다. 왜냐하면 모든 프로세스에 맞춰 가용한 메모리타입이 존재해야 하기 때문입니다.아래 그램은 드라이버가 어떻게 GPU 주소공간에서 메모리 세그먼트를 설정하는지 보여줍니다.


Configuring Memory Segment Types

비디오 매니저가 GPU의 주소공간을 관리하기 전, 디스플레이 미니포트 드라이버는 가상비디오메모리자원을 일반화하기위해 메모리 세그먼트를 이용하여 GPU의 주소공간을을 형성해야 합니다. 드라이버는 하드웨어가 지원하는 메모리 타입에 따라 메모리 세그먼트를 설정할 수 있습니다. (예를들어 프레임버퍼 메모리 혹은 시스템 메모리 애퍼쳐) 드라이버 초기화동안, 드라이버는 메모리 자원이 비디오 메모리 메니저에 의해 어떻게 관리될 수 있는지에 대한 세그먼트타입 리스트를 반환해야 합니다. 드라이버는 지원할 세그먼트 타입의 수를 정하고 DxgkDdiQueryAdapterInfo 함수 호출로 응답함으로써 각각의 세그먼트 타입을 형성합니다. 드라이버는 DXGK_SEGMENTDESCRIPTOR 구조체를 이용하여 각 세그먼트를 형성합니다. 더 많은 정보는, Initializing Use of Memory Segments를 보세요. 드라이버는 각 메모리 세그먼트에 따라 세그먼트 아이덴티파이어를 배정합니다. 이후, 비디오 메모리 매니저가 비디오 리소스와 렌더링 리소스의 할당을 요청할 때, 드라이버는 요청과 명시를 지원 하는 세그먼트를 확인합니다. 더 많은 정보는 Specifying Segments Creating Allocations를 참고하세요. 드라이버는 ‘GPU가 사용가능한 모든 메모리 세그먼드관련 비디오 메모리 자원’의 명시를 요청하지 않습니다. 그러나, 드라이버는 ‘시스템상의 모든 프로세스 사이에서 비디오 메모리 메니저가 관리하는 모든 메모리 자원’을 명시해야만 합니다. 예를들어, 고정기능 파이프라인이 구현하는 버텍스 셰이더 마이크로코드는 비디오 메모리메니저의 관리밖이 아닌, GPU 주소공간안에 존재할 수 있습니다. 왜냐하면 마이크로코드는 항상 모든 프로세스에서 사용가능하고, 프로세스의 자원경쟁 사이에 있지 않기 때문입니다. 하지만 비디오 메모리메니저는 버테스버퍼, 텍스처, 렌더타겟 어플리케이션 명시 셰이더코드와 같은 비디오 메모리 자원들을 드라이버 메모리 세그먼트로부터 할당해야만 합니다. 왜냐하면 모든 프로세스에 맞춰 가용한 메모리타입이 존재해야 하기 때문입니다. 아래 그램은 드라이버가 어떻게 GPU 주소공간에서 메모리 세그먼트를 설정하는지 보여줍니다.


Configuring Memory Segment Types

비디오 메모리 매니저와 디스플에이 하드웨어는 특정 타입의 메모리세그먼트만 지원하며, 따라서 디스플레이 미디포트 드라이버는 그 타입들의 세그먼트만 설정할 수 있습니다. 디스플레이 미니포트 드라이버는 메모리공간과 애퍼처공간 세그먼트틀 설정할 수 있습니다.