DirectX 12 D3D12 får ny funktion, som giver mere kontrol over hukommelsesallokering til enten GPU eller CPU dynamisk

I den kommende større opdatering til Windows 10 OS får DirectX12 og mere specifikt Direct3D (D3D12) ikke et, men nye flag, der vil ændre den måde, hukommelsesressourcerne tildeles på. Det ser ud til, at Microsoft med rette er bekymret over den måde, hukommelse og processorkraft bliver anmodet om og allokeret til applikationer, hvilket ofte kan skabe en flaskehals. I øvrigt vil disse nye flag ikke direkte påvirke hukommelsen, men vil snarere påvirke den måde, den tildeles og administreres på.

Microsoft har aktivt udviklet den nyeste iteration af DirectX-platformen, som længe har været en førende standard for desktop-gaming. Den seneste version af Microsoft DirectX 12 har fået flere nye funktioner på det seneste. For nylig dækkede vi mest fremtrædende og vigtige nye funktioner til DirectX 12 hvilket i væsentlig grad gavner udviklere og slutbrugere. Denne uge indikerede Microsoft, at den næste store opdatering til Windows 10 skulle omfatte to nye flag til DirectX12 Direct3D. Interessant nok er udviklere, der ønsker at udforske det samme i dag, simpelthen at downloade og installere den nyeste Windows 10 Insider Preview build og SDK Preview Build til Windows 10 (20H1) fra Windows Insider Program.

Windows 10 DirectX 12 Direct3D får to nye flag til dynamisk hukommelsesallokering mellem CPU og GPU:

I den kommende opdatering til Windows 10 tilføjer D3D12 to nye flag til D3D12_HEAP_FLAG-optællingen. I øvrigt er disse nye flag "uigennemtrængelige" egenskaber. Kort sagt betyder det, at de nye flag ikke direkte påvirker selve den resulterende hukommelse. I stedet vil de nye flag påvirke den måde, hukommelsen tildeles på. Desuden reflekteres disse flag ikke fra ID3D12Heap :: GetDesc eller ID3D12Resource :: GetHeapProperties.

D3D12_HEAP_FLAG_CREATE_NOT_RESIDENT:

I sin nuværende iteration, når en udvikler anmoder D3D om at tildele en bunke eller engageret ressource, er det sidste, der sker, før han kommer tilbage til objektet, at hukommelsen bliver bosat. Dette ligner bemærkelsesværdigt ID3D12Enhed :: MakeResident udføres. Det er overflødigt at tilføje, at en sådan proces præsenterer to problemer med det samme:

  1. Designet blokerer en CPU-tråd, indtil hukommelsen er helt klar til brug. Dette er ikke en ideel eller ønsket situation
  2. Processen vil også give udviklere mulighed for at overforbinde hukommelse ud over hvad det nuværende procesbudget indikerer, at han skal bruge.

Det nyligt tilføjede ID3D12Enhed3 :: EnqueueMakeResident gør det muligt for apps at foretage forskellige valg. Apps kan vente på opholdstilladelse ved hjælp af GPU snarere end CPU eller anmode om, at opholdstilladelsen mislykkes snarere end at gå overbudget. Tildeling af hukommelse i en ikke-hjemmehørende stat medfører, at begge fordele gives ved den første ressourceudnyttelse.

D3D12_HEAP_FLAG_CREATE_NOT_ZEROED:

Dette flag forsøger at adressere nulstillet indhold, der har begået ressourcer og dynger, der er oprettet af D3D modtaget. Microsoft forsøgte at optimere denne proces ved at muliggøre mere genbrugs hukommelse, der aldrig havde forladt rammerne for en given proces uden nulstilling. Dette fungerede imidlertid ikke godt og tvang Microsoft-ingeniører til at vende tilbage til kun at returnere nulstillet hukommelse. Det er overflødigt at nævne, at denne måde var ret kedelig, da hukommelsesadministratoren eksplicit skal skrive nuller i hukommelsen, før den returnerer den til udviklerne til genbrug.

Som en måde at optimere processen får udviklere mulighed for at fravælge den kedelige proces ved blot at specificere det nye flag under tildeling af bunke / ressource. I det væsentlige kunne den dynamiske omfordeling minimere den obligatoriske nulstillingsproces hele tiden og allokere noget frigjort hukommelse, som udviklerens processer brugte uden at tvinge det gennem gen-nul-processen.

Microsoft har allerede tilføjet disse nye flag, og de kræver ikke nye drivere. Desuden er der ingen dedikeret CheckFeatureSupport mulighed for disse. I det væsentlige er disse nye flag tilgængelige når som helst, hvor ID3D12Device8 eksponeres, eller en kontrol af D3D12_FEATURE_D3D12_OPTIONS7 lykkes. Alt det nye flag kræver, at udviklerne skal køre processer på en version af D3D12, som forstår dem.

Facebook Twitter Google Plus Pinterest