Arquitectura de MCDM
El controlador del modelo de controlador de proceso de Microsoft (MCDM) es un marco diseñado para admitir tareas informáticas de alto rendimiento en plataformas Windows. Proporciona una interfaz estandarizada para desarrollar controladores que pueden usar GPU, NPU y otros recursos de proceso para tareas de procesamiento paralelo. Los controladores MCDM son esenciales para las aplicaciones que requieren una potencia computacional intensiva, como simulaciones científicas, análisis de datos y aprendizaje automático.
En este artículo se describen los conceptos de la arquitectura de MCDM. Un controlador MCDM o un controlador de solo proceso tiene un controlador en modo kernel (controlador .sys) y una biblioteca de vínculos dinámicos en modo de usuario (DLL).
Consulte también:
- Información general sobre el modelo de controlador de proceso de Microsoft
- Directrices de implementación de controladores en modo kernel de MCDM
- Flujo de operación de WDDM
Cola de comandos
Una cola de comandos es una construcción DirectCompute utilizada para el envío de trabajo. El controlador es responsable de crear uno o varios contextos que después usa para llevar a cabo la ejecución del trabajo enviado. El controlador es responsable de ajustar el trabajo expresado a través de llamadas a su DDI en búferes de DMA que luego envía a un contexto para su ejecución.
Context
Un contexto es una cola de trabajo computacional enviado por un controlador destinado a un motor con estado específico de la instancia. El trabajo computacional se expresa como búferes de DMA que se mantienen en una cola de SW a la espera de enviarse al motor.
Cola de SW
Los búferes de DMA enviados para su ejecución a un contexto se mantienen en una cola de SW. La longitud de una cola de SW solo está limitada por los recursos. Hay una asociación de uno a uno entre un contexto y su cola de SW correspondiente. Es responsabilidad del programador quitar los búferes de DMA de la cola de SW y de enviar los búferes al motor adecuado que, a su vez, coloca el búfer en su propia cola de HW.
Scheduler
El programador se implementa mediante el sistema operativo y el controlador no tiene control sobre esta programación.
El programador es responsable de programar el trabajo en cola en colas de SW que tienen como destino los motores. Garantiza un uso justo de los recursos limitados del motor en todas las colas de SW y adelanta el trabajo según sea necesario para garantizar esta equidad y para garantizar que el trabajo de mayor prioridad se complete de forma oportuna.
Cuando el programador adelanta trabajo, es responsable de volver a poner en cola según corresponda el trabajo que se adelantó.
Motor
Un motor ejecuta las acciones necesarias para completar el trabajo expresado en una secuencia de búferes de DMA. Cada búfer de DMA se ejecuta en un contexto y un espacio de direcciones determinado. El motor debe indicar cuándo se ha completado la ejecución de un búfer de DMA y estas indicaciones se deben proporcionar en el mismo orden en el que se recibieron los búferes de DMA.
Un motor debe poder avanzar de forma independiente en ausencia de dependencias explícitas o implícitas expresadas en los búferes de DMA. Si existen dos o más motores, se programan suponiendo que el trabajo de cada motor continuará de forma oportuna y sin deterioro del trabajo realizado en otros motores.
Dado que un búfer de DMA se ejecuta con un espacio de direcciones determinado, solo se pueden admitir varios motores si cada motor es capaz de ejecutar búferes de DMA en diferentes espacios de direcciones.
Un controlador determina cuántos motores notifica y cómo se usan estos motores en el contexto que crea.
Cola de HW
Un motor recibirá una secuencia de búferes de DMA que se colocan conceptualmente en una cola denominada cola de HW. Actualmente, esta cola solo se rellena como máximo con dos entradas de búfer de DMA. Un motor debe completar los búferes de DMA en el orden de envío.
Adelantamiento
Un motor debe ser capaz de adelantarse, lo que permite interrumpir o cancelar la ejecución de búferes de DMA completados parcialmente.
Cuando se solicita que adelante el trabajo pendiente, un motor debe admitir mínimamente la finalización de los búferes de DMA completados parcialmente y cancelar todos los búferes de DMA que aún no se han iniciado.
La indicación de finalización o adelantamiento de los búferes de DMA debe realizarse en el orden en que se enviaron los búferes de DMA. Si se adelanta un búfer de DMA, todos los búferes de DMA posteriores (actualmente, como máximo, otro búfer) también se adelanten.
Si se ejecuta parcialmente un búfer de DMA, el controlador debe guardar suficiente información para reanudar su ejecución.
Búfer de DMA
El controlador convierte el trabajo enviado a través de llamadas a su DDI en búferes de DMA que luego se envían para su ejecución. Un motor ejecuta las acciones necesarias para completar el trabajo expresado en una secuencia de búferes de DMA. Cada búfer de DMA se ejecuta en un contexto y un espacio de direcciones determinado. El motor debe indicar cuándo se ha completado la ejecución de un búfer de DMA y estas indicaciones se deben proporcionar en el mismo orden en el que se recibieron los búferes de DMA.
Espacio de direcciones
Un espacio de direcciones se usa para asignar direcciones de dispositivo virtual a direcciones de dispositivo físico. Se usa un solo espacio de direcciones para cada proceso del lado host.
Los motores son un recurso compartido entre procesos y, por tanto, deben admitir el cambio entre espacios de direcciones, ya que los búferes de DMA se ejecutan desde distintos procesos.
Los dispositivos que solo admiten un espacio de direcciones deben restringirse en cómo se usan. Solo se permite un proceso a la vez para usar el dispositivo. Mientras un proceso usa el dispositivo, se producirá un error en todos los intentos realizados por otros procesos para acceder al dispositivo. Los dispositivos que solo pueden admitir el acceso mediante un único proceso se conocen como dispositivos de uso único.
Un espacio de direcciones se especifica mediante un único puntero a la tabla de página raíz del espacio de direcciones. Un cambio en un espacio de direcciones diferente solo requiere especificar una dirección de tabla de página raíz diferente.
El sistema operativo administra una tabla de páginas de espacio de direcciones. Para realizar cambios en la tabla de páginas, el sistema operativo realiza solicitudes al controlador para registrar estos cambios en búferes de DMA que se envían posteriormente al motor adecuado en el momento oportuno.