2012-01-25 16 views
24

Aby uzyskać niezależność w zakresie plattform (desktop, cloud, mobile, ...) byłoby świetnie wykorzystać OpenCL do rozwoju GPGPU, gdy liczy się prędkość. Wiem, że Google zastępuje RenderScript jako alternatywę, ale wydaje się, że jest dostępny tylko dla systemu Android i prawdopodobnie nie zostanie uwzględniony w systemie iOS.Jak korzystać z OpenCL na Androida?

Dlatego szukam rozwiązania do wykonania kodu OpenCL w aplikacjach Android.

+0

Zastanawiam się, czy aktualizacja może być w porządku tutaj, po przeczytaniu tej historii o adaptacji Intela AMP Microsoftu do OpenCL i llvm/Clang: http://www.phoronix.com/scan.php?page=news_item&px = MTIyOTk w połączeniu z bardzo niedawnym dołączeniem llvm/Clang do zestawu narzędzi NDK Androida: http://clang-developers.42468.n3.nabble.com/Clang-now-included-in-Android-NDK-r8c-td4028206 .html Patrząc teraz tylko na to, a jeszcze nie wypróbowałem, będę eksperymentować i oferować wiadomości o moich wynikach w przyszłym poście. – Jackalope

Odpowiedz

12

Jedynymi urządzeniami z Androidem, które obsługują OpenCL są te oparte na rodzinie chipów Mali T600 (artykuł here). Mają one OpenCL SDK. Najwyraźniej jest to również pełny profil OpenCL 1.1.

Urządzenie Nexus 10 jest urządzeniem wykorzystującym taki układ. Podwójny SoC Samsung Exynos 5 używa Mali T604, więc wszystko, co może być używane z tym podobno, może być używane z Mali T600 OpenCL SDK (nie próbował tego samemu).

Autor bloga OpenCL próbuje have a go with this, więc warto zapoznać się z jego serią artykułów.

Jednak obsługa OpenCL na Androidzie jest zupełnie nowa (stan na dzień 16/2/2013), więc chociaż jest świetna do eksperymentowania, warto zachować ostrożność, dopóki nie będzie więcej wsparcia (kto mówi, jak błędne jest wsparcie OpenCL 1.1 jest)

+2

Adreno 320 i nowsze wersje mają OpenCL, np. Nexus 4 obsługuje go –

+2

Żadne z urządzeń Google, ponieważ uważam, że 4.3 nie będzie go jednak udostępniać. – chrisvarnz

+0

Popraw mnie, jeśli się mylę, ale AFAIK, absolutnie niemożliwe jest korzystanie z OpenCL na najnowszych wersjach Androida i to się nie zmieni. Google pcha Rendescript na Androida do tego rodzaju zadań. – Teovald

4

Należy użyć RenderScript Compute zamiast: http://developer.android.com/guide/topics/renderscript/compute.html

Korzystanie OpenCL nie jest bardzo bezpieczne, ponieważ biblioteka (lub zdolność) mogą nie być dostępne na urządzeniu docelowym. Szczerze mówiąc, nie wiem nawet, czy jakieś urządzenie z Androidem faktycznie to obsługuje. RenderScript powróci do obliczeń procesora, jeśli GPU w urządzeniu nie będzie w stanie wykonać jakiegokolwiek programu, który chcesz uruchomić.

Jednakże, jeśli nadal chcesz używać OpenCL, heres coś, co może pomóc http://www.pgroup.com/lit/articles/insider/v4n2a3.htm

może chcesz/potrzebujesz SDK urządzenia specyficzne (jak nVidia Tegra SDK) w celu uzyskania właściwej kontroli.

+3

To nie odpowiada na pytanie. Jeśli chodzi o to, jak mam uzyskać dostęp do GPU ... –

+2

@TimChild Pytanie brzmiało, jak używać OpenCL do GPGPU, na które odpowiedziałem. – silverclaw

+5

Nie zrobiłeś tego - powiedziałeś, że nie będziesz go używał, gdy OP wyraźnie mówi o jego braku zainteresowania RenderScript. Wierzę, że odpowiedź @prunge jest dokładniejsza. Ponadto PGCL jest produktem handlowym. – Ani

2

Wszystko Qualcomm Adreno 300 seriali wsparcia OpenCL 1.1 osadzonym profilem. Aby korzystać z OpenCL, musisz opracować kod NDK, ponieważ OpenCL nie jest obsługiwany przez google w warstwie Java. Bardzo trudno jest napisać kod OpenCL, jeśli wiesz, jak stworzyć kod NDK. Musisz mieć dostępne libOpenCL.so, które można pobrać z urządzenia obsługującego OpenCL, takiego jak HTC One, Moto X i Samsung Note/Galaxy, które używają Snapdragon.

