Recientemente Google ha publicado en su blog de desarrolladores una comparativa sobre la mejora de rendimiento obtenido en Android 4.2 gracias a Renderscript, y he considerado que es una buena oportunidad para explicar que es.
Sin meternos en datos muy técnicos, Renderscript es un conjunto de instrucciones que los desarrolladores de Android podemos usar para llevar a cabo *cálculos altamente complejos de forma más eficiente*, siendo las operaciones con imágenes las más usuales.
Y es que, como muchos sabréis, las aplicaciones Android se programan, principalmente, usando el lenguaje Java, el cual se ejecuta sobre una máquina virtual y no directamente sobre el hardware, provocando así una considerable disminución del rendimiento.
La principal ventaja de la máquina virtual es que el programador no necesita conocer el hardware y ni las capacidades de este, simplificando la creación de aplicaciones.
Anteriormente, si de deseaba obtener un mayor rendimiento podía usarse el NDK, el cual nos permite ejecutar código nativo (en C), pero en muchos casos conllevaba lanzar distintas versiones de la aplicación debido a incompatibilidades entre procesadores. Por esto, los chicos de Mountain View decidieron lanzar Renderscript, un conjunto limitado de instrucciones que sí se ejecutan de forma nativa en cualquier hardware.
Si bien sigue siendo más complicado que el código Java, el rendimiento que se obtiene puede merecer la pena cuando se ejecutan multitud de instrucciones. Quizás uno de los aspectos más importantes de Renderscript es que, si es mejorado, *todas las aplicaciones que hagan uso de él recibirán dicha mejora* sin necesidad de modificarlas ni reecompilarlas.
En esta gráfica podemos ver como en Android 4.1 y 4.2 se ha ido mejorando el rendimiento que ofrece dichas instrucciones:
Se observa fácilmente como en la mayoría de las ocasiones, el procesado de imágenes de Android 4.2 dobla a 4.0.
Además, en la última versión del robot verde, se ha añadido soporte GPU. Si nuestro terminal lo permite, determinadas instrucciones podrán ser ejecutadas en la GPU con el consecuente aumento de rendimiento, como muestra la siguiente gráfica del Nexus 10.
Como podemos ver, en determinados casos la mejora puede llegar hasta 7 veces más.
Desgraciadamente, son pocos los terminales que actualmente soportan el apoyo por GPU, pero casi toda la próxima generación de gama alta contará con él.