Komut dosyalarını Vulkan'a taşı

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.

  1. Vulkan örneği oluşturun.

  2. İşlem sırasını destekleyen bir Vulkan fiziksel cihaz seçin.

  3. 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:

  1. Derlenmiş SPIR-V gölgelendiriciyle bir gölgelendirici modülü oluşturun.
  2. 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).
  3. Açıklayıcı grubu düzeninden bir açıklayıcı grubu oluşturun.
  4. Açıklayıcı grubu düzeninden bir ardışık düzen düzeni oluşturun.
  5. 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:

  1. Açıklayıcı kümesini Vulkan kaynaklarıyla güncelleyin.
  2. Bir Vulkan komut arabelleği oluşturun ve aşağıdaki komutları kaydedin:
    1. Ardışık düzeni ve açıklayıcı grubunu bağlayın.
    2. İşlem çalışma gruplarını gönderin.
  3. Komut arabelleğini işlem sırasına gönderin.
  4. 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.