Intel Learning Series para desarrolladores para Android*, n.º 10: GPU en Android* para el procesador Intel® Atom™

1. Introducción

En este capítulo se analizan las GPU y cómo optimizar para las GPU incluidas en los procesadores Intel® Atom™.

2. Evolución de las GPU

Es importante entender cómo están evolucionando las GPU para dispositivos móviles. Originalmente, los dispositivos móviles usaban rasterización por software para generar la imagen final de la pantalla. Sin embargo, la CPU se sobreexigía al tener que realizar la rasterización y todas las demás tareas necesarias en un sistema operativo moderno. En Android, la CPU realiza numerosas tareas en segundo plano, controla las E/S y ejecuta las aplicaciones. Si se suma a esto la gran cantidad de animaciones y efectos gráficos de Android que se usan para que la interfaz de usuario sea intuitiva, se hace evidente la necesidad de usar una GPU.

El procesador Intel Atom está diseñado para maximizar el rendimiento y la duración de la batería en los dispositivos móviles. Tal como la CPU de los procesadores Intel Atom está especialmente diseñada para dispositivos móviles, lo mismo es cierto para la GPU. Gran parte del diseño de GPU inicial provino de OpenGL* ES. En el siguiente capítulo se explora OpenGL ES y cómo la API permite a los desarrolladores escribir aplicaciones gráficas en Android.

OpenGL se ideó para usarse en equipos de escritorio. Admite numerosas características que no son necesarias en los dispositivos móviles, como operaciones con exactitud científica y precisión de alta cantidad de bits. Se necesitaría mucho hardware adicional para que un dispositivo fuera totalmente compatible con OpenGL. El hardware extra consumiría valiosos recursos de espacio y energía. Y aquí es donde entra en juego OpenGL ES. OpenGL ES se diseñó para dispositivos móviles y elimina muchas de las características de OpenGL que no son necesarias para los dispositivos móviles.

OpenGL ES 1.1 sólo admite pipelines de función fija. Por lo tanto, los diseñadores de GPU que apuntan a OpenGL ES 1.1 pueden crear GPU de uso especial muy simples. Con la evolución de los dispositivos móviles, esta limitación estaba impidiendo el avance de las técnicas gráficas modernas. OpenGL ES se extendió para admitir pipelines programables (es decir, sombreadores o shaders) en OpenGL ES 2.0. Esta evolución abrió la puerta a elementos visuales mucho más complejos, como se ven en los juegos tridimensionales modernos. Sin embargo, también condujo a que las GPU se volvieran considerablemente más complejas.

OpenGL ES 2.0 es la API de gráficos dominante. Pero la historia no termina aquí. Ya está por llegar OpenGL ES 3.0 y consigo la posibilidad de usar técnicas aún más complejas y visualmente impactantes.

3. Dos grandes modelos de diseño de GPU para móviles

Actualmente hay dos diseños principales que se usan en las GPU para móviles: diferidas e inmediatas. Las GPU de modo diferido esperan a que se hayan enviado todos los comandos de una trama individual antes de procesar el trabajo. En el modo inmediato, se empieza a trabajar con los comandos ni bien están listos. En la Tabla 1 se muestran algunos de los principales fabricantes de GPU y el tipo de diseño que usan.

GPU Tipo
Intel® HD Graphics Inmediato
AMD Radeon* Inmediato
NVIDIA GeForce* Inmediato
NVIDIA Tegra* Inmediato
Qualcomm Adreno* Inmediato/diferido
Imagination Technologies PowerVR* Diferido
ARM Mali* Diferido

Tabla 1: Principales fabricantes de GPU y sus tipos de diseño. (Nota: Intel HD Graphics forma parte de los procesadores Intel® Core™. Los procesadores Intel® Atom™ actuales usan GPU basadas en PowerVR).
Fuente: Intel Corporation, 2012

3.1. Ventajas de las GPU de modo diferido

Las GPU de modo diferido tienen varias ventajas importantes. En primer lugar, los datos que se envían a la GPU se pueden organizar mejor. Esto permite reducir considerablemente el uso de ancho de banda de memoria. El uso de memoria consume mucha energía, así que al limitarse el ancho de banda de memoria se ahorra mucha energía.

Como se conocen todos los datos para representar la trama, el trabajo se puede dividir en fragmentos más pequeños sin mayor dificultad. PowerVR es considerado un renderizador diferido basado en mosaicos. Esto es así porque la GPU recopila todos los comandos o datos para generar una trama y luego divide el trabajo en pequeños mosaicos. Un mosaico no es sino un conjunto cuadrado de píxeles. Este conjunto está ideado para ajustarse a cachés de muy alta velocidad. Se encontrará más información acerca de todas las ventajas del diseño de PowerVR en su documentación: http://www.imgtec.com/powervr/insider/docs/POWERVR%20Series5%20Graphics.SGX%20architecture%20guide%20for%20developers.1.0.8.External.pdf.

