DirectX 12 D3D12, GPU'ya veya CPU'ya Dinamik Olarak Bellek Tahsisi Üzerinde Daha Fazla Kontrol Sağlayan Yeni Özelliğe Sahiptir

Windows 10 işletim sistemi için yapılacak olan büyük güncellemede, DirectX12 ve daha spesifik olarak Direct3D (D3D12), bellek kaynaklarının tahsis edilme şeklini değiştirecek bir değil yeni bayraklar alacak. Görünüşe göre Microsoft, bellek ve işlem gücünün, genellikle bir darboğaz oluşturabilecek uygulamalar tarafından talep edilme ve bu uygulamalara tahsis edilme şekli konusunda haklı olarak endişe duyuyor. Bu arada, bu yeni bayraklar belleği doğrudan etkilemeyecek, bunun yerine tahsis edilme ve yönetilme şeklini etkileyecektir.

Microsoft, uzun süredir masaüstü oyunlar için önde gelen bir standart olan DirectX platformunun en son yinelemesini aktif olarak geliştirmektedir. Microsoft DirectX 12'nin en son sürümü, son zamanlarda birkaç yeni özellik alıyor. Son zamanlarda kapladık DirectX 12'nin en belirgin ve önemli yeni özellikleri geliştiricilere ve son kullanıcılara önemli ölçüde fayda sağlayacaktır. Bu hafta Microsoft, Windows 10'a yönelik bir sonraki büyük güncellemenin DirectX12 Direct3D için iki yeni bayrak içermesi gerektiğini belirtti. İlginç bir şekilde, aynı şeyi bugün keşfetmek isteyen geliştiricilerin, Windows Insider Programından en son Windows 10 Insider Preview derlemesini ve Windows 10 için SDK Preview Build'i (20H1) indirmesi ve yüklemesi yeterlidir.

Windows 10 DirectX 12 Direct3D, CPU ve GPU Arasında Dinamik Bellek Tahsisi İçin İki Yeni Bayrak Almak İçin:

Windows 10'un yaklaşan güncellemesinde D3D12, D3D12_HEAP_FLAG numaralandırmasına iki yeni bayrak ekleyecektir. Bu arada, bu yeni bayraklar “kalıcı” özelliklerdir. Basitçe ifade etmek gerekirse, bu, yeni bayrakların ortaya çıkan belleğin kendisini doğrudan etkilemeyeceği anlamına gelir. Bunun yerine, yeni bayraklar belleğin ayrılma şeklini etkileyecektir. Ayrıca, bu bayraklar ID3D12Yığın::GetDesc veya ID3D12Kaynak::GetHeapProperties.

D3D12_HEAP_FLAG_CREATE_NOT_RESIDENT:

Mevcut yinelemesinde, bir geliştirici D3D'den bir yığın veya taahhüt edilmiş kaynak ayırmasını istediğinde, nesneyi geri almadan önce olan son şey, belleğin yerleşik hale gelmesidir. Bu oldukça benzer ID3D12Device::MakeResident yapılıyor. Eklemeye gerek yok, böyle bir süreç hemen iki sorun sunar:

  1. Tasarım, bellek tamamen kullanıma hazır olana kadar bir CPU İş parçacığını engeller. Bu ideal veya istenen bir durum değil
  2. Süreç aynı zamanda geliştiricilerin, mevcut süreç bütçesinin kullanması gerektiğini gösterdiğinin ötesinde belleği aşırı kullanmalarına da izin verecektir.

Yeni eklenen ID3D12Device3::EnqueueMakeResident uygulamaların farklı seçimler yapmasına izin verir. Uygulamalar, CPU yerine GPU'yu kullanarak ikamet için bekleyebilir veya bütçeyi aşmak yerine ikamet işleminin başarısız olmasını isteyebilir. Yerleşik olmayan bir durumda belleğin tahsisi, kaynakların ilk kullanımına ilişkin faydaların her ikisinin de verilmesiyle sonuçlanır.

D3D12_HEAP_FLAG_CREATE_NOT_ZEROED:

Bu bayrak, alınan D3D tarafından yeni oluşturulan kaynakları ve yığınları taahhüt eden sıfırlanmış içeriği ele almaya çalışır. Microsoft, belirli bir işlemin sınırlarını hiçbir zaman sıfırlamadan bırakmayan daha fazla yeniden kullanım belleği sağlayarak bu işlemi optimize etmeye çalıştı. Ancak, bu iyi çalışmadı ve Microsoft mühendislerini yalnızca sıfırlanmış bellek döndürmeye geri dönmeye zorladı. Bahsetmeye gerek yok, bu yol oldukça sıkıcıydı çünkü bellek yöneticisi, yeniden kullanım için geliştiricilere geri vermeden önce belleğe açıkça sıfırlar yazmak zorundaydı.

Süreci optimize etmenin bir yolu olarak, geliştiricilere yığın/kaynak tahsisi sırasında yeni bayrağı basitçe belirterek sıkıcı süreçten çıkma yeteneği veriliyor. Esasen, dinamik yeniden tahsis, zorunlu tüm zamanların sıfırlanması sürecini en aza indirebilir ve geliştiricinin süreçlerinin kullandığı serbest belleğin bir kısmını yeniden sıfırlama sürecini zorlamadan tahsis edebilir.

Microsoft bu yeni bayrakları zaten eklemiştir ve bunlar yeni sürücüler gerektirmez. Üstelik özel bir Kontrol ÖzellikDestek Bunlar için seçenek. Esasen, bu yeni bayraklar, ID3D12Device8'in açığa çıktığı veya D3D12_FEATURE_D3D12_OPTIONS7 denetiminin başarılı olduğu her zaman kullanılabilir. Tüm yeni bayrakların talebi, geliştiricilerin süreçleri D3D12'nin onları anlayan bir sürümünde çalıştırması gerektiğidir.

Facebook Twitter Google Plus Pinterest