¿Cómo usar OpenCL en Android?
opengl-es gpgpu (6)
Aunque ha pasado el tiempo desde que se formuló la pregunta original, creo que esto sigue siendo una pregunta para muchos desarrolladores.
Hay dos aspectos en la respuesta. En primer lugar, desafortunadamente, Google no es compatible oficialmente con OpenCL.
En segundo lugar, afortunadamente, muchos proveedores de chips ofrecen sus bibliotecas para admitir OpenCL. Por el momento, la mayoría de los teléfonos inteligentes insignia y de nivel medio (con Qualcomm Adreno GPU, ARM Mali GPU o Imagination PowerVR GPU) incluyen las bibliotecas OpenCL.
Para usar OpenCL en Android, hay varios pasos:
- compruebe si hay una biblioteca OpenCL en el dispositivo. Esto se puede hacer usando OpenCL-Z Android . Esta es una gran herramienta para verificar la disponibilidad de OpenCL en dispositivos Android y también proporciona métricas de rendimiento informático en bruto, que podrían ser muy útiles.
Las bibliotecas OpenCL para los principales proveedores de chips se pueden encontrar en los dispositivos: A continuación se muestra la ubicación de la biblioteca OpenCL:
Qualcomm Adreno:
/system/vendor/lib/libOpenCL.so
or /system/lib/libOpenCL.so (older devices)
ARM Malí:
/system/vendor/lib/egl/libGLES_mali.so
or /system/lib/egl/libGLES_mali.so
PowerVR:
/system/vendor/lib/libPVROCL.so
Escriba su programa OpenCL usando C o C ++
Cree un proyecto NDK para compilar su código C / C ++ y pruébelos en el dispositivo como ejecutables.
Crea una interfaz JNI para tus funciones de programa NDK.
Cree un proyecto para Android, usando las funciones JNI en el código JAVA para llamar a funciones nativas relacionadas con OpenCL.
El tutorial sony es una buena fuente para referirse. Las técnicas presentadas en ese tutorial se pueden aplicar a cualquier Qualcomm Adreno GPU. Con modificaciones mínimas, ese código y los archivos make también se pueden ejecutar en otros dispositivos compatibles con OpenCL (como Mali y PowerVR).
Espero que esto ayude.
Para la independencia de la plataforma (escritorio, nube, móvil, ...) sería genial usar OpenCL para el desarrollo de GPGPU cuando la velocidad sí importa. Sé que Google empuja a RenderScript como alternativa, pero parece que solo estará disponible para Android y es poco probable que esté incluido en iOS.
Por lo tanto, busco una solución para ejecutar código OpenCL dentro de las aplicaciones de Android.
En su lugar, debe usar RenderScript Compute: http://developer.android.com/guide/topics/renderscript/compute.html
Usar OpenCL no es muy seguro porque la biblioteca (o la capacidad) puede no estar disponible en el dispositivo de destino. Para ser sincero, ni siquiera sé si algún dispositivo Android realmente lo admite. RenderScript recurrirá al cómputo de la CPU si la GPU en el dispositivo no es capaz de ejecutar el programa que desee ejecutar.
Sin embargo, si aún desea utilizar OpenCL, aquí hay algo que puede ayudarlo http://www.pgroup.com/lit/articles/insider/v4n2a3.htm
Es posible que desee / necesite el SDK específico del dispositivo (como el nVidia Tegra SDK) para tener el control adecuado.
Khronos lanzó OpenCL 2.0, que incluye soporte oficial para Android: https://www.khronos.org/news/press/khronos-releases-opencl-2.0
Los únicos dispositivos Android que conozco que admiten OpenCL son los basados en la familia de chips Mali T600 (artículo aquí ). Tienen un OpenCL SDK . Aparentemente es el perfil completo de OpenCL 1.1 también.
El Nexus 10 es un dispositivo que usa dicho chip. El SoC dual Samsung Exynos 5 usa un Mali T604, por lo que cualquier cosa que use esto supuestamente podría usarse con el Mali T600 OpenCL SDK (no he probado nada de esto).
El autor del blog OpenCL está intentando probar esto , por lo que valdría la pena seguir su serie de artículos.
Pero, el soporte de OpenCL en Android es nuevo (a partir del 16/2/2013) por lo que, aunque es excelente para la experimentación, podría valer la pena tener cuidado hasta que haya más soporte (quién dice que el soporte inicial de OpenCL 1.1 es muy complicado)
Todas las publicaciones seriadas de Qualcomm Adreno 300 admiten el perfil incrustado OpenCL 1.1. Para usar OpenCL, debe desarrollar el código NDK ya que Google no admite el OpenCL en la capa Java. Es bastante sencillo escribir código OpenCL si sabes cómo desarrollar el código NDK. Debe tener disponible libOpenCL.so, que se puede recuperar desde el dispositivo compatible con OpenCL, como las versiones HTC one, Moto X y Samsung Note / Galaxy que usan Snapdragon.
Verifique una demo de Android OpenCL en el mundo desarrollador de Sony, complete el proyecto con la fuente, donde se realiza un filtrado bilateral de una imagen en OpenCL y se compara con una implementación de subproceso único en C. También se puede encontrar algo de información sobre qué tipo de soporte se espera en dispositivos Sony, etc.
Artículo:
Mejora el rendimiento de tu aplicación de Android con OpenCL
Fuente del artículo:
Fuente para el proyecto OpenCl Android
Descargo de responsabilidad: soy un consultor en Sony Mobile