La representación diferida tiene, no obstante, varias limitaciones. La memoria y el caché de la GPU no pueden ser tan grandes como uno quiera. Si una trama tiene demasiados datos para representar, es necesario dividir el trabajo en varias pasadas. Esta redundancia produce mucho overhead y se desperdician muchas operaciones. Gran parte de los trucos de optimización para GPU de modo diferido implican evitar este “talón de Aquiles”.

3.2. Nota acerca de la definición de “diferido”

El término diferido tiene una gran cantidad de significados con relación a gráficos de computadora. Se habla de GPU de modo diferido, representaciones diferidas, sombreado diferido, iluminación diferida y rasterización diferida. Para dificultar más las cosas, las definiciones no coinciden entre sí y dependen del contexto No hay que confundir el modo diferido de las GPU con las técnicas de representación diferida. En general, las técnicas de representación diferida hacen referencia a acumular datos de la escena en un búfer G y aplicar iluminación/sombras en el espacio de pantalla.

3.3. Ventajas de las GPU de modo inmediato

Las GPU de modo inmediato han predominado durante décadas en los equipos de escritorio. Muchas técnicas, trucos y optimizaciones de representación se han creado con el modo inmediato en mente. Por lo tanto, estas GPU se han vuelto muy complejas y potentes.

Dado que las representaciones en modo inmediato comienzan a procesar los comandos ni bien están listos, las tareas simples se pueden completar con mayor rapidez y eficiencia. Además, no presentan tantos puntos débiles respecto de la cantidad de datos que se pasan a la GPU.

Sin embargo, se les ha diseñado durante años con la idea de usarlas en equipos de escritorio con enormes fuentes de alimentación. Como consecuencia, se ha maximizado su rendimiento al costo de usar mucha energía. Esta es la causa de que el modo diferido haya dominado el mercado de dispositivos móviles. Pero las investigaciones y el desarrollo en el ámbito de las GPU de modo inmediato ha ido reduciendo a paso firme la utilización de energía; esto se puede observar en Intel HD Graphics, que se incluye en los procesadores Intel Core.

4. Optimización para GPU de Intel

Como se muestra en la Tabla 2, los procesadores Intel Atom diseñados para Android usan GPU PowerVR.

Serie de procesadores Intel Atom Núcleo de GPU
Z24XX PowerVR SGX 540
Z2580 PowerVR SGX 544MP2

Tabla 2: Procesadores Intel Atom diseñados para usar en Android, y sus GPU (se pueden encontrar más detalles sobre procesadores individuales en ark.intel.com).
Fuente: Intel Corporation, 2012

Es importante consultar la documentación de Imagination Technologies sobre PowerVR. Los consejos y trucos generales de optimización que ofrece Imagination Technologies son tan importantes en las plataformas Intel como en otras con PowerVR.

Para comprender bien el hardware PowerVR, se recomienda consultar la guía de arquitecturas de Imaginations Technologies: http://www.imgtec.com/powervr/insider/docs/POWERVR%20Series5%20Graphics.SGX%20architecture%20guide%20for%20developers.1.0.8.External.pdf.

Para comprender bien cómo optimizar para el hardware PowerVR, se sugiere leer las recomendaciones para desarrolladores de Imaginations Technologies: http://www.imgtec.com/powervr/insider/docs/POWERVR%20SGX.OpenGL%20ES%202.0%20Application%20Development%20Recommendations.1.8f.External.pdf. Se aconseja prestar mucha atención a las “reglas de oro”.

Es importante usar una buena compresión de texturas en los dispositivos móviles. De esta manera, se reducirán los tamaños de las descargas, se mejorará la calidad visual, aumentará el rendimiento y se reducirá el impacto en el ancho de banda de memoria. Sin embargo, este es uno de los desafíos más grandes en Android. Como Android es compatible con una amplia variedad de hardware, no hay un formato de texturas que funcione bien en todos los dispositivos. OpenGL ES sólo exige que el hardware admita la compresión de texturas ETC. Lamentablemente, este formato no admite canal alfa. Entonces, los desarrolladores se ven obligados a admitir múltiples formatos de textura. Para PowerVR, los desarrolladores deberían comprimir todas las texturas con PVRTC.

5. Conclusión

En este capítulo se presentó un breve resumen de las GPU para dispositivos móviles y cómo optimizar para las GPU incluidas en los procesadores Intel Atom. En el próximo capítulo, observaremos más de cerca OpenGL ES, la API que se usa para controlar la GPU.