SlideShare a Scribd company logo
1 of 61
Copyright© 2014, Intel Corporation. All rights reserved.
*Other brands and names are the property of their respective owners
Albertina Durante
@albertinad16
ASDC - Argentina Software Design Center
Optimización de Aplicaciones
Android* para x86 Intel Architecture
Roadmap
Android Native
Development
Múltiples Arquitecturas Java Native Interface
Migración a x86
Mejores Prácticas para
Desarrollar Código
Nativo
Tunning de
Optimización para x86
Tools
Aplicación Android
Optimizada para x86
Dispositivos Intel Atom
Smartphones 2012
ZTE Grand X In Motorola RAZR i
Megafon Mint
Orange San Diego
Lava Xolo
X900
Lenovo K800
Intel Atom Z2460
1.6GHz Hyper-Threading
Dispositivos Intel Atom
Smartphones 2013
ZTE Grand
X2 In
Lenovo K900
Intel Atom Z2580
2 GHz dual-core
Safaricom Yolo
Intel Atom Z2420
1.2 GHz
ASUS Fonepad
Note FHD-6’’
ZTE Geek 5’’
Dispositivos Intel Atom
Tablets 2013
Intel Atom Z2460
1.6 GHz dual-core
ASUS Fonepad 7
ASUS MeMO Pad FHD
10
Samsung Galaxy
Tab 3 10.1
Intel Atom Z2560
2.0 GHz dual-core
Dell Venue 7/8
Dispositivos Intel Atom
Nueva Generación
 Tri-gate microarchitecture 22nm
 Arquitectura Silvermont
 Intel Atom Processor Z3000 Series
Bay Trail Merrifield Moorefield
Tablets Smartphones
Arquitectura 64-bits
Android 64 bits support
 14 nm microarchitecture
Android Applications: APK
Aplicaciones Dalvik
 Código Java
 Recursos: xml, imágenes
 Android SDK
Aplicaciones NDK
 Código Java y Resources
 Código C/C++
 Código assembly
 Librerias dinámicas .so
Aplicación NDK (Native Development Kit)
Aplicación Android empaquetada en un APK que utiliza
librerías nativas
 Llamadas a funciones nativas de la aplicaciones
 Frameworks y librerías estaticas/dinámicas nativas
Librerías nativas se compilan en binarios “.so” en
libs/CPU_ABI
No existe una aplicación 100% nativa (C/C++ y assembly)
Utilidades: native_app_glue
Dalvik
Classes
Android
Manifest
Resources
Bundle
JNI
Native Libraries
Desarrollo de Aplicaciones NDK
Android Applications
Java Framework
JNI
Native Libraries
Bionic C Library
NDK APIs
SDK APIs
Plataforma Nativa
Dalvik
VM
Dalvik Bytecode
NDK Binario
Compilado
JNI
NDK
Toolset y build scripts que permiten implementar partes de una
aplicación en código nativo como C/C++
Compilar código C/C++ a librerías y ejecutables nativos: específicos
a la plataforma
Se debe compilar para cada plataforma que a soportar: CPU_ABI
NDK
Hardware
features
Multimedia y
Juegos
Performance
Tunning
Realidad
Aumentada
Reutilización
Uso intensivo
CPU
Procesamiento
de Gráficos
 SSSE3 para
optimización
 Tiempo mínimo de
carga de la
aplicación
¿Por qué desarrollar
con NDK?
 Real-time apps
 Procesamiento de
señales
 Simulación física
 Algoritmos complejos
 Criptografía
 Código heredado
 Acceso directo a las capacidades de
CPU, GPU y Hardware
 Animaciones fluídas
NDK
¿Por qué no utilizar código nativo?
Cuidado!
Performance
no
garantizada
Difícil
Debuging
Complejidad
Intercomunicación
entre Java y C/C++
Múltiples
plataformas
Desarrollo de Aplicaciones NDK
Codigo
C/C++
Makefile ndk-build
Llamadas
a Java
GDB
debug
A través de JNI
C/C++  Java
Java  C/C++
Librería propia y de terceros
Código Heredado
Make, GCC
Intel C/C++ Compiler
Flags de
optimización
APP_ABI:= all
APP_ABI:= armeabi armeabi-v7a x86
Java Native Interface
Framework que permite a código Java corriendo en una instancia de JVM ser
llamado y llamar a aplicaciones y librerías nativas en lenguajes como C/C++
Permite a funciones nativas manipular objetos Java: código nativo accede a las features de
Java VM a través de funciones JNI
Funciones JNI disponibles a través de interface pointers: puntero a puntero
Funciones Nativas en Java
package com.intel.applatina.lib;
public class NativeMessage {
public native String getMessage();
}
static {
System.loadLibrary("nativemessages");
}
Funciones nativas se declaran con el
keyword “native”
Cargar la librería antes de utilizar
 System.loadLibrary
 System.load(<full_path>)
Al compilar con el build script, se genera la librería dinámica compartida
“libnativemessages.so”
¿Cómo asociar código Java y código Nativo? javah y
JNI_OnLoad
Javah
 Herramienta que ayuda a generar los headers JNI a partir de una clase Java.
 Glue code que permite la interacción entre código Java y C/C++
javah -classpath bin/classes/ -d jni/ com.intel.applatina.lib.NativeMessage
JNIEXPORT jstring JNICALL
Java_com_intel_applatina_lib_NativeMessage_getMessage (JNIEnv *, jobject);
El siguiente
comando,
Genera el stub JNI con la siguiente definición para getMessage()
JNI_OnLoad
Método ejecutado cuando el ClassLoader instancia la clase java: Main entry point
 Enfoque recomendado para cargar libs nativas
 Evita errores cuando se hace refactoring de código
 Agregar y remover funcionalidad con mayor simplicidad y control
 Cachear referencias a objetos Java
 FindClass en el contexto del ClassLoader
 Crear variables y objetos, settear estado, no crear sesiones con servicios o base de
