Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Paylaşım, çok işlemli ve çok bağdaştırıcılı mimariler için kullanışlıdır.
Paylaşıma genel bakış
Paylaşılan yığınlar iki şeyi etkinleştirir: bir yığındaki verileri bir veya daha fazla işlemde paylaşmak ve yığına yerleştirilen kaynaklar için tanımlanmamış doku düzeni için belirlenimci olmayan bir seçim yapma. Yığınların bağdaştırıcılar arasında paylaşılması, verilerin CPU hazırlama gereksinimini de ortadan kaldırır.
Hem yığınlar hem de kaydedilmiş kaynaklar paylaşılabilir. Kaydedilmiş bir kaynağın paylaşılması aslında örtük yığını, kaydedilmiş kaynak açıklamasıyla birlikte paylaşır; böylece uyumlu bir kaynak açıklaması başka bir cihazdan yığına eşlenebilir.
Tüm yöntemler serbest iş parçacıklıdır ve NT tanıtıcı paylaşımı tasarımının mevcut D3D11 semantiğini devralır.
- ID3D12Device::CreateSharedHandle
- ID3D12Device::OpenSharedHandle
- ID3D12Device::OpenSharedHandleByName
İşlemler arasında yığınları paylaşma
Paylaşılan yığınlar, D3D12_HEAP_FLAGS numaralandırmasının D3D12_HEAP_FLAG_SHARED üyesiyle belirtilir.
Paylaşılan yığınlar CPU ile erişilebilir yığınlarda desteklenmez: D3D12_HEAP_TYPE_UPLOAD, D3D12_HEAP_TYPE_READBACK ve D3D12_CPU_PAGE_PROPERTY_NOT_AVAILABLE olmadan D3D12_HEAP_TYPE_CUSTOM.
Tanımlanmamış doku düzeni için belirlenimci olmayan bir seçimin önüne geçilmesi bazı GPU'larda ertelenmiş işleme senaryolarını önemli ölçüde bozabileceğinden, yerleştirilen ve işlenen kaynaklar için varsayılan davranış değildir. Belirli doku düzenleri aynı biçim ve boyutta birden çok işleme hedef dokusuna aynı anda işlenirken elde edilen etkili bellek bant genişliğini azalttığından, bazı GPU mimarilerinde ertelenen işleme bozulabilir. GPU mimarileri, standartlaştırılmış kaydırma düzenlerini ve ertelenmiş işleme için standartlaştırılmış düzenleri verimli bir şekilde desteklemek için belirlenmeyen doku düzenlerinden yararlanmaktan uzaklaşıyor.
Paylaşılan yığınlar diğer küçük maliyetlerle birlikte gelir:
- Paylaşılan yığın verileri, bilgilerin açığa çıkmasıyla ilgili endişelerden dolayı işlem içi yığınlar kadar esnek bir şekilde geri dönüştürülemez, bu nedenle fiziksel bellek daha sık sıfırlanır.
- Paylaşılan yığınların oluşturulması ve yok edilmesi sırasında küçük bir ek CPU ek yükü ve artan sistem belleği kullanımı vardır.
Yığınları bağdaştırıcılar arasında paylaşma
Bağdaştırıcılar arasında paylaşılan yığınlar, D3D12_HEAP_FLAGS numaralandırmasının D3D12_HEAP_FLAG_SHARED_CROSS_ADAPTER üyesiyle belirtilir.
Bağdaştırıcılar arası paylaşılan yığınlar, aralarındaki verileri CPU hazırlamadan birden çok bağdaştırıcının veri paylaşmasına olanak tanır. Farklı bağdaştırıcı özellikleri, verimli bağdaştırıcıların aralarındaki verileri nasıl geçirebileceğini belirlerken, yalnızca GPU kopyalarının etkinleştirilmesi, elde edilen etkili bant genişliğini artırır. Bu tür doku düzenleri başka türlü desteklenmese bile, bazı doku düzenlerine, doku verilerinin değişimini desteklemek için bağdaştırıcılar arası yığınlarda izin verilir. Yalnızca kopyalamayı desteklemek gibi bazı kısıtlamalar bu tür dokular için geçerli olabilir.
Bağdaştırıcılar arası paylaşım, ID3D12Device::CreateHeapçağrılarak oluşturulan yığınlarla çalışır. Uygulamanız daha sonra CreatePlacedResourcearacılığıyla kaynak oluşturabilir. Ayrıca, CreateCommittedResource tarafından oluşturulan kaynaklar/yığınlar tarafından izin verilir, ancak yalnızca satır ana D3D12_RESOURCE_DIMENSION_TEXTURE2D kaynakları için (D3D12_RESOURCE_DIMENSIONbakın). Bağdaştırıcılar arası paylaşım, CreateReservedResourceile çalışmaz.
Bağdaştırıcılar arası paylaşım için, her zamanki sıralar arası kaynak paylaşımı kurallarının tümü geçerli olmaya devam eder. Uygulamanızın iki bağdaştırıcı arasında düzgün eşitleme ve tutarlılık sağlamak için uygun engelleri vermesi gerekir. Uygulamanız, birden çok bağdaştırıcıya gönderilen komut listelerinin zamanlamasını koordine etmek için bağdaştırıcılar arası çitler kullanmalıdır. D3D API sürümleri arasında bağdaştırıcılar arası kaynakları paylaşma mekanizması yoktur. Bağdaştırıcılar arası paylaşılan kaynaklar yalnızca sistem belleğinde desteklenir. Bağdaştırıcılar arası paylaşılan yığınlar/kaynaklar, D3D12_HEAP_TYPE_DEFAULT yığınlarında ve D3D12_HEAP_TYPE_CUSTOM yığınlarında desteklenir (L0 bellek havuzu ve yazma-birleştirme CPU sayfası özellikleriyle). Sürücüler, bağdaştırıcılar arası paylaşılan yığınlara yönelik GPU okuma/yazma işlemlerinin sistemdeki diğer GPU'larla uyumlu olduğundan emin olmalıdır. Örneğin, cpu yığın verilerine doğrudan erişemiyorsa genellikle boşaltılması gerekmeyen GPU önbelleklerinde bulunan yığın verilerinin sürücünün dışlanması gerekebilir.
Uygulamanız, çapraz bağdaştırıcı yığınlarının kullanımını yalnızca sağladığı işlevselliği gerektiren senaryolarla sınırlandırmalıdır. Çapraz bağdaştırıcı yığınları, getCustomHeapPropertiesher zaman önerdiği gibi olmayan D3D12_MEMORY_POOL_L0 bulunur. Bu bellek havuzu ayrık/ NUMA bağdaştırıcısı mimarileri için verimli değildir. En verimli doku düzenleri her zaman kullanılamaz.
Aşağıdaki sınırlamalar da geçerlidir:
- Yığın katmanlarıyla ilgili yığın bayrakları D3D12_HEAP_FLAG_ALLOW_ALL_BUFFERS_AND_TEXTURES olmalıdır.
- D3D12_HEAP_FLAG_SHARED de ayarlanmalıdır.
- D3D12_HEAP_TYPE_DEFAULT veya D3D12_MEMORY_POOL_L0 ile D3D12_HEAP_TYPE_CUSTOM ve D3D12_CPU_PAGE_PROPERTY_NOT_AVAILABLE ayarlanmalıdır.
- Yalnızca D3D12_RESOURCE_FLAG_ALLOW_CROSS_ADAPTER olan kaynaklar bağdaştırıcılar arası yığınlara yerleştirilebilir.
- korumalı oturum, D3D12_HEAP_FLAG_SHARED_CROSS_ADAPTER belirtildiğinde yığının oluşturulmasına geçirilemiyor
Birden çok bağdaştırıcı kullanma hakkında daha fazla bilgi için Çok bağdaştırıcılı sistemler bölümüne bakın.
İlgili konular
- Yığınlar İçinde Alt Konum