Architecture de MCDM
Le pilote du modèle de pilote de calcul Microsoft (MCDM) est un framework conçu pour prendre en charge des tâches de calcul haute performance sur les plateformes Windows. Il fournit une interface standardisée pour développer des pilotes qui peuvent utiliser des ressources de calcul telles que le GPU, le NPU et d’autres pour des tâches de traitement parallèle. Les pilotes MCDM sont essentiels pour les applications nécessitant une puissance de calcul intensive, telles que les simulations scientifiques, l’analyse de données et le machine learning.
Cet article décrit les concepts architecturaux du MCDM. Un pilote MCDM, ou pilote uniquement pour le calcul, comporte à la fois un pilote en mode noyau (.sys driver) et une bibliothèque de liens dynamiques (DLL) en mode utilisateur.
Voir aussi :
- Aperçu du modèle de pilote Microsoft Compute
- Directives de mise en œuvre du pilote MCDM en mode noyau
- Flux d'opérations du WDDM
File d’attente de commandes
Une file d’attente de commandes est une construction DirectCompute utilisée pour la soumission de travaux. Le pilote est responsable de créer un ou plusieurs contextes qu’il utilise ensuite pour exécuter les travaux soumis. Le pilote est chargé de transformer les travaux exprimés par des appels à son DDI en buffers DMA qu’il soumet ensuite à un contexte pour exécution.
Context
Un contexte est une file d’attente de travaux de calcul soumis par un pilote ciblant un moteur avec un état spécifique à l’instance. Les travaux de calcul sont exprimés sous forme de buffers DMA qui sont conservés dans une file d’attente logicielle (SW Queue) en attendant d’être soumis au moteur.
File d’attente logicielle (SW Queue)
Les buffers DMA soumis pour exécution à un contexte sont conservés dans une file d’attente logicielle (SW Queue). La longueur d’une SW Queue est limitée uniquement par les ressources disponibles. Il existe une association un-à-un entre un contexte et sa SW Queue correspondante. Il est de la responsabilité du planificateur (Scheduler) de retirer les buffers DMA de la SW Queue et de soumettre les buffers au moteur approprié, qui à son tour place le buffer dans sa propre file d’attente matérielle (HW Queue).
Scheduler
Le planificateur (Scheduler) est implémenté par le système d’exploitation et le pilote n’a aucun contrôle sur cette planification.
Le planificateur est responsable de la planification des travaux dans les SW Queue qui ciblent les moteurs. Il veille à une utilisation équitable des ressources limitées du moteur entre toutes les SW Queue et préempte les travaux si nécessaire pour garantir cette équité et s’assurer que les travaux de plus haute priorité soient réalisés en temps opportun.
Lorsque le planificateur préempte un travail, il est responsable de réinscrire, si nécessaire, le travail qui a été préempté.
Moteur
Un moteur exécute les actions nécessaires pour compléter le travail exprimé dans une séquence de buffers DMA. Chaque buffer DMA est exécuté dans un contexte et un espace d’adressage donnés. Le moteur doit indiquer lorsque l’exécution d’un buffer DMA est terminée, et ces indications doivent être fournies dans le même ordre que celui dans lequel les buffers DMA ont été reçus.
Un moteur doit être capable de progresser de manière autonome en l’absence de dépendances explicites ou implicites exprimées dans les buffers DMA. Si deux ou plusieurs moteurs existent, ils sont planifiés avec l’hypothèse que le travail de chaque moteur progressera en temps voulu et sans affecter les travaux réalisés par d’autres moteurs.
Puisqu’un buffer DMA est exécuté dans un espace d’adressage donné, plusieurs moteurs ne peuvent être pris en charge que si chaque moteur est capable d’exécuter des buffers DMA dans des espaces d’adressage différents.
Un pilote détermine combien de moteurs il rapporte et comment ces moteurs sont utilisés par le contexte qu’il crée.
File d’attente matérielle (HW Queue)
Un moteur recevra une séquence de buffers DMA qui sont placés conceptuellement dans une file appelée la file d’attente matérielle (HW Queue). Actuellement, cette file est remplie avec au maximum deux entrées de buffers DMA. Un moteur doit terminer les buffers DMA dans l’ordre de soumission.
Anticipation
Un moteur doit être capable de préemption, permettant l’interruption ou l’annulation de l’exécution de buffers DMA partiellement complétés.
Lorsqu’on lui demande de préempter un travail en cours, un moteur doit au minimum permettre l’achèvement des buffers DMA partiellement complétés et annuler tous les buffers DMA qui n’ont pas encore été démarrés.
L’indication de l’achèvement ou de la préemption des buffers DMA doit toujours se faire dans l’ordre dans lequel les buffers DMA ont été soumis. Si un buffer DMA est préempté, tous les buffers DMA suivants (actuellement au maximum un autre buffer) sont également préemptés.
Si un buffer DMA est partiellement exécuté, le pilote doit sauvegarder suffisamment d’informations pour permettre la reprise de son exécution.
Buffer DMA
Le pilote convertit les travaux soumis via des appels à son DDI en buffers DMA qui sont ensuite soumis pour exécution. Un moteur exécute les actions nécessaires pour compléter le travail exprimé dans une séquence de buffers DMA. Chaque buffer DMA est exécuté dans un contexte et un espace d’adressage donnés. Le moteur doit indiquer lorsque l’exécution d’un buffer DMA est terminée, et ces indications doivent être fournies dans le même ordre que celui dans lequel les buffers DMA ont été reçus.
Espace d’adressage
Un espace d’adressage est utilisé pour mapper les adresses de périphérique virtuelles en adresses physiques de périphérique. Un seul espace d’adressage est utilisé pour chaque processus côté hôte.
Les moteurs sont une ressource partagée entre les processus et doivent donc prendre en charge le passage d’un espace d’adressage à un autre à mesure que les buffers DMA sont exécutés à partir de différents processus.
Les appareils qui ne prennent en charge qu’un seul espace d’adressage doivent être limités dans leur utilisation. Un seul processus à la fois est autorisé à utiliser l’appareil. Lorsqu’un processus utilise l’appareil, toutes les tentatives d’accès à l’appareil par d’autres processus échoueront. Les appareils qui ne peuvent prendre en charge l’accès que par un seul processus sont appelés appareils à usage unique (Single Use).
Un espace d’adressage est spécifié par un seul pointeur vers la table de pages racine de l’espace d’adressage. Un changement vers un autre espace d’adressage nécessite seulement la spécification d’une autre adresse de table de pages racine.
Le système d’exploitation gère une table de pages d’espace d’adressage. Pour apporter des modifications à la table de pages, le système d’exploitation fait des demandes au pilote pour enregistrer ces modifications dans des buffers DMA qui sont ensuite soumis au moteur approprié au moment opportun.