A DirectX 12 D3D12 új funkciót kap, amely nagyobb kontrollt biztosít a memória allokálásában akár a GPU-ra, akár a CPU-ra dinamikusan

Hardver / A DirectX 12 D3D12 új funkciót kap, amely nagyobb kontrollt biztosít a memória allokálásában akár a GPU-ra, akár a CPU-ra dinamikusan 3 perc olvasás

DirectX 12



A Windows 10 operációs rendszer közelgő jelentős frissítésében a DirectX12, pontosabban a Direct3D (D3D12) kerül bemutatásra. nem egy, hanem új zászlók megszerzése ami megváltoztatja a memóriaforrások felosztásának módját. Úgy tűnik, hogy a Microsoftot joggal aggasztja az alkalmazások által igényelt memória és feldolgozási teljesítmény igénybevétele, ami gyakran szűk keresztmetszetet hozhat létre. Egyébként ezek az új jelzők nem közvetlenül érintik a memóriát, hanem inkább a felosztás és kezelés módját.

A Microsoft aktívan fejleszti a DirectX platform legújabb iterációját, amely régóta vezető szabvány az asztali játékokban. A Microsoft DirectX 12 legújabb verziója az utóbbi időben számos új funkcióval rendelkezik. Nemrégiben bemutattuk a a DirectX 12 legfontosabb és legfontosabb új szolgáltatásai ami jelentős előnyökkel járna a fejlesztők és a végfelhasználók számára. Ezen a héten a Microsoft jelezte, hogy a Windows 10 következő nagy frissítésének tartalmaznia kell két új zászlót a DirectX12 Direct3D számára. Érdekes módon azoknak a fejlesztőknek, akik ma ugyanezt szeretnék felfedezni, egyszerűen le kell tölteniük és telepíteniük kell a legfrissebb Windows 10 Insider Preview és SDK Preview Build for Windows 10 (20H1) verziót a Windows Insider programból.



Windows 10 DirectX 12 Direct3D két új jelző megszerzéséhez a dinamikus memóriaallokációhoz a CPU és a GPU között:

A Windows 10 hamarosan megjelenő frissítésében a D3D12 két új zászlót fog hozzáadni a D3D12_HEAP_FLAG felsoroláshoz. Ezek az új zászlók egyébként „nem állandó” tulajdonságok. Egyszerűen fogalmazva, ez azt jelenti, hogy az új zászlók nem befolyásolják közvetlenül a kapott memóriát. Ehelyett az új zászlók befolyásolják a memória felosztásának módját. Sőt, ezek a zászlók nem tükröződnek innen ID3D12Heap :: GetDesc vagy ID3D12Resource :: GetHeapProperties .



D3D12_HEAP_FLAG_CREATE_NOT_RESIDENT:

Jelenlegi iterációjában, amikor egy fejlesztő kéri a D3D-t egy halom vagy lekötött erőforrás kiosztására, az utolsó dolog, ami az objektum visszaszerzése előtt történik, az a memória rezidenciája. Ez figyelemre méltóan hasonlít a ID3D12Device :: MakeResident végzik. Felesleges hozzáfűznünk, hogy egy ilyen folyamat azonnal két kérdést vet fel:



  1. A tervezés blokkolja a CPU-szálat, amíg a memória teljesen készen áll a használatra. Ez nem ideális vagy kívánt helyzet
  2. A folyamat lehetővé teszi a fejlesztők számára, hogy túlságosan lekötjék a memóriát, azon túl, amelyet a jelenlegi folyamatköltségvetés jelez neki.

Az újonnan hozzáadott ID3D12Device3 :: EnqueueMakeResident lehetővé teszi az alkalmazások számára, hogy különböző döntéseket hozzanak. Az alkalmazások várhatták a rezidenciát a GPU helyett a CPU helyett, vagy kérhették a rezidencia művelet sikertelenségét, nem pedig túllépve a költségvetést. A memória nem rezidens államban történő allokálása mind az előnyök átadását eredményezi az erőforrások első felhasználásának.

D3D12_HEAP_FLAG_CREATE_NOT_ZEROED:

Ez a jelző megpróbálja kezelni a D3D által újonnan létrehozott erőforrásokat és halmokat lekötő tartalmakat. A Microsoft megpróbálta optimalizálni ezt a folyamatot azáltal, hogy lehetővé tette több olyan memória újrafelhasználását, amely soha nem hagyta nullázás nélkül az adott folyamat kereteit. Ez azonban nem működött jól, és arra kényszerítette a Microsoft mérnökeit, hogy térjenek vissza a csak nullázott memória visszaadásához. Felesleges megemlíteni, hogy ez a módszer meglehetősen unalmas volt, mivel a memóriakezelőnek kifejezetten nullákat kell írnia a memóriába, mielőtt visszaküldené a fejlesztőkhöz újrafelhasználás céljából.

A folyamat optimalizálása érdekében a fejlesztőknek lehetőségük nyílik az unalmas folyamat leiratkozására azzal, hogy egyszerűen megadják az új jelzőt a halom / erőforrás elosztásakor. Lényegében a dinamikus újraterjesztés minimalizálhatja a kötelező, minden időkre vonatkozó nullázási folyamatot, és lefoglalhat néhány felszabadult memóriát, amelyet a fejlesztő folyamatai használtak, anélkül, hogy az újracsökkentési folyamatra kényszerítette volna.



A Microsoft már felvette ezeket az új jelzőket, és nem igényelnek új illesztőprogramokat. Sőt, nincs dedikált CheckFeatureSupport lehetőség ezekre. Lényegében ezek az új jelzők bármikor elérhetők, amikor az ID3D12Device8 ki van téve, vagy a D3D12_FEATURE_D3D12_OPTIONS7 ellenőrzése sikerrel jár. Az új jelzők csak annyit követelnek meg, hogy a fejlesztőknek a D3D12 olyan verzióján kell futtatniuk a folyamatokat, amely érti őket.

Címkék Direct X12 direktx Microsoft ablakok