5

Zamówienie demo systemu Android OpenCL w świecie programistów Sony, pełny projekt ze źródłem, w którym dwustronne filtrowanie obrazu odbywa się w OpenCL i porównuje z pojedynczą implementacją C wątku. Pewne informacje na temat rodzaju wsparcia spodziewanego w urządzeniach Sony itp. Można znaleźć również w tym artykule.

artykułu:

Boost the performance of your Android app with OpenCL

źródło artykułu:

Source to OpenCl Android project

Disclaimer: Jestem konsultantem w Sony Mobile Communications

+0

OpenCL jest niedostępne na wszystkich urządzeniach z Androidem i wprowadzające w błąd programistów, którzy uważają, że rozsądne API do ich wykorzystania do programowania/dystrybucji jest złe. Jeśli potrzebujesz dalszych wyjaśnień, skontaktuj się ze mną. –

+1

Nigdy nie napisałem czegoś odwrotnego (że jest dostępny na wszystkich urządzeniach), wręcz przeciwnie, jest to wyraźnie określone w artykule, który (w tym przypadku) obsługuje urządzenie Sony, kilka innych odpowiedzi podało tutaj informacje, jakiego wsparcia można się spodziewać na innych urządzeniach . – Magnus

8

Mimo, że czas, który upłynął od pierwotnego pytania został zapytany, myślę, że to wciąż pytanie dla wielu programistów.

Istnieją dwa aspekty w odpowiedzi. Po pierwsze, niestety, Google nie obsługuje oficjalnie OpenCL.

Po drugie, na szczęście wielu producentów układów udostępnia swoje biblioteki do obsługi OpenCL. Na razie większość flagowych i średnich smartfonów (z procesorem GPU Qualcomm Adreno, GPU ARM Mali lub procesorem graficznym Imagination PowerVR) zawiera biblioteki OpenCL.

Aby skorzystać z OpenCL na Androida, istnieje kilka kroków:

  1. sprawdzić, czy jest OpenCL bibliotekę na urządzeniu. Można to zrobić za pomocą OpenCL-Z Android. Jest to doskonałe narzędzie do sprawdzania dostępności OpenCL na urządzeniach z systemem Android, a także zapewnia nieprzetworzone dane dotyczące wydajności, które mogą być bardzo pomocne.

bibliotek OpenCL dla największych producentów chipów można znaleźć w urządzeniach: Poniżej przedstawiono położenie biblioteki OpenCL:

Qualcomm Adreno:

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

ARM Mali:

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

PowerVR:

/system/vendor/lib/libPVROCL.so 
  1. Wpisz swój program OpenCL używając C lub C++

  2. Tworzenie projektu NDK skompilować C/C++ kod i przetestować je na urządzeniu wykonywalności.

  3. Utwórz interfejs JNI dla funkcji programu NDK.

  4. Utwórz projekt Android, używając funkcji JNI w kodzie JAVA, aby wywoływać natywne funkcje związane z OpenCL.

Samouczek sony jest dobrym źródłem do odniesienia. Techniki przedstawione w tym samouczku można zastosować do dowolnego procesora GPU Qualcomm Adreno. Przy minimalnych modyfikacjach ten kod i pliki Makefile można również uruchamiać na innych urządzeniach obsługujących OpenCL (takich jak Mali i PowerVR).

Mam nadzieję, że to pomoże.

+0

Po prostu dziękuję za referencje OpenCL-Z ... jest tak mało dobrych informacji na temat interakcji OpenGLES-OpenCL! Doceniam to! –

+0

hmm, myślę, że powodem jest to, że tak niewielu ludzi używało funkcji interakcji gl-cl. w szczególności mamy shadera obliczeniowego GL w nowszym OpenGL, szansa, że ​​zobaczymy współdziałanie gl-cl w aplikacji będzie jeszcze mniejsza. –

+0

BTW, jeśli dobrze pamiętam, w starszym chipie Samsung Exynos, GPU Mali (T-628) obsługuje OpenCL 1.1, jednak niektóre interfejsy API GL-CL interop nie zostały nawet zaimplementowane! Wiem, że ponieważ mam jakiś kod, który zawiera użycie współdziałania bufora GL-CL, kod ten rozbił się podczas wykonywania tych API. Następnie sprawdziłem libGLES_mali.so i odkryłem, że te API nie są nawet zaimplementowane. –

Powiązane problemy