2012-01-25 15 views
24

Plattform bağımsızlığı için (masaüstü, bulut, mobil, ...) hız önemli olduğunda GPGPU geliştirmesi için OpenCL kullanmak harika olurdu. Google'ın RenderScript'i bir alternatif olarak zorladığını biliyorum. Ancak bu, yalnızca Android için kullanılabilir ve iOS'a hiç dahil edilmeyecek gibi görünüyor.Android'de OpenCL nasıl kullanılır?

Bu nedenle, Android Uygulamalarında OpenCL kodunu çalıştırmak için bir çözüm bulmaya çalışıyorum.

+0

Burada bir güncelleme olup olmadığını merak ediyorum, Intel'in Microsoft'un AMP'sini OpenCL ve llvm/Clang'a uyarlaması hakkında bu hikayeyi okuduktan sonra: http://www.phoronix.com/scan.php?page=news_item&px = MTIyOTk, Android NDK araç zincirine çok yakın bir zamanda dahil olan llvm/Clang ile birleştirildi: http://clang-developers.42468.n3.nabble.com/Clang-now-included-in-Android-NDK-r8c-td4028206 .html Sadece şu anda bunu inceledim ve henüz denemedim, gelecekteki bir gönderide sonuçlarımı denemeyi ve sunmayı deneyeceğim. – Jackalope

cevap

12

OpenCL'yi destekleyen tek Android cihazları, Mali T600 çip ailesine dayanan (makale here). Onlar bir OpenCL SDK var. Görünüşe göre OpenCL 1.1 tam profili de.

Nexus 10 böyle bir çip kullanan bir aygıttır. Samsung Exynos 5 çift SoC bir Mali T604 kullanıyor, bu yüzden bu sözde kullanan herhangi bir şey Mali T600 OpenCL SDK ile kullanılabilir (bunlardan hiçbirini denemedim).

OpenCL blogunun yazarı, have a go with this numaralı makaleyi denemeye çalışmaktadır, bu nedenle makaleleri dizisini takip etmeye değer olabilir.

Ancak, Android'deki OpenCL desteği (16/2/2013 tarihi itibarı ile) yepyeni bir deneyim olmasına rağmen, daha büyük bir deneyime sahip oluncaya kadar (bu, OpenCL'nin ilk desteğinin nasıl buggy olduğunu söyleyene kadar) ihtiyatlı olmaya değer olabilir. https://www.khronos.org/news/press/khronos-releases-opencl-2.0

+2

Adreno 320 ve daha sonra OpenCL, ör. Nexus 4, –

+2

'u destekliyor. – chrisvarnz

+0

Yanılıyorsam düzeltin, ancak AFAIK, Android'in son sürümlerinde OpenCL kullanmak kesinlikle imkansız ve değişmeyecek. Google bu tür görevler için Android'de Rendescript'i zorluyor. – Teovald

4

yerine RenderScript Compute kullanmalıdır: http://developer.android.com/guide/topics/renderscript/compute.html

OpenCL çok güvenli değildir kullanarak kütüphane (veya yetenek) hedef cihazda mevcut olmayabilir çünkü. Dürüst olmak gerekirse, orada herhangi bir Android cihazının gerçekten destekleyip desteklemediğini bile bilmiyorum. RenderScript, cihazdaki GPU, çalıştırmak istediğiniz herhangi bir programı yürütemiyorsa, CPU hesaplamasına geri dönecektir. Hala sana http://www.pgroup.com/lit/articles/insider/v4n2a3.htm

yardımcı olabilir heres şey OpenCL kullanmak istiyorsanız

Ancak, sen/doğru kontrole sahip olmak amacıyla (nVidia Tegra SDK gibi) cihaza özel SDK gerek isteyebilir.

+3

Bu, sorulan soruya cevap vermiyor. Eğer soru GPU'ya nasıl eriştiyse ... –

+2

@TimChild Soru, cevapladığım GPGPU için OpenCL'in nasıl kullanılacağıydı. – silverclaw

+5

Yapmadınız - OP, RenderScript'teki ilgisizlikten açıkça bahsettiğinde bunu kullanmamayı söylediniz. Bence @prunge'un cevabı daha doğru. Ayrıca, PGCL ticari bir üründür. – Ani

1

Khronos Android için resmi destek dahil OpenCL 2.0 yayınlandı) 'dir. OpenCL'yi kullanmak için, OpenCL'nin Java katmanında google tarafından desteklenmediği için NDK kodunu geliştirmeniz gerekir. NDK kodunu nasıl geliştireceğinizi biliyorsanız, OpenCL kodu yazmak oldukça kolaydır. HTC One, Moto X ve Snapdragon kullanan Samsung Note/Galaxy sürümleri gibi OpenCL özellikli cihazdan getirilebilen libOpenCL.so sürümüne sahip olmanız gerekir.

