Android NDK y optimizacion para x86

209
-1

Published on

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

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
209
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
5
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Android NDK y optimizacion para x86

  1. 1. Android NDK y optimización para x86 Pedro Galván - @pedrogk Mobilecamp MX, agosto 2014 #IntelAndroid #MobileCampMx http://slideshare.net/RevistaSG
  2. 2. Aclaraciones • Sobre mí. • Sobre enfoque de la plática. • Sobre Intel. #IntelAndroid 2
  3. 3. Repaso #IntelAndroid 3
  4. 4. Reality check: Android funciona sobre distintas arquitecturas de procesador • ARM (armeabi, armeabi-v7a) – Qualcomm, Apple, Nvidia • x86 – Intel • MIPS #IntelAndroid 4
  5. 5. Android software stack Crédito: https://thenewcircle.com/s/post/1044/remixing_android #IntelAndroid 5
  6. 6. Estrategias para crear Android apps • Clásica • Astuta • Merol #IntelAndroid 6
  7. 7. Clásica Java, Android application framework #IntelAndroid 7
  8. 8. Frameworks cross-platform jQuery Mobile, PhoneGap (Cordova), Titanium, Xamarin, Sencha, Kendo, RubyMotion (v3), etc. #IntelAndroid 8
  9. 9. NDK (Native Development Kit) Programar librerías (en C/C++) que compilas para el tipo específico de procesador. #IntelAndroid 9
  10. 10. NDK #IntelAndroid 10
  11. 11. ¿Natividad? #IntelAndroid 11
  12. 12. ¿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
  13. 13. ¿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
  14. 14. NDK: Panorama del proceso Crédito: Sebastian Mauer #IntelAndroid 14
  15. 15. 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
  16. 16. 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
  17. 17. NDK: Inconvenientes • Mayor complejidad. • Dificultad para depurar. • Las mejoras de desempeño no son garantizadas (hay overhead). #IntelAndroid 17
  18. 18. Android en X86 (#IntelAndroid) #IntelAndroid 18
  19. 19. Situación actual Intel todavía tiene poco market share pero se está preparando para cambiar esto (2015). #IntelAndroid 19
  20. 20. 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.”
  21. 21. 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
  22. 22. 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
  23. 23. 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
  24. 24. 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
  25. 25. Herramientas de Intel #IntelAndroid 25
  26. 26. Zona de desarrolladores Intel https://software.intel.com/es-es/android #IntelAndroid 26
  27. 27. 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
  28. 28. Appthwack: Testing en la nube http://appthwack.com #IntelAndroid 28
  29. 29. 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
  30. 30. 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
  31. 31. 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
  32. 32. ¡RIFA! #IntelAndroid 32
  33. 33. Gana una Asus MemoPad 7 http://sg.com.mx/rifaintelandroid #IntelAndroid 33
  34. 34. 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

×