Delen via


MCDM-architectuur

Het MCDM-stuurprogramma (Microsoft Compute Driver Model) is een framework dat is ontworpen ter ondersteuning van high-performance computingtaken op Windows-platforms. Het biedt een gestandaardiseerde interface voor het ontwikkelen van stuurprogramma's die GPU, NPU en andere rekenresources kunnen gebruiken voor parallelle verwerkingstaken. MCDM-stuurprogramma's zijn essentieel voor toepassingen die intensieve rekenkracht vereisen, zoals wetenschappelijke simulaties, gegevensanalyse en machine learning.

In dit artikel worden de architectuurconcepten van MCDM beschreven. Een MCDM-stuurprogramma of alleen-rekenstuurprogramma heeft zowel een kernelmodusstuurprogramma (.sys-stuurprogramma ) als een DLL (Dynamic Link Library) in de gebruikersmodus.

Zie ook:

Opdrachtwachtrij

Een opdrachtwachtrij is een DirectCompute-constructie die wordt gebruikt voor het verzenden van werk. Het stuurprogramma is verantwoordelijk voor het maken van een of meer contexten die het vervolgens gebruikt om de uitvoering van het ingediende werk uit te voeren. Het stuurprogramma is verantwoordelijk voor het omzetten van werk dat wordt uitgedrukt via aanroepen naar de DDI in DMA-buffers die vervolgens worden verzonden naar een context voor uitvoering.

Context

Een context is een wachtrij met rekenwerk dat wordt ingediend door een stuurprogramma dat gericht is op een engine met een exemplaarspecifieke status. " Het rekenwerk wordt uitgedrukt als DMA-buffers die in een SW-wachtrij worden bewaard in afwachting van indiening bij de Engine.

SW-wachtrij

DMA-buffers die zijn verzonden voor uitvoering naar een context, worden in een SW-wachtrij bewaard. De lengte van een SW-wachtrij wordt alleen gebonden door resources. Er is een een-op-een-koppeling tussen een context en de bijbehorende SW-wachtrij. Het is de verantwoordelijkheid van de Scheduler om DMA-buffers uit de SW-wachtrij te verwijderen en de buffers naar de juiste engine te verzenden, waardoor de buffer op zijn eigen HW-wachtrij wordt geplaatst.

Planner

De Scheduler wordt geïmplementeerd door het besturingssysteem en het stuurprogramma heeft geen controle over deze planning.

De Scheduler is verantwoordelijk voor het plannen van het ingeplande werk in SW-wachtrijen die gericht zijn op Engines. Het zorgt voor eerlijk gebruik van beperkte Engine-resources over alle SW-wachtrijen en onderbreekt werk indien nodig om deze billijkheid te waarborgen en ervoor te zorgen dat werk met een hogere prioriteit tijdig wordt voltooid.

Wanneer de Scheduler werk onderbreekt, is het verantwoordelijk voor het opnieuw in de wachtrij plaatsen van het werk dat is onderbroken.

Motor

Een engine voert de benodigde acties uit om het werk te voltooien dat wordt uitgedrukt in een reeks DMA-buffers. Elke DMA-buffer wordt uitgevoerd in een bepaalde context en adresruimte. De engine moet aangeven wanneer de uitvoering van een DMA-buffer is voltooid en deze indicaties moeten worden gegeven in dezelfde volgorde waarin de DMA-buffers zijn ontvangen.

Een engine moet onafhankelijk van elkaar vooruitgang kunnen boeken als er geen expliciete of impliciete afhankelijkheden zijn uitgedrukt in de DMA-buffers. Als er twee of meer engines bestaan, worden ze gepland met de veronderstelling dat het werk van elke engine tijdig zal worden voortgezet en zonder een beperking van het werk dat in andere engines wordt uitgevoerd.

Omdat een DMA-buffer wordt uitgevoerd met een bepaalde adresruimte, kunnen meerdere engines alleen worden ondersteund als elke engineDMA-buffers in verschillende adresruimten kan uitvoeren.

Een stuurprogramma bepaalt hoeveel engines het rapporteert en hoe deze engines worden gebruikt door de context die het maakt.

HW-wachtrij

Een engine krijgt een reeks DMA-buffers die conceptueel in een wachtrij met de naam HW-wachtrij worden geplaatst. Op dit moment is deze wachtrij alleen gevuld met maximaal twee DMA-buffervermeldingen . Een Engine moet de DMA Buffers in de volgorde van indiening voltooien.

Voorrang

Een engine moet in staat zijn om voorrang te verlenen, zodat de uitvoering van gedeeltelijk voltooide DMA-buffers kan worden onderbroken of geannuleerd.

Wanneer wordt gevraagd om het openstaande werk te onderbreken, moet een engine minimaal ondersteuning bieden bij het voltooien van gedeeltelijk voltooide DMA-buffers en alle DMA-buffers afbreken die nog niet zijn gestart.

De indicatie van voltooiing of onderbreking van DMA-buffers moet nog steeds worden uitgevoerd in de volgorde waarin de DMA-buffers zijn aangemeld. Als een DMA-buffer wordt onderbroken, worden ook alle volgende DMA-buffers (momenteel slechts één andere buffer) onderbroken.

Als een DMA-buffer gedeeltelijk wordt uitgevoerd, moet het stuurprogramma voldoende informatie opslaan voor de hervatting van de uitvoering.

DMA-buffer

Het stuurprogramma converteert werk dat via aanroepen naar de DDI wordt verzonden naar DMA-buffers die vervolgens worden verzonden voor uitvoering. Een engine voert de benodigde acties uit om het werk te voltooien dat wordt uitgedrukt in een reeks DMA-buffers. Elke DMA-buffer wordt uitgevoerd in een bepaalde context en adresruimte. De engine moet aangeven wanneer de uitvoering van een DMA-buffer is voltooid en deze indicaties moeten worden gegeven in dezelfde volgorde waarin de DMA-buffers zijn ontvangen.

Adresruimte

Een adresruimte wordt gebruikt om adressen van virtuele apparaten toe te wijzen aan fysieke apparaatadressen. Er wordt één adresruimte gebruikt voor elk proces aan de hostzijde.

Engines zijn een gedeelde resource tussen processen en moeten dus ondersteuning bieden voor het schakelen tussen adresruimten omdat DMA-buffers worden uitgevoerd vanuit verschillende processen.

Apparaten die slechts één adresruimte ondersteunen, moeten worden beperkt in de wijze waarop ze worden gebruikt. Er mag slechts één proces tegelijk het apparaat gebruiken. Hoewel het ene proces het apparaat gebruikt, mislukken alle pogingen van andere processen om toegang te krijgen tot het apparaat. Apparaten die alleen toegang door één proces ondersteunen, worden apparaten met één gebruiksrechten genoemd.

Een adresruimte wordt opgegeven door een enkele aanwijzer naar de hoofdpaginatabel van de adresruimte. Voor een wijziging in een andere adresruimte moet alleen een ander adres voor de hoofdpaginatabel worden opgegeven.

Het besturingssysteem beheert een tabel met adresruimtepagina's. Als u wijzigingen wilt aanbrengen in de paginatabel, doet het besturingssysteem aanvragen aan het stuurprogramma om deze wijzigingen vast te leggen in DMA-buffers die later op het juiste moment naar de juiste engine worden verzonden.