datos
Manejo de Excepciones
La ejecución de funciones Java pueden lanzar Exceptions
jthrowable javaException = (*env)->ExceptionOccurred(env);
if (javaException !=NULL)
{
(*env)->ExceptionClear(env);
// TODO: manejar la excepción
}
(*env)->DeleteLocalRef(env, javaException );
Lanzar excepcions Java
Cuando la llamada a la función nativa retorna a Java se lanza la Exception
jclass clazz = (*env)->FindClass(env, "java/lang/Exception");
if (clazz != NULL)
{
(*env)->ThrowNew(env, clazz, “Java Exception from Native");
}
NativeActivity
En conjunto con la API nativa, permite desarrollar una aplicación Android escribiendo 100%
código nativo
Librería estática native_app_glue.h para crear y administrar Activities nativas
<application android:label="@string/app_name" android:hasCode="false">
<activity android:name="android.app.NativeActivity"
android:label="@string/app_name"
android:configChanges="orientation|keyboardHidden">
<meta-data android:name="android.app.lib_name"
android:value="native-activity" />
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
Indicar que no
contiene código
Java
Definir nombre de la librería
nativa
Agregar NativeActivity
#include <android_native_app_glue.h>
/**
* This is the main entry point of a native application that is using
* android_native_app_glue. It runs in its own thread, with its own
* event loop for receiving input events and doing other things.
*/
void android_main(struct android_app* state) { … }
Distribucion de APKs: Fat Binaries
Filtrado durante el proceso de instalación
libs/armeabi-v7a
libs/x86
libs/armeabi
Android project
…
lib/armeabi
libraries
lib/armeabi-v7a
libraries
lib/x86 libraries
Recomendado
Distribucion de APKs: Multiples APK
Un APK por Aquitectura  Mecanismo de filtrado para el dispositivo: AndroidManifest.xml
android:versionCode
2 1 9 0 0 3 1 0 3 1 9 0 0 3 1 0
Samsung Galaxy S2
ARMv7
Alcatel OT-890D
ARMv5
Motorola RAZR i
Atom x86
1 1 9 0 0 3 1 0
3 1 9 0 0 3 1 0
ABI x86
Convención recomendada:
API level Screen
Size
App Version
Migración hacia Android x86
Android Apps: De ARM hacia Intel Atom
¿Cómo correr Apps en Android x86?
¿Toda aplicación es compatible?
¿Se debe migrar?
¿Es necesario optimizar?
Soporte de NDK Apps en Intel Platforms
Código dependiente de la plataforma necesita reescribirse
Recompilar para x86 mejora la performance
Android NDK provee toolchain para x86 desde 2011
Gran parte de las Apps funcionan sin recompilar
Cheet Sheet: Porting y Optimización de Android Apps para
Intel Atom x86
Aplicación
Android
Dalvik
App
- Java y
HTML5
NDK
App
NDK
ARM
- C/C++ y
código no
específico a
la plataforma
Actualizar
Target CPU
Optimizar
Compilar
Empaquetar
APK
para
x86
NDK
con
librería
s
- Funciones
específicas a
la plataforma
Open
source
Privativo
Migrar a una
librería
alternativa
Detectar
funcionalidades que
pueden ser
desarrolladas con
código nativo 
Performance
Reescribir el
código ARM a
Intel x86
Recompilar la
librería para Intel
x86
¿Librerías
no
compatibles
con x86?
ndk-build
GCC flags:
-march=atom
-msse4
-mavx
-maes
Application.mk
APP_ABI:= armeabi
armeabi-v7a x86
- C/C++ e
instrucciones
específicas a
la plataforma
Copyright© 2014, Intel Corporation. All rights reserved.
Intel Binary Translator
Ejecutar aplicaciones Android con librerías nativas para la arquitectura ARM en la
plataforma de Intel Atom con performance aceptable
Intel Binary Translator: Librería que traduce código nativo ARM a código
nativo x86 en runtime
Como correr Apps nativas en Intel Atom sin esfuerzo?
RECOMENDADO:
Re-compilar con ABI x86
para generar librería
dinámica para Intel Atom
 APP_ABI := armeabi armeabi-
v7a x86 (o “all”) en Android.mk
 ndk-build
Games Engines y Frameworks
Games Engines
Cocos2DX
LibGDX
Soporte para x86
 2D Engine Cross-platform
 Open Source
 C/C++, JavaScript, Lua
 2D/3D Engine Cross platform
 Open Source
 Basado en C++ y Java
 Box2d physics
Project Anarchy
 Engine para juegos mobile, para las
plataformas iOS, Android, Android x86 y
Tizen, que incluye Havok Vision Engine,
Physics, Animation Studio y Al
 Arquitectura C/C++ extensible basada en
plugins
 Optimización para rendering mobile
 Lua scripting
 Sistema flexible de manejo de assets
 Tools de debugging
Games Engines
Corona SDK
Unity 3D
Sin soporte para x86
 No posee soporte para x86 en la versión Free, pero las
aplicaciones funcionan en la plataforma
 Versión paga permite soporte para x86
 No poseen soporte oficial y es privativo
 Para soportar x86 y optimizar, migrar engine a otras
alternativas
Frameworks
Appcelerator
Entorno de desarrollo extensible para crear aplicaciones cross-platform con código base en
HTML5 + JavaScript
Cordova
 Plataforma para desarrollar apps cross-platform
con HTML5 + JS
 Accede a features nativas de la plataforma
 Basado en plugins: extensible
 Appcelerator Platform: enterprise platform suite: APIs, Analitics, Build, Deploy
 Titanium:
 open source framework cross-platform HTML5 + JS code base
 Módulos extensinbles: incluir librería nativa optimizada para x86
Soporte para x86
Mejores Prácticas para Desarrollar Código Nativo
Alineación de Memoria
struct TestStruct {
int var1;
long long var2;
int var3;
};
Por default
Solución de Layout de Memoria ARM  Intel Atom
 Agregar “malign-double” flag al compilador GCC
 Declarar atributo con __attribute__ ((aligned(8)))
struct TestStruct {
int var1;
long long var2 __attribute__ ((aligned(8)));
int var3;
};
Mejores Prácticas para Desarrollar Código Nativo
Porting de instrucciones ARM NEON a instrucciones Intel SSE
Intel SSE
 Streaming SIMD Extension, equivalente de Intel Architecture a ARM NEON
 SS3, SSE2, SSE3, SSSE3 (Supplemental Streaming SIMD Extension 3)
 La mayoría de las funciones de NEON tienen una equivalencia 1:1 con Intel SSE
 Implementar código SIMD
 Funciones intrinsecas C/C++ language-level: intercambiables con ARM NEON
 NEON prove librerías C nativas, deben reescribirse para ser compatibles con x86
 Intel provee un header C++ con mapping de funciones entre NEON y SSE para los
desarrolladores
 NEONtoSSE.h
Optimización para Android x86
Optimización de la Performance
Velocidad de
Ejecución
Tamaño del
Código
Consumo de
Energía
Automático por el Compilador
Asistencia por Tools de Desarrollo
Manual por el Developer
Enfoques de optmización
Vectorización
Loop-unrolling y generación avanzada de instrucciones SIMD
 Tarea manual del developer: no es escalable e implica costo de adaptación para
cada arquitectura
 Auto-vectorización realizada por el compilador
Pragmas
Assumptions Conservativas con __restrict__ es costoso en términos de
mantenimiento
Intel SIMD pragma  simplificar vectorización
APP_CFLAGS := -O3 -xSSSE3_ATOM -vec-report3
Instrucciones SIMD desactivado
en Kernel Mode: –mno-sse
Compiladores para NDK
GNU GCC
Intel C/C++ Compiler
 Cross-compiling: compatible con compilación nativa
 Switch de código compilado nativamente sin modificar
código cross compilado
 Utiliza features de la plataforma x86
 Código optimizado resulta mucho mejor
Flags de optimización: independientes de la plataforma y asociadas a la plataforma
GCC Compiler: Flags de Optimización
Opciones de compilación independientes a la plataforma
-O0, -O ó –O1, -O2, -O3
Opción m* de GCC es para la familia de procesadores Intel i386 y x86-64
Código para tipo
especifico de CPU
• -march=cpu-type
• -mtune=cpu-type
Vectorización automática
• -msse, -msse2, -
msse3, -mssse3, -
msse4.1, -msse4.2, -
msse4
• -mmmx
• -mno-sse, -mno-sse2
• -mno-mmx
Código generado para arq
32/64
• -m32-m64
Targets de Compilación
Proceso de Build de NDK:
 Se evalúa el make file Android.mk para cada arquitectura
 TARGET_ARCH_ABI: arquitectura actual
ifeq ($(TARGET_ARCH_ABI),x86)
LOCAL_CFLAGS := -mtune=atom -mssse3
endif
ifeq ($(TARGET_ARCH_ABI),armeabi-v7a)
LOCAL_CFLAGS := -march=armv7-a
Endif
TARGET_ARCH_ABI
 x86
 armeabi
 armeabi‘-v7a
 mips
Recomendación para GCC Compiler
Nivel de Optimizacion:
 -O2 o superior, -Ofast for peak
Arquitectura:
 -march=atom –mtune=atom –mssse3 para Atom
 -march=slm –mtune=slm –msse4.2 para Silvermont
-march=atom activa -mmovbe no soportado en todas las plataformas x86.
Para evitar agregar –mno-movbe.
Math:
 -ffast-math – Más rápido pero menos preciso
 -mfpmath=sse – Usar SSE para cálculos FP en lugar de i387
Mayor Performance
 -flto
 -funroll-loops
Recomendación para Intel C/C++ Compiler
Nivel de Optimizacion
 -O2, -fast for peak (implica-static)
Arquitectura
 -xATOM_SSSE3 para Atom
 -xATOM_SSE4.2 para Silvermont
Math:
 -no-prec-div – Más ráido pero menos preciso
 -mfpmath=sse – Usar SSE para cálculos FP en lugar de i387
Mayor Performance
 -O3
 -ansi-alias
 -ipo
 -auto-p32
 -parallel
Intel Confidential
Intel C++ Compiler también genera binarios
para ARM?
43
No, solamente genera binarios para x86
Testing en Múltiples Dispositivos
Testing en Múltiples Dispositivos
• Hardware del device Host
• Bundle con SDK, Intel yThird-party
• Emulación: no todas las features
soportadas
Emuladores
• Dispositivos Reales en el Cloud
• Tests corren en todos los
dispositivos
• No permite teste de Usabilidad
Cloud-based
Testing
• Tests de Usabilidad y UX
• Idealmente
• Costoso
Dispositivos
Reales
Android SDK
Intel HAXM
Third-party: Genymotion
AppThwack
Nexus, Samsung,
Motorola, LG,
Lenovo, y más
Intel® Hardware Accelerated Execution Manager
Motor de virtualizacion asistido por hardware (Hypervisor) basado en la tecnología Intel Virtualization
Technology (Intel® VT) para acelerar la emulación de apps Android en una máquina host
 Integrado a Android SDK
 Usuarios de linux descargan el zip de Intel Developer Zone
 Máquina de desarrollo con procesador Intel con soporte de
 Intel VT-x habilitado
 Intel Disable Execute Bit habilitado
 Soporta la emulacion de Dalvik y NDK apps
AppThwack
Testing de aplicaciones Android en dispositivos Intel Atom en el Cloud
Dispositivos incluídos:
 Asus MeMO Pad FHD 10
 Dell Venue 7
 Dell Venue 8
 Lenovo IdeaPhone K900
 Motorola Droid RAZR i
 Samsung Galaxy Tab 3 10
Tools de Intel para Android x86
Intel® Graphics Performance Analyzer Tool
 Análisis de performance en tiempo real a
nivel de sistema para dispositivos
basados en Android x86
 Permite al desarrollador realizar
experimentos y aislar problemas de
performance de CPU y GPU
 Métricas de CPU, GPU, API, memoria,
red, alimentación, etc
Intel® C++ Compiler for Android
 Basado en Intel® C/C++ Compiler XE 14.0 for Linux
 Compatible con GNU* C++ en Android NDK para soporte de múltiples arquitecturas
 Integrado a Android NDK como toolchain adicional
 Soporte de optimización para Intel® Atom™
 Aumento de performance sólo con recompilar
 Disponible para Windows*, OS X* y Linux*
 Soporte de command-line para Eclipse*
 79.95$
Aumento de 30% de la
performance en
aplicaciones de cómputo
de integers intensivo
Intel® Threading Building Blocks
Librería de C++ Templates para ejecutar eficientemente código paralelizable y
obtener la mejor performance en arquitecturas multicores
Intel® IPP es una librería extensiva de funciones (building blocks) optimizadas para
el procesamiento de multimedia y datos
Intel® Integrated Performance Primitives
Intel® Beacon Mountain
Framework de desarrollo de aplicaciones Android nativas para dispositivos basados
en las plataformas x86 y ARM
Intel® Integrated Native Developer Experience
Suite de desarrollo nativo cross-platform (Intel Architecture y ARM) con una
performance nativa, battery-life y acceso a las capacidades de la plataforma
 Herramientas nativas para C/C++ y Java
 Herramientas integradas a IDEs popupales
 Ejemplos para Android y Microsoft Windows
Intel® XDK
Solución Cross-platform para desarrollar aplicaciones web e híbridas una sola vez y
distribuírlas en múltiples app stores y form factors
 Crosswalk* web runtime para Android*
 Extender capacidades de apps híbridas
 Cloud-based building system
 Apps para múltiples app stores
 Publicar a múltiples app stores y a form factors
de forma sencilla y rápida
 Brackets Editor
 Apache Cordova
 AppFramework
 Apache Ripple Emulator
https://software.intel.com/en-us/html5/tools
Intel® XDK Architecture
Web Apps
Windows*, OS X*, and Linux* host OS
support
App Experience
Project Setup
SERVICESBUILDPROFILEDEBUGTESTEMULATEDEVELOP
App Framework
Optimized JS libs
App Game Interface
HTML5 Canvas Acc.
Apache Cordova*
JS/Native APIs
Intel® XDK APIs
JS/Native APIs
AppStarter
QuickUIBuilderTool
AppDesigner
PROUIBuilderTool
Brackets*Editor
Device
Emulator
App Preview
On-Device App Tester
JS Debugger
Emulator Debugger
Remote
JS Debugger
App Profiler
Performance Profiler
Mobile Apps
Web Apps
iOS* Ad Hoc
iOS* Production
Android*
Crosswalk* for Android*
Windows* 8 Store
Windows* Phone 8
Tizen*
Amazon*
Nook*
Web App
Chrome*
Facebook*
AppMobi
Cloud Services
January 2014
 Remote JS Debugger for Android*
Devices
 Remote App Profiler/Performance
Analyzer for Android* Devices
 More demo examples
 Improved App Designer UI Builder
 Crosswalk* Run-Time support
New feature added
Build your HTML5 app with a native look and feel using
App Framework UI/UX libraries
56
Build
Mobile App
Native app package ready for submission
to the Store
HTML5 Hybrid containers:
 Standard Intel XDK
 Apache Cordova
 Crosswalk for Android
 Crosswalk for Tizen
Package building process on the Cloud
57
Crosswalk
Crosswalk
Web runtime for ambitious HTML5 applications.
Extends the features of a modern browser with deep device integration
API for adding native extensions
Documentación y Links
http://software.intel.com/es-es/android
http://software.intel.com/es-es/articles/android-application-development-and-optimization-on-
the-intel-atom-platform
http://software.intel.com/en-us/blogs/2012/12/12/from-arm-neon-to-intel-mmxsse-automatic-
porting-solution-tips-and-tricks
http://software.intel.com/en-us/android/articles/ndk-android-application-porting-methodologies
Presentación Completa:
https://software.intel.com/es-es/articles/optimizaci-n-de-
aplicaciones-android-para-arquitectura-x86
Documentación y Links
eBook: Android on x86 An Introduction to Optimizing for Intel® Architecture
http://software.intel.com/en-us/blogs/2014/03/19/free-ebook-download-from-apress-android-
on-x86-an-introduction-to-optimizing-for
http://gcc.gnu.org/onlinedocs/gcc/i386-and-x86-64-Options.html
http://software.intel.com/en-us/html5/home
Procesadores Intel con soporte VT-x
http://ark.intel.com/es/Products/VirtualizationTechnology
Legal Disclaimer & Optimization Notice
INFORMATION IN THIS DOCUMENT IS PROVIDED “AS IS”. NO LICENSE, EXPRESS OR IMPLIED, BY ESTOPPEL
OR OTHERWISE, TO ANY INTELLECTUAL PROPERTY RIGHTS IS GRANTED BY THIS DOCUMENT. INTEL
ASSUMES NO LIABILITY WHATSOEVER AND INTEL DISCLAIMS ANY EXPRESS OR IMPLIED WARRANTY,
RELATING TO THIS INFORMATION INCLUDING LIABILITY OR WARRANTIES RELATING TO FITNESS FOR A
PARTICULAR PURPOSE, MERCHANTABILITY, OR INFRINGEMENT OF ANY PATENT, COPYRIGHT OR OTHER
INTELLECTUAL PROPERTY RIGHT.
Software and workloads used in performance tests may have been optimized for performance only on Intel
microprocessors. Performance tests, such as SYSmark and MobileMark, are measured using specific computer
systems, components, software, operations and functions. Any change to any of those factors may cause the results to
vary. You should consult other information and performance tests to assist you in fully evaluating your contemplated
purchases, including the performance of that product when combined with other products.
Copyright © , Intel Corporation. All rights reserved. Intel, the Intel logo, Xeon, Xeon Phi, Core, VTune, and Cilk are
trademarks of Intel Corporation in the U.S. and other countries.
Optimization Notice
Intel’s compilers may or may not optimize to the same degree for non-Intel microprocessors for optimizations that are not
unique to Intel microprocessors. These optimizations include SSE2, SSE3, and SSSE3 instruction sets and other
optimizations. Intel does not guarantee the availability, functionality, or effectiveness of any optimization on
microprocessors not manufactured by Intel. Microprocessor-dependent optimizations in this product are intended for use
with Intel microprocessors. Certain optimizations not specific to Intel microarchitecture are reserved for Intel
microprocessors. Please refer to the applicable product User and Reference Guides for more information regarding the
specific instruction sets covered by this notice.
Notice revision #20110804
Copyright© 2014, Intel Corporation. All rights reserved.
*Other brands and names are the property of their respective owners 61

More Related Content

What's hot

Docker, Containers and the Future of Application Delivery
Docker, Containers and the Future of Application DeliveryDocker, Containers and the Future of Application Delivery
Docker, Containers and the Future of Application Delivery
Docker, Inc.
 

What's hot (20)

Ansible - Introduction
Ansible - IntroductionAnsible - Introduction
Ansible - Introduction
 
CCNA by Todd Lammle ( PDFDrive ).pdf
CCNA by Todd Lammle ( PDFDrive ).pdfCCNA by Todd Lammle ( PDFDrive ).pdf
CCNA by Todd Lammle ( PDFDrive ).pdf
 
Zabbix
ZabbixZabbix
Zabbix
 
VMware vSphere Storage Appliance (VSA) - Technical Presentation,Almacenamien...
VMware vSphere Storage Appliance (VSA) -  Technical Presentation,Almacenamien...VMware vSphere Storage Appliance (VSA) -  Technical Presentation,Almacenamien...
VMware vSphere Storage Appliance (VSA) - Technical Presentation,Almacenamien...
 
VMware vSphere vMotion: 5.4 times faster than Hyper-V Live Migration
VMware vSphere vMotion: 5.4 times faster than Hyper-V Live MigrationVMware vSphere vMotion: 5.4 times faster than Hyper-V Live Migration
VMware vSphere vMotion: 5.4 times faster than Hyper-V Live Migration
 
Proxmox Talk - Linux Fest Northwest 2018
Proxmox Talk - Linux Fest Northwest 2018Proxmox Talk - Linux Fest Northwest 2018
Proxmox Talk - Linux Fest Northwest 2018
 
Virtualization Technology Overview
Virtualization Technology OverviewVirtualization Technology Overview
Virtualization Technology Overview
 
A day in the life of a VSAN I/O - STO7875
A day in the life of a VSAN I/O - STO7875A day in the life of a VSAN I/O - STO7875
A day in the life of a VSAN I/O - STO7875
 
VMware virtual SAN 6 overview
VMware virtual SAN 6 overviewVMware virtual SAN 6 overview
VMware virtual SAN 6 overview
 
vSAN Beyond The Basics
vSAN Beyond The BasicsvSAN Beyond The Basics
vSAN Beyond The Basics
 
Server virtualization by VMWare
Server virtualization by VMWareServer virtualization by VMWare
Server virtualization by VMWare
 
Docker, Containers and the Future of Application Delivery
Docker, Containers and the Future of Application DeliveryDocker, Containers and the Future of Application Delivery
Docker, Containers and the Future of Application Delivery
 
Microsoft Hyper-V explained
Microsoft Hyper-V explainedMicrosoft Hyper-V explained
Microsoft Hyper-V explained
 
CloudStack - Top 5 Technical Issues and Troubleshooting
CloudStack - Top 5 Technical Issues and TroubleshootingCloudStack - Top 5 Technical Issues and Troubleshooting
CloudStack - Top 5 Technical Issues and Troubleshooting
 
Switchdev - No More SDK
Switchdev - No More SDKSwitchdev - No More SDK
Switchdev - No More SDK
 
Docker–Grid (A On demand and Scalable dockerized selenium grid architecture)
Docker–Grid (A On demand and Scalable dockerized selenium grid architecture)Docker–Grid (A On demand and Scalable dockerized selenium grid architecture)
Docker–Grid (A On demand and Scalable dockerized selenium grid architecture)
 
Esxi troubleshooting
Esxi troubleshootingEsxi troubleshooting
Esxi troubleshooting
 
VMware Vsphere Graduation Project Presentation
VMware Vsphere Graduation Project PresentationVMware Vsphere Graduation Project Presentation
VMware Vsphere Graduation Project Presentation
 
Vagrant 101 Workshop
Vagrant 101 WorkshopVagrant 101 Workshop
Vagrant 101 Workshop
 
LINUX, WINDOWS VE AĞ SİSTEMLERİ SIZMA TESTLERİ
LINUX, WINDOWS VE AĞ SİSTEMLERİ SIZMA TESTLERİ LINUX, WINDOWS VE AĞ SİSTEMLERİ SIZMA TESTLERİ
LINUX, WINDOWS VE AĞ SİSTEMLERİ SIZMA TESTLERİ
 

Similar to Optimización de Aplicaciones Android para X86

Introducción Android NDK
Introducción Android NDKIntroducción Android NDK
Introducción Android NDK
Fe
 
Gwt seminario java_hispano_manolocarrasco
Gwt seminario java_hispano_manolocarrascoGwt seminario java_hispano_manolocarrasco
Gwt seminario java_hispano_manolocarrasco
Manuel Carrasco Moñino
 

Similar to Optimización de Aplicaciones Android para X86 (20)

Lleva tu Android App al Sigiente Nivel
Lleva tu Android App al Sigiente NivelLleva tu Android App al Sigiente Nivel
Lleva tu Android App al Sigiente Nivel
 
Introducción al Desarrollo de NDK apps | Dev Day 4 Woman | @condesa_sama
Introducción al Desarrollo de NDK apps | Dev Day 4 Woman | @condesa_samaIntroducción al Desarrollo de NDK apps | Dev Day 4 Woman | @condesa_sama
Introducción al Desarrollo de NDK apps | Dev Day 4 Woman | @condesa_sama
 
Introducción Android NDK
Introducción Android NDKIntroducción Android NDK
Introducción Android NDK
 
Introducción android ndk
Introducción android ndkIntroducción android ndk
Introducción android ndk
 
Módulo 01 Introducción a la Tecnología Java
Módulo 01 Introducción a la Tecnología JavaMódulo 01 Introducción a la Tecnología Java
Módulo 01 Introducción a la Tecnología Java
 
Plataformas Android de Intel
Plataformas Android de Intel Plataformas Android de Intel
Plataformas Android de Intel
 
Java 2010: presente, límites y futuro
Java 2010: presente, límites y futuroJava 2010: presente, límites y futuro
Java 2010: presente, límites y futuro
 
Android NDK y optimizacion para x86
Android NDK y optimizacion para x86Android NDK y optimizacion para x86
Android NDK y optimizacion para x86
 
Clase ii
Clase iiClase ii
Clase ii
 
Java janner
Java   jannerJava   janner
Java janner
 
Introducción a JAVA.
Introducción a JAVA.Introducción a JAVA.
Introducción a JAVA.
 
Unidad 2. Lenguaje orientado a objetos
Unidad 2. Lenguaje orientado a objetosUnidad 2. Lenguaje orientado a objetos
Unidad 2. Lenguaje orientado a objetos
 
Herramientas de Intel en Android Day
Herramientas de Intel en Android DayHerramientas de Intel en Android Day
Herramientas de Intel en Android Day
 
Gwt seminario java_hispano_manolocarrasco
Gwt seminario java_hispano_manolocarrascoGwt seminario java_hispano_manolocarrasco
Gwt seminario java_hispano_manolocarrasco
 
inicios en java
inicios en java inicios en java
inicios en java
 
Aprendiendo a usar NDK Android Day(castellano)
Aprendiendo a usar NDK Android Day(castellano)Aprendiendo a usar NDK Android Day(castellano)
Aprendiendo a usar NDK Android Day(castellano)
 
introducción a flutter
introducción a flutterintroducción a flutter
introducción a flutter
 
Antecedentes java
Antecedentes java Antecedentes java
Antecedentes java
 
FONTIC: Introducción al desarrollo en Android
FONTIC: Introducción al desarrollo en AndroidFONTIC: Introducción al desarrollo en Android
FONTIC: Introducción al desarrollo en Android
 
.Net Conf Sevilla 2018
.Net Conf Sevilla 2018.Net Conf Sevilla 2018
.Net Conf Sevilla 2018
 

More from Software Guru

More from Software Guru (20)

Hola Mundo del Internet de las Cosas
Hola Mundo del Internet de las CosasHola Mundo del Internet de las Cosas
Hola Mundo del Internet de las Cosas
 
Estructuras de datos avanzadas: Casos de uso reales
Estructuras de datos avanzadas: Casos de uso realesEstructuras de datos avanzadas: Casos de uso reales
Estructuras de datos avanzadas: Casos de uso reales
 
Building bias-aware environments
Building bias-aware environmentsBuilding bias-aware environments
Building bias-aware environments
 
El secreto para ser un desarrollador Senior
El secreto para ser un desarrollador SeniorEl secreto para ser un desarrollador Senior
El secreto para ser un desarrollador Senior
 
Cómo encontrar el trabajo remoto ideal
Cómo encontrar el trabajo remoto idealCómo encontrar el trabajo remoto ideal
Cómo encontrar el trabajo remoto ideal
 
Automatizando ideas con Apache Airflow
Automatizando ideas con Apache AirflowAutomatizando ideas con Apache Airflow
Automatizando ideas con Apache Airflow
 
How thick data can improve big data analysis for business:
How thick data can improve big data analysis for business:How thick data can improve big data analysis for business:
How thick data can improve big data analysis for business:
 
Introducción al machine learning
Introducción al machine learningIntroducción al machine learning
Introducción al machine learning
 
Democratizando el uso de CoDi
Democratizando el uso de CoDiDemocratizando el uso de CoDi
Democratizando el uso de CoDi
 
Gestionando la felicidad de los equipos con Management 3.0
Gestionando la felicidad de los equipos con Management 3.0Gestionando la felicidad de los equipos con Management 3.0
Gestionando la felicidad de los equipos con Management 3.0
 
Taller: Creación de Componentes Web re-usables con StencilJS
Taller: Creación de Componentes Web re-usables con StencilJSTaller: Creación de Componentes Web re-usables con StencilJS
Taller: Creación de Componentes Web re-usables con StencilJS
 
El camino del full stack developer (o como hacemos en SERTI para que no solo ...
El camino del full stack developer (o como hacemos en SERTI para que no solo ...El camino del full stack developer (o como hacemos en SERTI para que no solo ...
El camino del full stack developer (o como hacemos en SERTI para que no solo ...
 
¿Qué significa ser un programador en Bitso?
¿Qué significa ser un programador en Bitso?¿Qué significa ser un programador en Bitso?
¿Qué significa ser un programador en Bitso?
 
Colaboración efectiva entre desarrolladores del cliente y tu equipo.
Colaboración efectiva entre desarrolladores del cliente y tu equipo.Colaboración efectiva entre desarrolladores del cliente y tu equipo.
Colaboración efectiva entre desarrolladores del cliente y tu equipo.
 
Pruebas de integración con Docker en Azure DevOps
Pruebas de integración con Docker en Azure DevOpsPruebas de integración con Docker en Azure DevOps
Pruebas de integración con Docker en Azure DevOps
 
Elixir + Elm: Usando lenguajes funcionales en servicios productivos
Elixir + Elm: Usando lenguajes funcionales en servicios productivosElixir + Elm: Usando lenguajes funcionales en servicios productivos
Elixir + Elm: Usando lenguajes funcionales en servicios productivos
 
Así publicamos las apps de Spotify sin stress
Así publicamos las apps de Spotify sin stressAsí publicamos las apps de Spotify sin stress
Así publicamos las apps de Spotify sin stress
 
Achieving Your Goals: 5 Tips to successfully achieve your goals
Achieving Your Goals: 5 Tips to successfully achieve your goalsAchieving Your Goals: 5 Tips to successfully achieve your goals
Achieving Your Goals: 5 Tips to successfully achieve your goals
 
Acciones de comunidades tech en tiempos del Covid19
Acciones de comunidades tech en tiempos del Covid19Acciones de comunidades tech en tiempos del Covid19
Acciones de comunidades tech en tiempos del Covid19
 
De lo operativo a lo estratégico: un modelo de management de diseño
De lo operativo a lo estratégico: un modelo de management de diseñoDe lo operativo a lo estratégico: un modelo de management de diseño
De lo operativo a lo estratégico: un modelo de management de diseño
 

Optimización de Aplicaciones Android para X86

  • 1. Copyright© 2014, Intel Corporation. All rights reserved. *Other brands and names are the property of their respective owners Albertina Durante @albertinad16 ASDC - Argentina Software Design Center Optimización de Aplicaciones Android* para x86 Intel Architecture
  • 2. Roadmap Android Native Development Múltiples Arquitecturas Java Native Interface Migración a x86 Mejores Prácticas para Desarrollar Código Nativo Tunning de Optimización para x86 Tools Aplicación Android Optimizada para x86
  • 3. Dispositivos Intel Atom Smartphones 2012 ZTE Grand X In Motorola RAZR i Megafon Mint Orange San Diego Lava Xolo X900 Lenovo K800 Intel Atom Z2460 1.6GHz Hyper-Threading
  • 4. Dispositivos Intel Atom Smartphones 2013 ZTE Grand X2 In Lenovo K900 Intel Atom Z2580 2 GHz dual-core Safaricom Yolo Intel Atom Z2420 1.2 GHz ASUS Fonepad Note FHD-6’’ ZTE Geek 5’’
  • 5. Dispositivos Intel Atom Tablets 2013 Intel Atom Z2460 1.6 GHz dual-core ASUS Fonepad 7 ASUS MeMO Pad FHD 10 Samsung Galaxy Tab 3 10.1 Intel Atom Z2560 2.0 GHz dual-core Dell Venue 7/8
  • 6. Dispositivos Intel Atom Nueva Generación  Tri-gate microarchitecture 22nm  Arquitectura Silvermont  Intel Atom Processor Z3000 Series Bay Trail Merrifield Moorefield Tablets Smartphones Arquitectura 64-bits Android 64 bits support  14 nm microarchitecture
  • 7. Android Applications: APK Aplicaciones Dalvik  Código Java  Recursos: xml, imágenes  Android SDK Aplicaciones NDK  Código Java y Resources  Código C/C++  Código assembly  Librerias dinámicas .so
  • 8. Aplicación NDK (Native Development Kit) Aplicación Android empaquetada en un APK que utiliza librerías nativas  Llamadas a funciones nativas de la aplicaciones  Frameworks y librerías estaticas/dinámicas nativas Librerías nativas se compilan en binarios “.so” en libs/CPU_ABI No existe una aplicación 100% nativa (C/C++ y assembly) Utilidades: native_app_glue Dalvik Classes Android Manifest Resources Bundle JNI Native Libraries
  • 9. Desarrollo de Aplicaciones NDK Android Applications Java Framework JNI Native Libraries Bionic C Library NDK APIs SDK APIs Plataforma Nativa Dalvik VM Dalvik Bytecode NDK Binario Compilado JNI
  • 10. NDK Toolset y build scripts que permiten implementar partes de una aplicación en código nativo como C/C++ Compilar código C/C++ a librerías y ejecutables nativos: específicos a la plataforma Se debe compilar para cada plataforma que a soportar: CPU_ABI
  • 11. NDK Hardware features Multimedia y Juegos Performance Tunning Realidad Aumentada Reutilización Uso intensivo CPU Procesamiento de Gráficos  SSSE3 para optimización  Tiempo mínimo de carga de la aplicación ¿Por qué desarrollar con NDK?  Real-time apps  Procesamiento de señales  Simulación física  Algoritmos complejos  Criptografía  Código heredado  Acceso directo a las capacidades de CPU, GPU y Hardware  Animaciones fluídas
  • 12. NDK ¿Por qué no utilizar código nativo? Cuidado! Performance no garantizada Difícil Debuging Complejidad Intercomunicación entre Java y C/C++ Múltiples plataformas
  • 13. Desarrollo de Aplicaciones NDK Codigo C/C++ Makefile ndk-build Llamadas a Java GDB debug A través de JNI C/C++  Java Java  C/C++ Librería propia y de terceros Código Heredado Make, GCC Intel C/C++ Compiler Flags de optimización APP_ABI:= all APP_ABI:= armeabi armeabi-v7a x86
  • 14. Java Native Interface Framework que permite a código Java corriendo en una instancia de JVM ser llamado y llamar a aplicaciones y librerías nativas en lenguajes como C/C++ Permite a funciones nativas manipular objetos Java: código nativo accede a las features de Java VM a través de funciones JNI Funciones JNI disponibles a través de interface pointers: puntero a puntero
  • 15. Funciones Nativas en Java package com.intel.applatina.lib; public class NativeMessage { public native String getMessage(); } static { System.loadLibrary("nativemessages"); } Funciones nativas se declaran con el keyword “native” Cargar la librería antes de utilizar  System.loadLibrary  System.load(<full_path>) Al compilar con el build script, se genera la librería dinámica compartida “libnativemessages.so” ¿Cómo asociar código Java y código Nativo? javah y JNI_OnLoad
  • 16. Javah  Herramienta que ayuda a generar los headers JNI a partir de una clase Java.  Glue code que permite la interacción entre código Java y C/C++ javah -classpath bin/classes/ -d jni/ com.intel.applatina.lib.NativeMessage JNIEXPORT jstring JNICALL Java_com_intel_applatina_lib_NativeMessage_getMessage (JNIEnv *, jobject); El siguiente comando, Genera el stub JNI con la siguiente definición para getMessage()
  • 17. JNI_OnLoad Método ejecutado cuando el ClassLoader instancia la clase java: Main entry point  Enfoque recomendado para cargar libs nativas  Evita errores cuando se hace refactoring de código  Agregar y remover funcionalidad con mayor simplicidad y control  Cachear referencias a objetos Java  FindClass en el contexto del ClassLoader  Crear variables y objetos, settear estado, no crear sesiones con servicios o base de datos
  • 18. Manejo de Excepciones La ejecución de funciones Java pueden lanzar Exceptions jthrowable javaException = (*env)->ExceptionOccurred(env); if (javaException !=NULL) { (*env)->ExceptionClear(env); // TODO: manejar la excepción } (*env)->DeleteLocalRef(env, javaException );
  • 19. Lanzar excepcions Java Cuando la llamada a la función nativa retorna a Java se lanza la Exception jclass clazz = (*env)->FindClass(env, "java/lang/Exception"); if (clazz != NULL) { (*env)->ThrowNew(env, clazz, “Java Exception from Native"); }
  • 20. NativeActivity En conjunto con la API nativa, permite desarrollar una aplicación Android escribiendo 100% código nativo Librería estática native_app_glue.h para crear y administrar Activities nativas <application android:label="@string/app_name" android:hasCode="false"> <activity android:name="android.app.NativeActivity" android:label="@string/app_name" android:configChanges="orientation|keyboardHidden"> <meta-data android:name="android.app.lib_name" android:value="native-activity" /> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> Indicar que no contiene código Java Definir nombre de la librería nativa Agregar NativeActivity #include <android_native_app_glue.h> /** * This is the main entry point of a native application that is using * android_native_app_glue. It runs in its own thread, with its own * event loop for receiving input events and doing other things. */ void android_main(struct android_app* state) { … }
  • 21. Distribucion de APKs: Fat Binaries Filtrado durante el proceso de instalación libs/armeabi-v7a libs/x86 libs/armeabi Android project … lib/armeabi libraries lib/armeabi-v7a libraries lib/x86 libraries Recomendado
  • 22. Distribucion de APKs: Multiples APK Un APK por Aquitectura  Mecanismo de filtrado para el dispositivo: AndroidManifest.xml android:versionCode 2 1 9 0 0 3 1 0 3 1 9 0 0 3 1 0 Samsung Galaxy S2 ARMv7 Alcatel OT-890D ARMv5 Motorola RAZR i Atom x86 1 1 9 0 0 3 1 0 3 1 9 0 0 3 1 0 ABI x86 Convención recomendada: API level Screen Size App Version
  • 24. Android Apps: De ARM hacia Intel Atom ¿Cómo correr Apps en Android x86? ¿Toda aplicación es compatible? ¿Se debe migrar? ¿Es necesario optimizar?
  • 25. Soporte de NDK Apps en Intel Platforms Código dependiente de la plataforma necesita reescribirse Recompilar para x86 mejora la performance Android NDK provee toolchain para x86 desde 2011 Gran parte de las Apps funcionan sin recompilar
  • 26. Cheet Sheet: Porting y Optimización de Android Apps para Intel Atom x86 Aplicación Android Dalvik App - Java y HTML5 NDK App NDK ARM - C/C++ y código no específico a la plataforma Actualizar Target CPU Optimizar Compilar Empaquetar APK para x86 NDK con librería s - Funciones específicas a la plataforma Open source Privativo Migrar a una librería alternativa Detectar funcionalidades que pueden ser desarrolladas con código nativo  Performance Reescribir el código ARM a Intel x86 Recompilar la librería para Intel x86 ¿Librerías no compatibles con x86? ndk-build GCC flags: -march=atom -msse4 -mavx -maes Application.mk APP_ABI:= armeabi armeabi-v7a x86 - C/C++ e instrucciones específicas a la plataforma Copyright© 2014, Intel Corporation. All rights reserved.
  • 27. Intel Binary Translator Ejecutar aplicaciones Android con librerías nativas para la arquitectura ARM en la plataforma de Intel Atom con performance aceptable Intel Binary Translator: Librería que traduce código nativo ARM a código nativo x86 en runtime Como correr Apps nativas en Intel Atom sin esfuerzo? RECOMENDADO: Re-compilar con ABI x86 para generar librería dinámica para Intel Atom  APP_ABI := armeabi armeabi- v7a x86 (o “all”) en Android.mk  ndk-build
  • 28. Games Engines y Frameworks
  • 29. Games Engines Cocos2DX LibGDX Soporte para x86  2D Engine Cross-platform  Open Source  C/C++, JavaScript, Lua  2D/3D Engine Cross platform  Open Source  Basado en C++ y Java  Box2d physics
  • 30. Project Anarchy  Engine para juegos mobile, para las plataformas iOS, Android, Android x86 y Tizen, que incluye Havok Vision Engine, Physics, Animation Studio y Al  Arquitectura C/C++ extensible basada en plugins  Optimización para rendering mobile  Lua scripting  Sistema flexible de manejo de assets  Tools de debugging
  • 31. Games Engines Corona SDK Unity 3D Sin soporte para x86  No posee soporte para x86 en la versión Free, pero las aplicaciones funcionan en la plataforma  Versión paga permite soporte para x86  No poseen soporte oficial y es privativo  Para soportar x86 y optimizar, migrar engine a otras alternativas
  • 32. Frameworks Appcelerator Entorno de desarrollo extensible para crear aplicaciones cross-platform con código base en HTML5 + JavaScript Cordova  Plataforma para desarrollar apps cross-platform con HTML5 + JS  Accede a features nativas de la plataforma  Basado en plugins: extensible  Appcelerator Platform: enterprise platform suite: APIs, Analitics, Build, Deploy  Titanium:  open source framework cross-platform HTML5 + JS code base  Módulos extensinbles: incluir librería nativa optimizada para x86 Soporte para x86
  • 33. Mejores Prácticas para Desarrollar Código Nativo Alineación de Memoria struct TestStruct { int var1; long long var2; int var3; }; Por default Solución de Layout de Memoria ARM  Intel Atom  Agregar “malign-double” flag al compilador GCC  Declarar atributo con __attribute__ ((aligned(8))) struct TestStruct { int var1; long long var2 __attribute__ ((aligned(8))); int var3; };
  • 34. Mejores Prácticas para Desarrollar Código Nativo Porting de instrucciones ARM NEON a instrucciones Intel SSE Intel SSE  Streaming SIMD Extension, equivalente de Intel Architecture a ARM NEON  SS3, SSE2, SSE3, SSSE3 (Supplemental Streaming SIMD Extension 3)  La mayoría de las funciones de NEON tienen una equivalencia 1:1 con Intel SSE  Implementar código SIMD  Funciones intrinsecas C/C++ language-level: intercambiables con ARM NEON  NEON prove librerías C nativas, deben reescribirse para ser compatibles con x86  Intel provee un header C++ con mapping de funciones entre NEON y SSE para los desarrolladores  NEONtoSSE.h
  • 36. Optimización de la Performance Velocidad de Ejecución Tamaño del Código Consumo de Energía Automático por el Compilador Asistencia por Tools de Desarrollo Manual por el Developer Enfoques de optmización
  • 37. Vectorización Loop-unrolling y generación avanzada de instrucciones SIMD  Tarea manual del developer: no es escalable e implica costo de adaptación para cada arquitectura  Auto-vectorización realizada por el compilador Pragmas Assumptions Conservativas con __restrict__ es costoso en términos de mantenimiento Intel SIMD pragma  simplificar vectorización APP_CFLAGS := -O3 -xSSSE3_ATOM -vec-report3 Instrucciones SIMD desactivado en Kernel Mode: –mno-sse
  • 38. Compiladores para NDK GNU GCC Intel C/C++ Compiler  Cross-compiling: compatible con compilación nativa  Switch de código compilado nativamente sin modificar código cross compilado  Utiliza features de la plataforma x86  Código optimizado resulta mucho mejor Flags de optimización: independientes de la plataforma y asociadas a la plataforma
  • 39. GCC Compiler: Flags de Optimización Opciones de compilación independientes a la plataforma -O0, -O ó –O1, -O2, -O3 Opción m* de GCC es para la familia de procesadores Intel i386 y x86-64 Código para tipo especifico de CPU • -march=cpu-type • -mtune=cpu-type Vectorización automática • -msse, -msse2, - msse3, -mssse3, - msse4.1, -msse4.2, - msse4 • -mmmx • -mno-sse, -mno-sse2 • -mno-mmx Código generado para arq 32/64 • -m32-m64
  • 40. Targets de Compilación Proceso de Build de NDK:  Se evalúa el make file Android.mk para cada arquitectura  TARGET_ARCH_ABI: arquitectura actual ifeq ($(TARGET_ARCH_ABI),x86) LOCAL_CFLAGS := -mtune=atom -mssse3 endif ifeq ($(TARGET_ARCH_ABI),armeabi-v7a) LOCAL_CFLAGS := -march=armv7-a Endif TARGET_ARCH_ABI  x86  armeabi  armeabi‘-v7a  mips
  • 41. Recomendación para GCC Compiler Nivel de Optimizacion:  -O2 o superior, -Ofast for peak Arquitectura:  -march=atom –mtune=atom –mssse3 para Atom  -march=slm –mtune=slm –msse4.2 para Silvermont -march=atom activa -mmovbe no soportado en todas las plataformas x86. Para evitar agregar –mno-movbe. Math:  -ffast-math – Más rápido pero menos preciso  -mfpmath=sse – Usar SSE para cálculos FP en lugar de i387 Mayor Performance  -flto  -funroll-loops
  • 42. Recomendación para Intel C/C++ Compiler Nivel de Optimizacion  -O2, -fast for peak (implica-static) Arquitectura  -xATOM_SSSE3 para Atom  -xATOM_SSE4.2 para Silvermont Math:  -no-prec-div – Más ráido pero menos preciso  -mfpmath=sse – Usar SSE para cálculos FP en lugar de i387 Mayor Performance  -O3  -ansi-alias  -ipo  -auto-p32  -parallel
  • 43. Intel Confidential Intel C++ Compiler también genera binarios para ARM? 43 No, solamente genera binarios para x86
  • 44. Testing en Múltiples Dispositivos
  • 45. Testing en Múltiples Dispositivos • Hardware del device Host • Bundle con SDK, Intel yThird-party • Emulación: no todas las features soportadas Emuladores • Dispositivos Reales en el Cloud • Tests corren en todos los dispositivos • No permite teste de Usabilidad Cloud-based Testing • Tests de Usabilidad y UX • Idealmente • Costoso Dispositivos Reales Android SDK Intel HAXM Third-party: Genymotion AppThwack Nexus, Samsung, Motorola, LG, Lenovo, y más
  • 46. Intel® Hardware Accelerated Execution Manager Motor de virtualizacion asistido por hardware (Hypervisor) basado en la tecnología Intel Virtualization Technology (Intel® VT) para acelerar la emulación de apps Android en una máquina host  Integrado a Android SDK  Usuarios de linux descargan el zip de Intel Developer Zone  Máquina de desarrollo con procesador Intel con soporte de  Intel VT-x habilitado  Intel Disable Execute Bit habilitado  Soporta la emulacion de Dalvik y NDK apps
  • 47. AppThwack Testing de aplicaciones Android en dispositivos Intel Atom en el Cloud Dispositivos incluídos:  Asus MeMO Pad FHD 10  Dell Venue 7  Dell Venue 8  Lenovo IdeaPhone K900  Motorola Droid RAZR i  Samsung Galaxy Tab 3 10
  • 48. Tools de Intel para Android x86
  • 49. Intel® Graphics Performance Analyzer Tool  Análisis de performance en tiempo real a nivel de sistema para dispositivos basados en Android x86  Permite al desarrollador realizar experimentos y aislar problemas de performance de CPU y GPU  Métricas de CPU, GPU, API, memoria, red, alimentación, etc
  • 50. Intel® C++ Compiler for Android  Basado en Intel® C/C++ Compiler XE 14.0 for Linux  Compatible con GNU* C++ en Android NDK para soporte de múltiples arquitecturas  Integrado a Android NDK como toolchain adicional  Soporte de optimización para Intel® Atom™  Aumento de performance sólo con recompilar  Disponible para Windows*, OS X* y Linux*  Soporte de command-line para Eclipse*  79.95$ Aumento de 30% de la performance en aplicaciones de cómputo de integers intensivo
  • 51. Intel® Threading Building Blocks Librería de C++ Templates para ejecutar eficientemente código paralelizable y obtener la mejor performance en arquitecturas multicores Intel® IPP es una librería extensiva de funciones (building blocks) optimizadas para el procesamiento de multimedia y datos Intel® Integrated Performance Primitives
  • 52. Intel® Beacon Mountain Framework de desarrollo de aplicaciones Android nativas para dispositivos basados en las plataformas x86 y ARM Intel® Integrated Native Developer Experience Suite de desarrollo nativo cross-platform (Intel Architecture y ARM) con una performance nativa, battery-life y acceso a las capacidades de la plataforma  Herramientas nativas para C/C++ y Java  Herramientas integradas a IDEs popupales  Ejemplos para Android y Microsoft Windows
  • 53. Intel® XDK Solución Cross-platform para desarrollar aplicaciones web e híbridas una sola vez y distribuírlas en múltiples app stores y form factors  Crosswalk* web runtime para Android*  Extender capacidades de apps híbridas  Cloud-based building system  Apps para múltiples app stores  Publicar a múltiples app stores y a form factors de forma sencilla y rápida  Brackets Editor  Apache Cordova  AppFramework  Apache Ripple Emulator https://software.intel.com/en-us/html5/tools
  • 54. Intel® XDK Architecture Web Apps Windows*, OS X*, and Linux* host OS support App Experience Project Setup SERVICESBUILDPROFILEDEBUGTESTEMULATEDEVELOP App Framework Optimized JS libs App Game Interface HTML5 Canvas Acc. Apache Cordova* JS/Native APIs Intel® XDK APIs JS/Native APIs AppStarter QuickUIBuilderTool AppDesigner PROUIBuilderTool Brackets*Editor Device Emulator App Preview On-Device App Tester JS Debugger Emulator Debugger Remote JS Debugger App Profiler Performance Profiler Mobile Apps Web Apps iOS* Ad Hoc iOS* Production Android* Crosswalk* for Android* Windows* 8 Store Windows* Phone 8 Tizen* Amazon* Nook* Web App Chrome* Facebook* AppMobi Cloud Services January 2014  Remote JS Debugger for Android* Devices  Remote App Profiler/Performance Analyzer for Android* Devices  More demo examples  Improved App Designer UI Builder  Crosswalk* Run-Time support New feature added
  • 55. Build your HTML5 app with a native look and feel using App Framework UI/UX libraries
  • 56. 56 Build Mobile App Native app package ready for submission to the Store HTML5 Hybrid containers:  Standard Intel XDK  Apache Cordova  Crosswalk for Android  Crosswalk for Tizen Package building process on the Cloud
  • 57. 57 Crosswalk Crosswalk Web runtime for ambitious HTML5 applications. Extends the features of a modern browser with deep device integration API for adding native extensions
  • 59. Documentación y Links eBook: Android on x86 An Introduction to Optimizing for Intel® Architecture http://software.intel.com/en-us/blogs/2014/03/19/free-ebook-download-from-apress-android- on-x86-an-introduction-to-optimizing-for http://gcc.gnu.org/onlinedocs/gcc/i386-and-x86-64-Options.html http://software.intel.com/en-us/html5/home Procesadores Intel con soporte VT-x http://ark.intel.com/es/Products/VirtualizationTechnology
  • 60. Legal Disclaimer & Optimization Notice INFORMATION IN THIS DOCUMENT IS PROVIDED “AS IS”. NO LICENSE, EXPRESS OR IMPLIED, BY ESTOPPEL OR OTHERWISE, TO ANY INTELLECTUAL PROPERTY RIGHTS IS GRANTED BY THIS DOCUMENT. INTEL ASSUMES NO LIABILITY WHATSOEVER AND INTEL DISCLAIMS ANY EXPRESS OR IMPLIED WARRANTY, RELATING TO THIS INFORMATION INCLUDING LIABILITY OR WARRANTIES RELATING TO FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABILITY, OR INFRINGEMENT OF ANY PATENT, COPYRIGHT OR OTHER INTELLECTUAL PROPERTY RIGHT. Software and workloads used in performance tests may have been optimized for performance only on Intel microprocessors. Performance tests, such as SYSmark and MobileMark, are measured using specific computer systems, components, software, operations and functions. Any change to any of those factors may cause the results to vary. You should consult other information and performance tests to assist you in fully evaluating your contemplated purchases, including the performance of that product when combined with other products. Copyright © , Intel Corporation. All rights reserved. Intel, the Intel logo, Xeon, Xeon Phi, Core, VTune, and Cilk are trademarks of Intel Corporation in the U.S. and other countries. Optimization Notice Intel’s compilers may or may not optimize to the same degree for non-Intel microprocessors for optimizations that are not unique to Intel microprocessors. These optimizations include SSE2, SSE3, and SSSE3 instruction sets and other optimizations. Intel does not guarantee the availability, functionality, or effectiveness of any optimization on microprocessors not manufactured by Intel. Microprocessor-dependent optimizations in this product are intended for use with Intel microprocessors. Certain optimizations not specific to Intel microarchitecture are reserved for Intel microprocessors. Please refer to the applicable product User and Reference Guides for more information regarding the specific instruction sets covered by this notice. Notice revision #20110804
  • 61. Copyright© 2014, Intel Corporation. All rights reserved. *Other brands and names are the property of their respective owners 61