Your SlideShare is downloading. ×
0
Android and the
x86 Platform

Sebastian Mauer
GDG Aachen

December Meetup
December 16th, 2013
Who am I?
Sebastian Mauer

GDG Aachen Co-Lead
Software Engineer

CS Student
I don’t work for Google…yet
Part I:
x86: The new kid on the block?
Android Platforms

MIPS

ARM

x86
Android on x86 is already here
Android VM
Dalvik VM

App

App

App

App

App

App

Linux Kernel
Hardware
From Source to Bytecode
Java
Sourcecode
Java
Bytecode (.class)
Dalvik
Bytecode (.dex)

JAR Archive

Dalvik
VM

Java
VM
It just works™
•

The DalvikVM is already optimized for the x86
Platform

•

Apps relying on the Android SDK / Dalvik Byte...
Part II:
Going native. The NDK.
What’s the NDK?
•

NDK stands for Native Development Kit

•

Allows to compile C/C++ code to native (read:
platform specif...
What’s an NDK app?
It’s an Android application that uses
native libraries.
!
Libraries are .so files, usually found
inside...
NDK Anatomy
Dalvik VM

Dalvik Bytecode
Java Native
Interface
(JNI)

NDK compiled binary
Native Platform
Compile for all the platforms.
If you have the source code of your native libraries, you can compile it for several CPU
ar...
Fat Binaries
libs/armeabi

Use lib/armeabi
libraries

libs/armeabi-v7a

libs/x86

…
APK file

Use lib/armeabi-v7a
librarie...
Part III:
We must go deeper.
Porting Processor-specific code
SIMD Instructions
•

SIMD (Single instruction, multiple data)

•

NEON Instruction set on certain ARM CPUS

•

MMX™, Intel...
Easy Way Out: NEONvsSSE.h
//******* definition sample *****************
int8x8_t
vadd_s8(int8x8_t a, int8x8_t b); // VADD....
Memory Alignment
By default
struct TestStruct {
int mVar1;
long long mVar2;
int mVar3;
};

Easy fix
struct TestStruct {
in...
Part IV: Ecosystem &
Tools
HAXM (Hardware Accelerated Execution Manager)
Intel TBB (Threading Building Blocks)
Specify tasks instead of manipulating threads
▪ Intel® Threading Building Blocks (In...
Graphics Performance Analyzer
• Profiles performance and Power
• Real-time charts of CPU, GPU and
power metrics
• Conduct ...
HTML5 Development Environment
(XDK)
• Great tools for free
• Convenient, cloud-based build tool lets you target all popula...
Part V: The Future
The Future: Silvermont
New 22nm tri-gate microarchitecture

~3X more peak performance or ~5X lower power than previous Ato...
Q&A
Thanks for your attention.
Android NDK and the x86 Platform
Upcoming SlideShare
Loading in...5
×

Android NDK and the x86 Platform

1,755

Published on

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

No Downloads
Views
Total Views
1,755
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
12
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Transcript of "Android NDK and the x86 Platform"

  1. 1. Android and the x86 Platform Sebastian Mauer GDG Aachen December Meetup December 16th, 2013
  2. 2. Who am I? Sebastian Mauer GDG Aachen Co-Lead Software Engineer CS Student I don’t work for Google…yet
  3. 3. Part I: x86: The new kid on the block?
  4. 4. Android Platforms MIPS ARM x86
  5. 5. Android on x86 is already here
  6. 6. Android VM Dalvik VM App App App App App App Linux Kernel Hardware
  7. 7. From Source to Bytecode Java Sourcecode Java Bytecode (.class) Dalvik Bytecode (.dex) JAR Archive Dalvik VM Java VM
  8. 8. It just works™ • The DalvikVM is already optimized for the x86 Platform • Apps relying on the Android SDK / Dalvik Bytecode
 will automatically benefit from Platform-specific Optimizations (like SSE & Co.)
  9. 9. Part II: Going native. The NDK.
  10. 10. What’s the NDK? • NDK stands for Native Development Kit • Allows to compile C/C++ code to native (read: platform specific) executables/libraries. • Has to be compiled for every platform you want to support
  11. 11. What’s an NDK app? It’s an Android application that uses native libraries. ! Libraries are .so files, usually found inside libs/CPU_ABI/. ! These libs can be generated from native sources inside jni folder, game engines, or required by other 3rd party libraries. ! There is no 100% native application. Even an application purely written in C/C++, using native_app_glue.h, will be executed in the context of the Dalvik Virtual Machine. !
  12. 12. NDK Anatomy Dalvik VM Dalvik Bytecode Java Native Interface (JNI) NDK compiled binary Native Platform
  13. 13. Compile for all the platforms. If you have the source code of your native libraries, you can compile it for several CPU architectures by setting APP_ABI to all in the Makefile “jni/Application.mk”:! APP_ABI=all Put APP_ABI=all inside Application.mk Run ndk-build… ARM v7a libs are built ARM v5 libs are built x86 libs are built mips libs are built The NDK will generate optimized code for all target ABIs You can also pass APP_ABI variable directly to ndk-build, and specify each ABI: ndk-build APP_ABI=x86
  14. 14. Fat Binaries libs/armeabi Use lib/armeabi libraries libs/armeabi-v7a libs/x86 … APK file Use lib/armeabi-v7a libraries Use lib/x86 libraries
  15. 15. Part III: We must go deeper. Porting Processor-specific code
  16. 16. SIMD Instructions • SIMD (Single instruction, multiple data) • NEON Instruction set on certain ARM CPUS • MMX™, Intel® SSE, SSE2, SSE3, SSSE3 on Intel® Atom™ processor based platforms
  17. 17. Easy Way Out: NEONvsSSE.h //******* definition sample ***************** int8x8_t vadd_s8(int8x8_t a, int8x8_t b); // VADD.I8 d0,d0,d0 #ifdef USE_MMX #define vadd_s8 _mm_add_pi8 //MMX #else #define vadd_s8 _mm_add_epi8 #endif //… • Wraps NEON functions and intrinsics to SSE3 – 100% covered • Available at http://intel.ly/10JjuY4
  18. 18. Memory Alignment By default struct TestStruct { int mVar1; long long mVar2; int mVar3; }; Easy fix struct TestStruct { int mVar1; long long mVar2 __attribute__ ((aligned(8))); int mVar3; };
  19. 19. Part IV: Ecosystem & Tools
  20. 20. HAXM (Hardware Accelerated Execution Manager)
  21. 21. Intel TBB (Threading Building Blocks) Specify tasks instead of manipulating threads ▪ Intel® Threading Building Blocks (Intel® TBB) maps your logical tasks onto threads with full support for nested parallelism Targets threading for scalable performance ▪ Uses proven efficient parallel patterns ▪ Uses work-stealing to support the load balance of unknown execution time for tasks Open source and licensed versions available on Linux*, Windows*, Mac OS X*, Android*… Open Source version available on: threadingbuildingblocks.org Licensed version available on: software.intel.com/en-us/intel-tbb
  22. 22. Graphics Performance Analyzer • Profiles performance and Power • Real-time charts of CPU, GPU and power metrics • Conduct real-time experiments with OpenGL-ES* (with state overrides) to help narrow down problems • Triage system-level performance with CPU, GPU and Power metrics Available at intel.com/software/gpa
  23. 23. HTML5 Development Environment (XDK) • Great tools for free • Convenient, cloud-based build tool lets you target all popular platforms & app stores • Write once, run anywhere; code once, debug once, publish everywhere more on: html5dev-software.intel.com
  24. 24. Part V: The Future
  25. 25. The Future: Silvermont New 22nm tri-gate microarchitecture
 ~3X more peak performance or ~5X lower power than previous Atom microarchitecture Intel® Atom™ Processor Z3000 Series (Bay Trail) 
 Next Generation Tablets Merrifield Next Generation Smartphones
  26. 26. Q&A
  27. 27. Thanks for your attention.
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×