DirectX 12 D3D12 får ny funktion som ger mer kontroll över minnesallokering till antingen GPU eller CPU dynamiskt

Hårdvara / DirectX 12 D3D12 får ny funktion som ger mer kontroll över minnesallokering till antingen GPU eller CPU dynamiskt 3 minuter läst

DirectX 12



I den kommande stora uppdateringen av Windows 10 OS kommer DirectX12 och mer specifikt Direct3D (D3D12) att får inte en utan nya flaggor som ändrar hur minnesresurser allokeras. Det verkar som om Microsoft med rätta är oroliga för hur minne och processorkraft begärs av och tilldelas applikationer, vilket ofta kan skapa en flaskhals. För övrigt kommer dessa nya flaggor inte att påverka minnet direkt, utan snarare påverka hur det allokeras och hanteras.

Microsoft har aktivt utvecklat den senaste iterationen av DirectX-plattformen, som länge har varit en ledande standard för skrivbordsspel. Den senaste versionen av Microsoft DirectX 12 har fått flera nya funktioner nyligen. Nyligen täckte vi mest framträdande och viktiga nya funktioner i DirectX 12 vilket skulle gynna utvecklare och slutanvändare avsevärt. Den här veckan angav Microsoft att nästa stora uppdatering av Windows 10 borde innehålla två nya flaggor för DirectX12 Direct3D. Intressant är att utvecklare som vill utforska detsamma idag behöver helt enkelt ladda ner och installera den senaste Windows 10 Insider Preview build och SDK Preview Build för Windows 10 (20H1) från Windows Insider Program.



Windows 10 DirectX 12 Direct3D för att få två nya flaggor för dynamisk minnesallokering mellan CPU och GPU:

I den kommande uppdateringen till Windows 10 kommer D3D12 att lägga till två nya flaggor i D3D12_HEAP_FLAG-uppräkningen. Förresten, dessa nya flaggor är 'impermanenta' egenskaper. Enkelt uttryckt betyder det att de nya flaggorna inte direkt påverkar det resulterande minnet i sig. Istället kommer de nya flaggorna att påverka hur minnet tilldelas. Dessutom reflekteras inte dessa flaggor från ID3D12Heap :: GetDesc eller ID3D12Resource :: GetHeapProperties .



D3D12_HEAP_FLAG_CREATE_NOT_RESIDENT:

I sin nuvarande iteration, när en utvecklare begär D3D att tilldela en hög eller engagerad resurs, är det sista som händer innan han får tillbaka objektet att minnet blir bosatt. Detta liknar anmärkningsvärt ID3D12Device :: MakeResident utförs. Det behöver inte läggas till att en sådan process presenterar två problem direkt:



  1. Designen blockerar en CPU-tråd tills minnet är helt klart att användas. Detta är inte en idealisk eller önskad situation
  2. Processen gör det också möjligt för utvecklare att övercentrera minne, utöver vad den nuvarande processbudgeten anger att han ska använda.

Det nyligen tillagda ID3D12Device3 :: EnqueueMakeResident gör att appar kan göra olika val. Apparna kan vänta på uppehållstillstånd med hjälp av GPU snarare än CPU eller begära att uppehållstillståndet misslyckas snarare än att gå överbudget. Tilldelning av minne i en icke-bosatt stat resulterar i att både fördelarna medför den första resursanvändningen.

D3D12_HEAP_FLAG_CREATE_NOT_ZEROED:

Denna flagga försöker adressera nollställt innehåll som begått resurser och högar som nyligen skapats av D3D mottagna. Microsoft försökte optimera denna process genom att möjliggöra mer återanvändningsminne som aldrig hade lämnat gränserna för en viss process utan nollställning. Detta fungerade dock inte bra och tvingade Microsofts ingenjörer att återvända till att bara återställa nollställt minne. Det behöver inte nämnas att detta sätt var ganska tråkigt eftersom minneshanteraren måste skriva nollor i minnet innan det returneras till utvecklarna för återanvändning.

Som ett sätt att optimera processen får utvecklare möjligheten att välja bort den tråkiga processen genom att helt enkelt ange den nya flaggan under tilldelning av heap / resurser. I grund och botten kan den dynamiska omfördelningen minimera den obligatoriska nollställningsprocessen hela tiden och allokera lite frigjort minne som utvecklarens processer använde utan att tvinga det genom om-noll-processen.



Microsoft har redan lagt till dessa nya flaggor och de behöver inte nya drivrutiner. Dessutom finns det ingen dedikerad CheckFeatureSupport alternativ för dessa. I grund och botten är dessa nya flaggor tillgängliga när som helst när ID3D12Device8 exponeras, eller en kontroll för D3D12_FEATURE_D3D12_OPTIONS7 lyckas. Alla nya flaggor kräver att utvecklarna ska köra processer på en version av D3D12 som förstår dem.

Taggar Direkt X12 directx Microsoft Windows