Android NDK y optimizacion para x86

34
Android NDK y optimización para x86 Pedro Galván - @pedrogk Mobilecamp MX, agosto 2014 #IntelAndroid #MobileCampMx http://slideshare.net/RevistaSG

description

Presentación sobre optimización de Android NDK para x86 impartida en MobileCampMx por Pedro Galvan

Transcript of Android NDK y optimizacion para x86

Page 1: Android NDK y optimizacion para x86

Android NDK y optimización

para x86

Pedro Galván - @pedrogk

Mobilecamp MX, agosto 2014

#IntelAndroid #MobileCampMx

http://slideshare.net/RevistaSG

Page 2: Android NDK y optimizacion para x86

Aclaraciones

• Sobre mí.

• Sobre enfoque de la plática.

• Sobre Intel.

#IntelAndroid 2

Page 3: Android NDK y optimizacion para x86

Repaso

#IntelAndroid 3

Page 4: Android NDK y optimizacion para x86

Reality check: Android funciona sobre

distintas arquitecturas de procesador

• ARM (armeabi, armeabi-v7a)

– Qualcomm, Apple, Nvidia

• x86

– Intel

• MIPS

#IntelAndroid 4

Page 5: Android NDK y optimizacion para x86

Android software stack

Crédito: https://thenewcircle.com/s/post/1044/remixing_android

#IntelAndroid 5

Page 6: Android NDK y optimizacion para x86

Estrategias para crear Android apps

• Clásica

• Astuta

• Merol

#IntelAndroid 6

Page 7: Android NDK y optimizacion para x86

Clásica

Java, Android application framework

#IntelAndroid 7

Page 8: Android NDK y optimizacion para x86

Frameworks cross-platform

jQuery Mobile, PhoneGap (Cordova), Titanium, Xamarin, Sencha, Kendo, RubyMotion (v3), etc.

#IntelAndroid 8

Page 9: Android NDK y optimizacion para x86

NDK (Native Development Kit)

Programar librerías (en C/C++) que compilas para el tipo específico de procesador.

#IntelAndroid 9

Page 10: Android NDK y optimizacion para x86

NDK

#IntelAndroid 10

Page 11: Android NDK y optimizacion para x86

¿Natividad?

#IntelAndroid 11

Page 12: Android NDK y optimizacion para x86

¿Qué es una app NDK?

• Una aplicación que utiliza librerías nativas.

• Las librerías son archivos .so que típicamente

están en libs/CPU_ABI/

• Las librerías son generadas a partir de código

fuente, o por motores (ej. juegos).

• No existen aplicaciones 100% nativas. Solo

algunas partes de la app se implementan

como librerías nativas.

#IntelAndroid 12

Page 13: Android NDK y optimizacion para x86

¿Para qué NDK?

• Programar componentes intensivos en

procesamiento (multimedia, algoritmos

complejos, juegos).

• Acceso directo a hardware e instrucciones

específicas del procesador (ej. NEON, SSE3).

• Reutilizar código legado.

#IntelAndroid 13

Page 14: Android NDK y optimizacion para x86

NDK: Panorama del proceso

Crédito: Sebastian Mauer

#IntelAndroid 14

Page 15: Android NDK y optimizacion para x86

Compatibilidad con C/C++ estándar

• Bionic C no soporta todo lo que glibc

– Soporte limitado para pthreads

– No hay manejo de excepciones de C++

– No es POSIX compliant

#IntelAndroid 15

Page 16: Android NDK y optimizacion para x86

NDK: Compilar para varias plataformas

• Descargar Android NDK

• Compilar con ndk-build

• Utilizar opción APP_ABI para indicar

arquitectura deseada.

$ndk-build APP_ABI=armeabi-v7a

• Otros valores para APP_ABI: x86, mips, all

• También lo puedes definir en

jni/Application.mk

#IntelAndroid 16

Page 17: Android NDK y optimizacion para x86

NDK: Inconvenientes

• Mayor complejidad.

• Dificultad para depurar.

• Las mejoras de desempeño no son

garantizadas (hay overhead).

#IntelAndroid 17

Page 18: Android NDK y optimizacion para x86

Android en X86