2

Tüm Qualcomm Adreno 300 süreli yayın desteği OpenCL 1.1 gömülü profilin: 1.1

5

Sony geliştirici dünyasında bir Android OpenCL demo'su satın alın, OpenCL'de bir görüntünün iki taraflı filtrelenmesi ve tek bir dişli C uygulamasıyla karşılaştırıldığı kaynakla birlikte komple proje. Sony cihazlarda vb. Ne tür bir desteğin beklendiği hakkında bazı bilgiler de makalede bulunabilir.

Madde: makale için

Boost the performance of your Android app with OpenCL

Kaynak:

Source to OpenCl Android project

Yasal Uyarı: zaman asıl soruya geçti rağmen ben Sony Mobile

+0

OpenCL tüm Android cihazlarda mevcut değildir ve geliştiricileri, geliştirme/dağıtım için kullanmaları için makul bir API olduğunu düşünerek yanıltıcıdır. Daha fazla açıklama gerekiyorsa bana ulaşmaktan çekinmeyin. –

+1

Tam tersini (tüm aygıtlarda kullanılabilir) hiçbir zaman açıkça belirtmedim ki (bu durumda) Sony aygıtı desteklediği makalede, diğer bazı yanıtlar burada diğer aygıtlarda ne tür bir desteğin beklendiğini anladı . – Magnus

8

de Danışmanım sordu, bu hala bir sürü geliştirici için bir soru olduğunu düşünüyorum.

Yanıtın iki yönü vardır. İlk olarak, maalesef, Google OpenCL'yi resmi olarak desteklemiyor.

İkincisi, pek çok çip sağlayıcı, kütüphanelerini OpenCL'yi desteklemelerini sağlar. Şu an için, amiral gemisi ve orta kademe akıllı telefonların çoğu (Qualcomm Adreno GPU, ARM Mali GPU veya Imagination PowerVR GPU ile birlikte) OpenCL kitaplıklarını içerir.

Android'de OpenCL kullanmak için, birkaç adım vardır:

  1. onay cihazda OpenCL kütüphanesi varsa. Bu OpenCL-Z Android kullanılarak yapılabilir. Bu, Android cihazlarda OpenCL kullanılabilirliğini kontrol etmek için harika bir araçtır ve aynı zamanda çok yararlı olabilecek ham bilgi işlem metrikleri sağlar.

büyük çip satıcıları için OpenCL kütüphanelerde cihazlarda bulunabilir:

Qualcomm Adreno:

/system/vendor/lib/libOpenCL.so 
or /system/lib/libOpenCL.so (older devices) 

ARM Mali: Aşağıdakiler OpenCL kütüphanesinin yeri vardır

/system/vendor/lib/egl/libGLES_mali.so 
or /system/lib/egl/libGLES_mali.so 

PowerVR:

/system/vendor/lib/libPVROCL.so 
  1. C veya C++

  2. C/C++ kod derlemek için NDK projesi oluşturma kullanarak OpenCL programı yazın ve yürütülebilir gibi cihaz üzerinde test.

  3. NDK program işlevleriniz için JNI arabirimi oluşturun.

  4. OpenCL ile ilgili yerel işlevleri çağırmak için JAVI kodundaki JNI işlevlerini kullanarak Android projesi oluşturun.

Sony öğreticisi, başvurmak için iyi bir kaynaktır. Bu eğitimde sunulan teknikler herhangi bir Qualcomm Adreno GPU'ya uygulanabilir. Çok az modifikasyonla, bu kod ve makefile diğer OpenCL özellikli cihazlarda da (Mali ve PowerVR gibi) çalışabilir.

Bu yardımcı olur umarım.

+0

OpenCL-Z referansı için teşekkür etmek için sadece bir not ... orada OpenGLES-OpenCL interop hakkında çok az iyi bilgi var! Bunu takdir ediyorum! –

+0

hmm, bence neden bu kadar az insan gl-cl interop özelliklerini kullandı. Özellikle daha yeni OpenGL'de GL hesaplama gölgelendiricimiz var, bir uygulamada gl-cl interopunu görebilme şansımız daha da az olacaktır. –

+0

BTW, doğru bir şekilde hatırlarsam eski Samsung Exynos çipinde, Mali GPU (T-628) OpenCL 1.1'i destekliyor, ancak GL-CL interop API'lerinden bazıları bile uygulanmadı! GL-CL buffer interop kullanımını içeren bir kodum olduğu için bu API'ları çalıştırırken kodun çöktüğünü biliyorum. Sonra libGLES_mali.so dosyasına baktım ve bu API'ların bile uygulanmadığını öğrendim. –

İlgili konular