7. From Source to Bytecode
Java
Sourcecode
Java
Bytecode (.class)
Dalvik
Bytecode (.dex)
JAR Archive
Dalvik
VM
Java
VM
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.)
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. 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.
!
14. 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
17. 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
18. 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
19. 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;
};
22. 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
23. 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
24. 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
26. 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