Partilhar via


Arquitetura MCDM

O driver Microsoft Compute Driver Model (MCDM) é uma estrutura projetada para suportar tarefas de computação de alto desempenho em plataformas Windows. Ele fornece uma interface padronizada para o desenvolvimento de drivers que podem usar GPU, NPU e outros recursos de computação para tarefas de processamento paralelo. Os drivers MCDM são essenciais para aplicações que exigem poder computacional intensivo, como simulações científicas, análise de dados e aprendizado de máquina.

Este artigo descreve os conceitos de arquitetura do MCDM. Um driver MCDM, ou driver apenas de computação, tem um driver em modo kernel (driver .sys) e uma biblioteca de vínculo dinâmico (DLL) em modo de usuário.

Ver também:

Fila de comandos

Uma fila de comandos é uma construção DirectCompute usada para o envio de trabalho. O condutor é responsável pela criação de um ou mais Contextos que depois utiliza para realizar a execução do trabalho submetido. O driver é responsável por transformar o trabalho expresso através de chamadas para o seu DDI em DMA Buffers, que depois submete a um Contexto para execução.

Contexto

Um Contexto consiste numa fila de tarefas computacionais submetidas por um driver destinando-se a um motor com estado específico da instância. O trabalho computacional é expresso como buffers DMA que são mantidos numa fila de SW aguardando envio para o Engine.

Fila de Software

Os buffers DMA enviados para execução em um contexto são mantidos em uma fila SW. O comprimento de uma fila SW é limitado apenas por recursos. Há uma associação um-para-um entre um contexto e a sua fila SW correspondente. É responsabilidade do Agendador remover os buffers DMA da fila SW e enviar os buffers para o mecanismo apropriado que, por sua vez, coloca o buffer em sua própria fila HW.

Agendador

O Agendador é implementado pelo SO e o driver não tem controle sobre esse agendamento.

O Agendador é responsável por agendar o trabalho enfileirado em Filas de SW que visam os Mecanismos. Ele garante o uso justo de recursos limitados do Engine em todas as filas de SW e intervém no trabalho conforme necessário para garantir essa equidade e assegurar que o trabalho de prioridade mais alta seja concluído em tempo hábil.

Quando o Agendador interrompe o trabalho, ele é responsável por reenfileirar o trabalho que foi interrompido conforme apropriado.

Motores

Um Motor executa as ações necessárias para concluir o trabalho expresso numa sequência de Buffers DMA. Cada buffer DMA é executado em um determinado contexto e espaço de endereço. O mecanismo deve indicar quando a execução de um buffer DMA está concluída e essas indicações devem ser dadas na mesma ordem em que os buffers DMA foram recebidos .

Um mecanismo deve ser capaz de avançar independentemente na ausência de dependências explícitas ou implícitas expressas nos buffers DMA. Se existirem dois ou mais Motores , eles são programados com a suposição de que o trabalho de cada Motor prosseguirá em tempo hábil e sem prejuízo do trabalho realizado em outros Motores.

Como um buffer DMA é executado com um determinado espaço de endereço, vários mecanismos só podem ser suportados se cada mecanismo for capaz de executar buffers DMA em diferentes espaços de endereço.

Um driver determina quantos mecanismos informa e como esses mecanismos são utilizados pelo contexto que cria.

Fila de HW

Um motor receberá uma sequência de Buffers DMA que são conceitualmente colocados numa fila chamada Fila de Hardware. Atualmente, essa fila só é preenchida com, no máximo, duas entradas de buffer DMA . Um mecanismo deve completar os buffers DMA na ordem de envio.

Preempção

Um mecanismo deve ser capaz de preempção, permitindo que a execução de buffers DMA parcialmente concluídos seja interrompida ou cancelada.

Quando solicitado a antecipar o trabalho pendente, um mecanismo deve ao menos assegurar a conclusão de quaisquer buffers DMA parcialmente concluídos e cancelar todos os buffers DMA que ainda não foram iniciados.

A indicação de conclusão ou preempção de buffers DMA ainda deve ser feita na ordem em que os buffers DMA foram enviados. Se um buffer DMA for preemptado, todos os buffers DMA subsequentes (atualmente, no máximo um outro buffer) também serão preemptados.

Se um buffer DMA for parcialmente executado, o driver deve salvar informações suficientes para a retomada de sua execução.

DMA Buffer

O driver converte o trabalho enviado através de chamadas para seu DDI em buffers DMA que são então enviados para execução. Um mecanismo executa as ações necessárias para concluir o trabalho expresso por uma sequência de buffers DMA. Cada buffer DMA é executado em um determinado contexto e espaço de endereço. O mecanismo deve indicar quando a execução de um buffer DMA está concluída e essas indicações devem ser dadas na mesma ordem em que os buffers DMA foram recebidos .

Espaço de Endereços

Um Espaço de Endereço é usado para mapear endereços de dispositivos virtuais para endereços de dispositivos físicos. Um único Espaço de Endereço é usado para cada processo do lado do host.

Os mecanismos são um recurso compartilhado entre processos e, portanto, devem suportar a alternância entre espaços de endereço, pois os buffers DMA são executados a partir de processos diferentes.

Os dispositivos que suportam apenas um Espaço de Endereço devem ser restritos na forma como são utilizados. Apenas um processo de cada vez é permitido para usar o dispositivo. Enquanto um processo estiver usando o dispositivo, todas as tentativas de outros processos para acessar o dispositivo falharão. Os dispositivos que só podem suportar o acesso através de um único processo são referidos como dispositivos de utilização única .

Um Espaço de Endereço é especificado por um único ponteiro para a tabela de página raiz do espaço de endereço. Uma alteração para um espaço de endereço diferente requer apenas a especificação de um endereço de tabela de página raiz diferente.

O SO gere uma tabela de páginas de espaço de endereço. Para fazer alterações na tabela de páginas, o sistema operacional faz solicitações ao driver para registrar essas alterações em buffers DMA , que são posteriormente enviados para o mecanismo apropriado no momento apropriado.