Partager via


Architecture MCDM

Cet article décrit les concepts architecturaux du modèle MCDM (Microsoft Compute Driver Model). Un pilote MCDM, ou pilote de calcul uniquement, a à la fois un pilote en mode noyau ( pilote.sys ) et une bibliothèque de liens dynamiques (DLL) en mode utilisateur.

Voir aussi :

File d’attente de commandes

Une file d’attente de commandes est une construction DirectCompute utilisée pour la soumission de travail. Le pilote est chargé de créer un ou plusieurs contextes qu’il utilisera pour exécuter le travail soumis. Le pilote est chargé de transformer le travail exprimé via les appels à son DDI en mémoires tampons DMA qu’il soumet ensuite à un contexte pour exécution.

Context

Un contexte est une file d’attente de travail de calcul soumis par un pilote ciblant un moteur avec un état spécifique à instance. Le travail de calcul est exprimé sous forme de mémoires tampons DMA qui sont conservées dans une file d’attente SW en attente de soumission au moteur.

File d’attente SW

Les mémoires tampons DMA envoyées pour exécution dans un contexte sont conservées dans une file d’attente SW. La longueur d’une file d’attente SW est limitée uniquement par les ressources. Il existe une association un-à-un entre un contexte et sa file d’attente SW correspondante. Il est de la responsabilité du planificateur de supprimer les mémoires tampons DMA de la file d’attente SW et de soumettre les tampons au moteur approprié qui, à son tour, place la mémoire tampon sur sa propre file d’attente HW.

Scheduler

Le planificateur 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 du travail mis en file d’attente dans les files d’attente SW qui ciblent les moteurs. Il garantit une utilisation équitable des ressources de moteur limitées dans toutes les files d’attente SW et préempte le travail nécessaire pour garantir cette équité et s’assurer que le travail de priorité plus élevée se termine en temps opportun.

Lorsque le planificateur préempte le travail, il est responsable de la mise en file d’attente appropriée du travail qui a été préempté.

Moteur

Un moteur exécute les actions nécessaires pour terminer le travail exprimé dans une séquence de mémoires tampons DMA. Chaque mémoire tampon DMA est exécutée dans un contexte et un espace d’adressage donnés. Le moteur doit indiquer quand l’exécution d’une mémoire tampon DMA est terminée et ces indications doivent être fournies dans le même ordre que celui dans lequel les mémoires tampons DMA ont été reçues.

Il est attendu qu’un moteur soit en mesure de progresser indépendamment en l’absence de dépendances explicites ou implicites exprimées dans les mémoires tampons DMA. S’il existe deux ou plusieurs moteurs , ils seront planifiés en partant du principe que le travail de chaque moteur se fera en temps opportun et sans que le travail effectué dans d’autres moteurs soit affecté.

Étant donné qu’une mémoire tampon DMA est exécutée avec un espace d’adressage donné, plusieurs moteurs ne peuvent être pris en charge que si chaque moteur est capable d’exécuter des mémoires tampons DMA dans différents espaces d’adressage.

Un pilote détermine le nombre de moteurs qu’il signale et la façon dont ces moteurs sont utilisés par le contexte qu’il crée.

File d’attente HW

Un moteur reçoit une séquence de mémoires tampons DMA qui sont conceptuellement placées dans une file d’attente appelée file d’attente HW. Actuellement, cette file d’attente est uniquement remplie avec au maximum deux entrées de mémoire tampon DMA . Un moteur doit terminer les mémoires tampons DMA dans l’ordre de soumission.

Anticipation

Un moteur doit être en mesure de préemption, ce qui permet d’interrompre ou d’annuler l’exécution de mémoires tampons DMA partiellement terminées .

Lorsqu’il est demandé de préempter le travail en attente, un moteur doit prendre au minimum en charge l’achèvement de toutes les mémoires tampons DMA partiellement terminées et annuler toutes les mémoires tampons DMA qui ne sont pas encore démarrées.

L’indication de l’achèvement ou de la préemption des mémoires tampons DMA doit toujours être effectuée dans l’ordre dans lequel les mémoires tampons DMA ont été envoyées . Si une mémoire tampon DMA est préemptée, toutes les mémoires tampons DMA suivantes (actuellement au plus une autre mémoire tampon) sont également préemptées.

Si une mémoire tampon DMA est partiellement exécutée, le pilote doit enregistrer suffisamment d’informations pour la reprise de son exécution.

Mémoire tampon DMA

Le pilote convertit le travail envoyé via des appels à son DDI en mémoires tampons DMA qui sont ensuite envoyées pour exécution. Un moteur exécute les actions nécessaires pour terminer le travail exprimé dans une séquence de mémoires tampons DMA. Chaque mémoire tampon DMA est exécutée dans un contexte et un espace d’adressage donnés. Le moteur doit indiquer quand l’exécution d’une mémoire tampon DMA est terminée et ces indications doivent être fournies dans le même ordre que celui dans lequel les mémoires tampons DMA ont été reçues.

Espace d’adressage

Un espace d’adressage est utilisé pour mapper des adresses d’appareils virtuels aux adresses d’appareils physiques. Un espace d’adressage unique 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 basculement entre les espaces d’adressage , car les mémoires tampons DMA sont exécutées à partir de différents processus.

Les appareils qui ne prennent en charge qu’un seul espace d’adressage doivent être limités dans la façon dont ils sont utilisés. Un seul processus à la fois sera autorisé à utiliser l’appareil. Pendant qu’un processus utilise l’appareil, toutes les tentatives d’accès à l’appareil par d’autres processus échouent. Les appareils qui ne peuvent prendre en charge l’accès que par un seul processus sont appelés appareils à usage unique .

Un espace d’adressage est spécifié par un pointeur unique vers la table de pages racine de l’espace d’adressage. Une modification d’un espace d’adressage différent nécessite uniquement la spécification d’une adresse de table de page racine différente.

Une table de pages d’espace d’adressage est gérée par le système d’exploitation. Pour apporter des modifications à la table de pages, le système d’exploitation demande au pilote d’enregistrer ces modifications dans les mémoires tampons DMA qui sont ensuite envoyées au moteur approprié au moment approprié.