다음을 통해 공유


MCDM 아키텍처

MCDM(Microsoft Compute Driver Model) 드라이버는 Windows 플랫폼에서 고성능 컴퓨팅 작업을 지원하도록 설계된 프레임워크입니다. 병렬 처리 작업에 GPU, NPU 및 기타 컴퓨팅 리소스를 사용할 수 있는 드라이버를 개발하기 위한 표준화된 인터페이스를 제공합니다. MCDM 드라이버는 과학 시뮬레이션, 데이터 분석 및 기계 학습과 같은 집중적인 계산 능력이 필요한 애플리케이션에 필수적입니다.

이 문서에서는 MCDM 아키텍처 개념을 설명합니다. MCDM 드라이버 또는 컴퓨팅 전용 드라이버에는 커널 모드 드라이버(.sys 드라이버)와 사용자 모드 DLL(동적 연결 라이브러리)이 모두 있습니다.

다음을 참조하세요.

명령 큐

명령 큐작업 제출에 사용되는 DirectCompute 구문입니다. 드라이버는 하나 이상의 컨텍스트를 만든 다음 제출된 작업의 실행을 수행하는 데 사용합니다. 드라이버는 DDI 호출을 통해 표현된 작업을 DMA 버퍼전환한 다음 실행을 위해 컨텍스트제출하는 작업을 담당합니다.

Context

컨텍스트는 인스턴스별 상태의 엔진을 대상으로 하는 드라이버가 제출한 계산 작업의 큐입니다. 계산 작업은 엔진에 제출을 기다리는 SW 큐보관되는 DMA 버퍼표현됩니다.

SW 큐

컨텍스트에 실행을 위해 제출된 DMA 버퍼는 SW 큐보관됩니다. SW 큐의 길이는 리소스로만 제한됩니다. 컨텍스트와 해당 SW 큐 사이에는 일대일 연결이 있습니다. Scheduler는 SW 큐에서 DMA 버퍼를 제거하고 버퍼를 적절한 엔진에 제출하여 버퍼를 자체 HW 큐에 배치합니다.

Scheduler

SchedulerOS에 의해 구현되며 드라이버는 이 예약을 제어할 수 없습니다.

Scheduler는 엔진을 대상으로 하는 SW 큐에서 큐에 넣은 작업을 예약합니다. 모든 SW 큐에서 제한된 엔진 리소스를 공정하게 사용하고 필요에 따라 선점하여 이러한 공정성을 보장하고 우선 순위가 높은 작업이 적시에 완료되도록 합니다.

Scheduler선점하는 경우 선점된 작업을 적절하게 다시 큐에 다시 큐에 저장해야 합니다.

엔진

엔진은 DMA 버퍼 시퀀스로 표현된 작업을 완료하는 데 필요한 작업을 실행합니다.DMA 버퍼 는 지정된 컨텍스트주소 공간에서 실행됩니다. 엔진은 DMA 버퍼실행이 완료된 시기를 나타내야 하며 이러한 표시는 DMA 버퍼가 수신된 순서와 동일한 순서로 지정되어야 합니다.

엔진은 DMA 버퍼에 명시적 또는 암시적 종속성이 없는 경우 독립적으로 진행을 수행할 수 있어야 합니다. 둘 이상의 엔진 이 있는 경우 각 엔진의 작업이 다른 엔진에서 수행되는 작업의 손상 없이 적시에 진행된다는 가정하에 예약됩니다.

DMA 버퍼는 지정된 주소 공간으로 실행되므로 각 엔진이 서로 다른 주소 공간에서 DMA 버퍼를 실행할 수 있는 경우에만 여러 엔진지원합니다.

드라이버는 보고하는 엔진 수와 해당 엔진이 만드는 컨텍스트에서 이러한 엔진을 사용하는 방법을 결정합니다.

HW 큐

엔진에는 개념적으로 HW 큐라는 큐에 배치되는 일련의 DMA 버퍼제공됩니다. 현재 이 큐는 최대 두 개의 DMA 버퍼 항목으로만 채워집니다. 엔진제출 순서대로 DMA 버퍼를 완료해야 합니다.

선점

엔진부분적으로 완료된 DMA 버퍼의 실행을 중단하거나 취소할 수 있도록 선점할 수 있어야 합니다.

미해결 작업을 선점하도록 요청된 경우 엔진 은 부분적으로 완료된 DMA 버퍼 의 완료를 최소한으로 지원하고 아직 시작되지 않은 모든 DMA 버퍼를 취소해야 합니다.

DMA 버퍼의 완료 또는 선점 표시는 DMA 버퍼가 제출된 순서대로 계속 수행해야 합니다. DMA 버퍼가 선점되면 모든 후속 DMA 버퍼(현재 최대 하나의 다른 버퍼)도 선점됩니다.

DMA 버퍼부분적으로 실행되는 경우 드라이버는 실행 재개에 충분한 정보를 저장해야 합니다.

DMA 버퍼

드라이버는 DDI 호출을 통해 제출된 작업을 DMA 버퍼변환한 다음 실행을 위해 제출합니다. 엔진은 DMA 버퍼 시퀀스로 표현된 작업을 완료하는 데 필요한 작업을 실행합니다.DMA 버퍼 는 지정된 컨텍스트주소 공간에서 실행됩니다. 엔진은 DMA 버퍼실행이 완료된 시기를 나타내야 하며 이러한 표시는 DMA 버퍼가 수신된 순서와 동일한 순서로 지정되어야 합니다.

주소 공간

주소 공간은 가상 디바이스 주소를 실제 디바이스 주소에 매핑하는 데 사용됩니다. 단일 주소 공간 은 각 호스트 쪽 프로세스에 사용됩니다.

엔진은 프로세스 간에 공유 리소스이므로 DMA 버퍼가 다른 프로세스에서 실행되므로 주소 공간 간의 전환을 지원해야 합니다.

하나의 주소 공간 만 지원하는 디바이스는 사용 방법을 제한해야 합니다. 한 번에 하나의 프로세스만 디바이스를 사용할 수 있습니다. 한 프로세스가 디바이스를 사용하는 동안 다른 프로세스에서 디바이스에 액세스하려는 모든 시도는 실패합니다. 단일 프로세스에서만 액세스를 지원할 수 있는 디바이스를 일회용 디바이스라고 합니다.

주소 공간은 주소 공간의 루트 페이지 테이블에 대한 단일 포인터로 지정됩니다. 다른 주소 공간을 변경하려면 다른 루트 페이지 테이블 주소만 지정하면 됩니다.

OS는 주소 공간 페이지 테이블을 관리합니다. 페이지 테이블을 변경하기 위해 OS는 나중에 적절한 시간에 적절한 엔진에 제출되는 DMA 버퍼이러한 변경 내용을 기록하도록 드라이버에 요청합니다.