GPU bilgi işlemesinin ideal olduğu iş yükleri için RenderScript komut dosyalarını Vulkan compute'a taşımak, uygulamanızın GPU donanımı üzerinde daha fazla kontrol sahibi olmasını sağlar. Bu sayede, diğer API'lere kıyasla ek performans potansiyeli ortaya çıkar.
RenderScript komut dosyalarını değiştirmek için Vulkan işlem gölgelendiricilerini kullanmanıza yardımcı olmak üzere üst düzey bir genel bakış aşağıda verilmiştir.
Vulkan Başlatma
Kotlin veya Java'da RenderScript bağlam nesnesi oluşturmak yerine NDK'yı kullanarak Vulkan bağlamı oluşturmak için aşağıdaki adımları uygulayın.
Vulkan örneği oluşturun.
İşlem sırasını destekleyen bir Vulkan fiziksel cihaz seçin.
Vulkan mantıksal cihazı oluşturup işlem sırasını alın.
İsteğe bağlı olarak, Vulkan uygulaması geliştirme sürecinizi hızlandırmak için Android'de Vulkan doğrulama katmanlarını ayarlayabilirsiniz.
Örnek uygulama, VulkanContext.h
'te Vulkan bağlamının nasıl başlatılacağını gösterir.
Daha fazla bilgi edinmek için Vulkan spesifikasyonunun Başlatma ile Cihazlar ve Sıralar bölümlerine bakın.
Vulkan Ayırmaları
RenderScript Ayırma işlemi, bir Vulkan depolama görüntüsüne veya bir Vulkan depolama arabelleğine taşınabilir. Salt okunur resimlerle daha iyi performans elde etmek için birleşik resim örnekleyici olarak veya farklı örnekleyici ve örneklenmiş resim bağlamaları ile getirme işlemleri olan örneklenmiş bir resim kullanın.
Vulkan kaynakları Vulkan içinde ayrılır. Diğer Android bileşenleriyle etkileşim kurarken ek bellek kopyalamasını önlemek için bir Android AHardwareBuffer
uzantısını Vulkan'a aktarmak üzere VK_ANDROID_external_memory_android_hardware_buffer
uzantısını kullanabilirsiniz. Bu uzantı, Vulkan 1.1'i destekleyen tüm Android cihazlarda kullanılabilir. Daha fazla bilgi için FEATURE_VULKAN_HARDWARE_VERSION
sayfasına bakın.
Örnek uygulama, VulkanResources.h
'te Vulkan kaynaklarının nasıl oluşturulacağını göstermektedir.
Daha fazla bilgi edinmek için Vulkan spesifikasyonunun kaynak oluşturma ve kaynak açıklayıcı bölümlerine bakın.
Vulkan bilgi işlem gölgelendiricilerine dönüştürme
RenderScript komut dosyalarınız Vulkan bilgi işlem gölgelendiricilerine dönüştürülmelidir. Ayrıca, RenderScript genellerinin kullanımına bağlı olarak kodunuzu uyarlamanız gerekebilir.
Vulkan işlem gölgelendiricisi yazma
Vulkan bilgi işlem gölgelendiricisi, genellikle OpenGL Gölgeleme Dili (GLSL) ile yazılır ve ardından Standard Portable Intermediate Representation-V (SPIR-V) biçiminde derlenir.
Ayrıntılı bilgiler ve gölgelendiricileri uygulamanıza entegre etmeye ilişkin talimatlar için Android'de Vulkan gölgelendirici derleyicileri konusuna bakın.
Komut dosyası genellerinin uyarlanması
Komut dosyası genellerinin özelliklerine dayalı olarak, gölgelendirici içinde değiştirilmemiş geneller için uzmanlık sabitleri, itme sabitleri veya tek tip arabellek nesneleri kullanmanızı öneririz:
- Uzmanlık sabitleri: Çekirdek çağrılarında çoğunlukla tutarlı olan komut dosyası genelleri için önerilir. Uzmanlık sabitlerinin değerinin değiştirilmesi, işlem ardışık düzeninin yeniden oluşturulması gerekir.
- Aktarma sabitleri:
maxPushConstantsSize
değerinden küçük olan ve sık değişen komut dosyası genelleri için önerilir (minimum: 128 bayt). - Tek tip arabellek: Aktarım sabit sınırından daha büyük boyutlardaki ve sık değiştirilen komut dosyası genelleri için önerilir.
Gölgelendiricide değiştirilen global boyutlar için Vulkan depolama görüntüsü veya Vulkan depolama arabelleği kullanabilirsiniz.
Hesaplamalar
GPU'nun işlem gölgelendiricinizi yürütmesi için bir Vulkan işlem ardışık düzeni oluşturmanız gerekir.
Vulkan işlem ardışık düzeni oluşturma
Örnek uygulamadaki ComputePipeline.h
dosyasında, Vulkan bilgi işlem ardışık düzeninin nasıl oluşturulacağı gösterilmektedir.
Vulkan'da derlenmiş bir SPIR-V gölgelendiriciyi kullanmak için aşağıdaki gibi bir Vulkan işlem ardışık düzeni oluşturun:
- Derlenmiş SPIR-V gölgelendiriciyle bir gölgelendirici modülü oluşturun.
- Kaynak bağlamalarını belirten bir açıklayıcı grubu düzeni oluşturun (daha fazla ayrıntı için Ayırmalar bölümüne bakın).
- Açıklayıcı grubu düzeninden bir açıklayıcı grubu oluşturun.
- Açıklayıcı grubu düzeninden bir ardışık düzen düzeni oluşturun.
- Gölgelendirici modülü ve ardışık düzen düzeniyle işlem ardışık düzeni oluşturun.
Daha fazla bilgi için Vulkan spesifikasyonundaki İşlem Ardışık Düzenleri bölümüne bakın.
Hesaplama başlatma
Hesaplamaya bir işlem ardışık düzeniyle başlamak için:
- Açıklayıcı kümesini Vulkan kaynaklarıyla güncelleyin.
- Bir Vulkan komut arabelleği oluşturun ve aşağıdaki komutları kaydedin:
- Ardışık düzeni ve açıklayıcı grubunu bağlayın.
- İşlem çalışma gruplarını gönderin.
- Komut arabelleğini işlem sırasına gönderin.
- Sırayı bekleyin veya isteğe bağlı olarak bir senkronizasyon sınırı döndürün.
Birden çok çekirdeği zincir halinde birleştirmek için (örneğin, kodları ScriptGroup
kullanarak) tek bir komut arabelleğine kaydedin ve bellek bariyerleriyle senkronize edin.
Örnek uygulamada iki işlem görevi gösterilmektedir:
- HUE rotasyonu: Tek bir gölgelendirici ile basit bir hesaplama görevi. Kod örneği için
ImageProcessor::rotateHue
sayfasını inceleyin. - Bulanıklaştırma: Sırayla iki hesaplama gölgelendirmesi yürüten daha karmaşık bir işlem görevi. Kod örneği için
ImageProcessor::blur
adresine göz atın.
Komut arabellekleri veya bellek bariyerleri hakkında daha fazla bilgi edinmek için Vulkan spesifikasyonunda bulunan Komut Arabelleği ve Bellek Bariyerleri adlı bölümlere bakın.