Hirdetés

Új hozzászólás Aktív témák

  • Abu85

    HÁZIGAZDA

    válasz Raggie #40089 üzenetére

    Nem az API a hibás. A Borderlands 3 esetében a memóriamenedzsment a gond. Ezt úgy fogják orvosolni, hogy az egészet úgy ahogy van kicserélik az AMD által írt D3D12 Memory Allocatorra. Viszont ezt nem tudják csak úgy kiadni, mert utolsó pillanatban hozott döntés, és nincs elég teszt erre vonatkozóan.

    A probléma onnan származik, hogy az Unreal Engine 4 DirectX 12-re írt memóriamenedzsmentje nem thread-safe. Tehát nincs garantálva, hogy többszálú feldolgozásnál hibátlanul működik. Ellenben a Borderlands 3 többszálú parancsgenerálást használ, amivel az erőforrások létrehozása is többszálú. Na most a thread safety probléma kezelésére van beépítve a motorba egy olyan rutin, amely ellenőrzi folyamatosan, hogy az adott erőforrás használatban van-e, és ez okozza a rendkívül rossz működést. Ennek a megoldása az Unreal Engine 4 esetében az, hogy a rendszer csak erősen korlátozottan használjon többszálú parancsgenerálást, úgy, hogy ne kelljen alkalmazni ezt a rossz hatásfokú rendszert. A másik lehetőség a Vulkan, ugyanis a Vulkan API tekintetében az Unreal Engine 4 már thread-safe memóriamenedzsmentet használ, csak az erre vonatkozó fejlesztések, még nem kerültek visszaportolásra a motor DirectX 12 leképezőjébe.

    A harmadik lehetőség írni egy egyedi DirectX 12-es memóriamenedzsmentet az Unreal Engine 4-be, vagy beépíthető az AMD D3D12 Memory Allocator, ami eleve thread-safe megoldás. Viszont az Unreal Engine 4 miatt ebbe is lehet, hogy módosítás kell, mert ezt a memóriamenedzsmentet az AMD az erőforráshalmazra vonatkozó specifikációknak a tier_2-es szintjére írta, és ugyan kezeli a tier_1-et is automatikusan, csak szimplán olyan egyszerű megoldást alkalmaz rá, hogy elszeparálja az erőforrásokat és kész. Szóval valószínűleg lesznek itt is módosítások még, bár kiindulásnak jó.

Új hozzászólás Aktív témák