(#IntelAndroid)

#IntelAndroid 18

Page 19: Android NDK y optimizacion para x86

Situación actual

Intel todavía tiene poco market share pero se está preparando para cambiar esto (2015).

#IntelAndroid 19

Page 20: Android NDK y optimizacion para x86

Binarios de ARM en x86

• La mayoría de las apps NDK están compiladas

para arquitectura ARM.

• Los dispositivos Intel pueden ejecutar estas

apps por medio de traducción en tiempo real,

pero afecta desempeño.

#IntelAndroid 20

“Traducir en tiempo real

tiene su chiste.”

Page 21: Android NDK y optimizacion para x86

Estrategias: Dalvik apps

a) Dejar igual

– Funcionará sin problemas porque no tiene

binarios específicos al procesador.

b) Considerar implementar partes en NDK

– Elegir partes que se puedan beneficiar más de

implementación a bajo nivel (ej: procesamiento

avanzado de gráficos).

#IntelAndroid 21

Page 22: Android NDK y optimizacion para x86

Estrategias: NDK apps

• Acceso a código fuente

– Recompilar con APP_API=x86

– Si hay instrucciones específicas a ARM, generar

versión de código para x86.

• Sin acceso a código

– Migrar (reimplementar o cambiar de motor)

– Dejar así (no recomendado por bajo desempeño)

#IntelAndroid 22

Page 23: Android NDK y optimizacion para x86

Estrategias: Motores y frameworks

• Amigables con x86

– Appcelerator, Cordova, Adobe AIR, libgdx,

Cocos2d, Unreal 3D, Project Anarchy.

• No amigables (hasta ahora)

– Unity, Corona

#IntelAndroid 23

Page 24: Android NDK y optimizacion para x86

Optimización al compilar

1. Ajustar niveles (flags) de compilación(ej. LOCAL_CFLAGS += -O1)

– O0: default,reduce tiempo de compilación

– O1: reduce tamaño de código

– O2: más lento en compilar pero mejor desempeño

– O3: como O2 pero con más opciones

• Utilizar compiladores específicos

– Intel C++ compiler for Android (mejora ~30%)

#IntelAndroid 24

Page 25: Android NDK y optimizacion para x86

Herramientas de Intel

#IntelAndroid 25

Page 26: Android NDK y optimizacion para x86

Zona de desarrolladores Intel

https://software.intel.com/es-es/android

#IntelAndroid 26

Page 27: Android NDK y optimizacion para x86

Hardware Accelerated Execution Manager (HAXM)

Aceleración por GPU para el emulador. Requieres instalar una imagen de x86 en Android SDK y habilitar VT en

tu BIOS

#IntelAndroid 27

Page 28: Android NDK y optimizacion para x86

Appthwack: Testing en la nube

http://appthwack.com

#IntelAndroid 28

Page 29: Android NDK y optimizacion para x86

Intel Graphics Performance Analyzer

• Análisis de desempeño en tiempo real

• Métricas de CPU, GPU, memoria, energía, etc.

• Componentes para juegos: frame analyzer &

debugger (OpenGL).

#IntelAndroid 29

Page 30: Android NDK y optimizacion para x86

Intel Native Development Experience

(INDE)

• Suite para desarrollo nativo (NDK) multi-

plataforma (ARM y x86).

• Fácil acceso a herramientas para desarrollo de

aplicaciones NDK.

#IntelAndroid 30

Page 31: Android NDK y optimizacion para x86

Intel XDK

• HTML5 app development

• Soporta APIs de Apache Cordova

• Crosswalk web runtime

– Aplicaciones híbridas con alto desempeño

• Testing & Debugging

• http://xdk-software.intel.com

#IntelAndroid 31

Page 32: Android NDK y optimizacion para x86

¡RIFA!

#IntelAndroid 32

Page 33: Android NDK y optimizacion para x86

Gana una Asus MemoPad 7

http://sg.com.mx/rifaintelandroid

#IntelAndroid 33

Page 34: Android NDK y optimizacion para x86

Más info

• http://giraintelandroid.com

– DF, Gdl, Mty y Bogotá

• http://sg.com.mx/buzz/tutorial-como-

ejecutar-codigo-c-android-el-ndk

• https://software.intel.com/en-

us/articles/optimizaci-n-de-aplicaciones-

android-para-arquitectura-x86

#IntelAndroid 34