DirectX 12 D3D12 obține o nouă funcție care oferă mai mult control asupra alocării memoriei fie către GPU, fie către CPU dinamic

Hardware / DirectX 12 D3D12 obține o nouă funcție care oferă mai mult control asupra alocării memoriei fie către GPU, fie către CPU dinamic 3 minute citite

DirectX 12



În viitoarea actualizare majoră a sistemului de operare Windows 10, DirectX12 și, mai precis, Direct3D (D3D12), vor fi obținând nu unul, ci steaguri noi care va modifica modul în care sunt alocate resursele de memorie. Se pare că Microsoft este pe bună dreptate îngrijorat de modul în care memoria și puterea de procesare sunt solicitate și alocate aplicațiilor, care deseori pot crea un blocaj. De altfel, aceste noi steaguri nu vor avea un impact direct asupra memoriei, ci vor afecta mai degrabă modul în care este alocată și gestionată.

Microsoft a dezvoltat activ cea mai recentă iterație a platformei DirectX, care a fost mult timp un standard de vârf pentru jocurile desktop. Cea mai recentă versiune a Microsoft DirectX 12 a primit câteva funcții noi în ultima vreme. Recent am acoperit cele mai proeminente și importante caracteristici noi ale DirectX 12 ceea ce ar aduce beneficii semnificative dezvoltatorilor și utilizatorilor finali. În această săptămână, Microsoft a indicat că următoarea actualizare majoră a Windows 10 ar trebui să includă două semnalizatoare noi pentru DirectX12 Direct3D. Interesant este că dezvoltatorii care doresc să exploreze același lucru astăzi, trebuie să descarce și să instaleze ultima versiune Windows 10 Insider Preview și SDK Preview Build pentru Windows 10 (20H1) din Programul Windows Insider.



Windows 10 DirectX 12 Direct3D pentru a obține două steaguri noi pentru alocarea dinamică a memoriei între CPU și GPU:

În viitoarea actualizare pentru Windows 10, D3D12 va adăuga două semnalizări noi la enumerarea D3D12_HEAP_FLAG. De altfel, aceste noi steaguri sunt proprietăți „impermanente”. Pur și simplu, aceasta înseamnă că noile steaguri nu vor afecta în mod direct memoria rezultată. În schimb, noile steaguri vor afecta modul în care este alocată memoria. Mai mult, aceste steaguri nu sunt reflectate din ID3D12Heap :: GetDesc sau ID3D12Resource :: GetHeapProperties .



D3D12_HEAP_FLAG_CREATE_NOT_RESIDENT:

În iterația sa curentă, ori de câte ori un dezvoltator solicită D3D să aloce o heap sau o resursă angajată, ultimul lucru care se întâmplă înainte ca el să recupereze obiectul este că memoria devine rezidentă. Acest lucru este remarcabil de similar cu ID3D12Device :: MakeResident în desfășurare. Inutil de adăugat, un astfel de proces prezintă imediat două probleme:



  1. Proiectarea blochează un fir CPU până când memoria este complet gata de utilizare. Aceasta nu este o situație ideală sau dorită
  2. Procesul va permite, de asemenea, dezvoltatorilor să supra-angajeze memoria, dincolo de ceea ce indică bugetul actual al procesului că ar trebui să îl folosească.

Nou adăugat ID3D12Device3 :: EnqueueMakeResident permite aplicațiilor să facă alegeri diferite. Aplicațiile ar putea să aștepte rezidența utilizând GPU-ul mai degrabă decât CPU-ul sau să solicite eșecul operației de rezidență decât să depășească bugetul. Alocarea memoriei într-un stat nerezident are ca rezultat conferirea atât a beneficiilor primei utilizări a resurselor.

D3D12_HEAP_FLAG_CREATE_NOT_ZEROED:

Acest semnalizator încearcă să abordeze conținutul zero care a angajat resurse și grămezi recent create de D3D primite. Microsoft a încercat să optimizeze acest proces, permițând mai multă reutilizare a memoriei care nu a părăsit niciodată limitele unui proces dat, fără a pune la zero. Cu toate acestea, acest lucru nu a funcționat bine și i-a forțat pe inginerii Microsoft să revină doar la returnarea memoriei zero. Inutil să menționăm, acest mod a fost destul de plictisitor, deoarece managerul de memorie trebuie să scrie în mod explicit zero în memorie înainte de a-l returna dezvoltatorilor pentru reutilizare.

Ca modalitate de optimizare a procesului, dezvoltatorilor li se acordă posibilitatea de a renunța la procesul obositor prin simpla specificare a noului flag în timpul alocării heap / resurse. În esență, realocarea dinamică ar putea minimiza procesul obligatoriu de reducere la zero din toate timpurile și ar putea aloca o parte din memoria eliberată pe care o foloseau procesele dezvoltatorului fără a o forța prin procesul de re-zero.



Microsoft a adăugat deja aceste steaguri noi și nu necesită drivere noi. Mai mult, nu există un dedicat CheckFeatureSupport opțiune pentru acestea. În esență, aceste noi semnalizatoare sunt disponibile de fiecare dată când ID3D12Device8 este expus sau o verificare pentru D3D12_FEATURE_D3D12_OPTIONS7 reușește. Toate noile steaguri cer că dezvoltatorii ar trebui să ruleze procese pe o versiune a D3D12 care le înțelege.

Etichete Direct X12 directx Microsoft Windows