Slide 1

Slide 1 text

Android and the x86 Platform Sebastian Mauer GDG Aachen December Meetup December 16th, 2013

Slide 2

Slide 2 text

Who am I? Sebastian Mauer GDG Aachen Co-Lead CS Student Software Engineer I don’t work for Google…yet

Slide 3

Slide 3 text

Part I: x86: The new kid on the block?

Slide 4

Slide 4 text

Android Platforms MIPS x86 ARM

Slide 5

Slide 5 text

Android on x86 is already here

Slide 6

Slide 6 text

Android VM Hardware Linux Kernel Dalvik VM App App App App App App

Slide 7

Slide 7 text

From Source to Bytecode Java Sourcecode Java Bytecode (.class) Dalvik Bytecode (.dex) JAR Archive Dalvik VM Java VM

Slide 8

Slide 8 text

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.)

Slide 9

Slide 9 text

Part II: Going native. The NDK.

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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. !

Slide 12

Slide 12 text

NDK Anatomy Native Platform Dalvik VM Dalvik Bytecode NDK compiled binary Java Native Interface (JNI)

Slide 13

Slide 13 text

No content

Slide 14

Slide 14 text

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 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 ARM v7a libs are built ARM v5 libs are built x86 libs are built mips libs are built Put APP_ABI=all inside Application.mk Run ndk-build…

Slide 15

Slide 15 text

Fat Binaries Use lib/armeabi libraries Use lib/armeabi-v7a libraries Use lib/x86 libraries libs/armeabi-v7a libs/x86 libs/armeabi APK file …

Slide 16

Slide 16 text

Part III: We must go deeper. Porting Processor-specific code

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

Memory Alignment By default Easy fix struct TestStruct { int mVar1; long long mVar2; int mVar3; }; struct TestStruct { int mVar1; long long mVar2 __attribute__ ((aligned(8))); int mVar3; };

Slide 20

Slide 20 text

Part IV: Ecosystem & Tools

Slide 21

Slide 21 text

HAXM (Hardware Accelerated Execution Manager)

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

Part V: The Future

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

Q&A

Slide 28

Slide 28 text

Thanks for your attention.