alberto mancini - a few benchmark on android
DESCRIPTION
Alberto Mancini - A few benchmark on Android 15 Aprile 2014 - ANdroid conference Ancona - GDG AnconaTRANSCRIPT
ANdroidA few Benchmarks
Alberto Mancini - Francesca Tosi 15 Aprile 2014
HTM
L5 D
ev
http://github.com/jooink
http://www.jooink.com
http://jooink.blogspot.com
It ju
st w
asn'
t rea
dy
Si riferiva a FB su mobile che era web based e stava facendo la prima intervista “After the company’s continuous stock price drop” (ndr)
http://mashable.com/2012/09/11/mark-zuckerberg-post-ipo-interview/
fast
book
http://www.sencha.com/blog/the-making-of-fastbook-an-html5-love-story
fastbook, Sencha’s fb demo client
"... is really promising, but it is running in the “browser”. When you make an “installable” app, you can only use WebView, which is a second-class and slower browser."
It's a technology demo that shows what developers can do with HTML5 if they take the right approach, and use the right frameworks and tools
(*)W
ebA
pps ● cached
● offline capable ● mobile-webapp-capable● Homescreen-installed● hosted app● packaged app
https://developers.google.com/chrome/apps/
https://developer.mozilla.org/en-US/Apps/Build/installable_apps
secondo alcuni sono una liberazione dai marketplace (i.e. Google Play & AppStore)
secondo alcuni tra l’altro alcune tecnologie vengono ritardate dai produttori per non perdere il potere che viene dai marketplace
GW
T/M
GW
T Java to Javascript compilerEmulated JREWidgets
Deferred BindingMultiple BrowsersCompiled Resources...
xché
una codebase e tante 'incarnazioni' dell'applicazione.
Mar
ker B
ased
AR
http://code.google.com/p/gwt-webgl/http://code.google.com/p/gwt-nyartoolkit/
http://picshare.jooink.com
c.a. 25 fps
GW
T-B
oofc
vGWT-Boofcv sample at:http://goo.gl/3IJQgs
GW
T-B
oofc
vGWT-Boofcv sample at:http://goo.gl/3IJQgs
stra
tegy
● native ?● hybrid ?● browser-based ?
Nat
ive,
ND
K capire quanto possiamo guadagnare in termini di performance basandoci su differenti tecnologie
Applicazione Android NDKche usa librerie native
Applicazione Android Javaper Dalvik
Ben
chm
arks
il medesimo algoritmo implementato con tecnologie diverse eseguito sul medesimo dispositivo
Ben
chm
ark In entrambe le applicazioni precedenti una
operazione semplice ma computazionalmente costosa è fare la conversione in grayscale delle immagini
Rul
es RGB jbyte[1024*1024*3]
Average on 1000 runs
grayjbyte[1024*1024]
1
0.299*R+0.587*G+0.114*B → Y2
3
Test
dev
ice Galaxy Tab3
Intel Atom CPU Z25602 core - 1.60 GHz Android 4.4.2Architettura i686
Com
petit
ors Benchmarks on:
Java <byte> NDK <jbyte>IPP <Ipp8u>
Com
petit
ors Benchmarks on:
Java <byte> NDK <jbyte>IPP <Ipp8u>
Intel Integrated Performance Primitives
Com
petit
ors Benchmarks on:
Java <byte> NDK <jbyte>IPP <Ipp8u>Chrome <Uint8Array>Firefox <Uint8Array>Aurora <Uint8Array>
Cod
ice
(Jav
a) Java:void compute(byte[] in, byte[] out) { for(int i=0, j=0; i< out.length; i++, j+=3) out[i] =
(byte)(0.299 * in[j] + 0.587 * in[j+1] + 0.114 * in[j+2]); }
Using FP arithmetics !!
We cannot (at least without asm.js) coherce numbers to integers in js so we chosen not to optimize here.
Det
ails
(ND
K) https://developer.android.com/tools/sdk/ndk/index.html
La documentazione non e’ il punto di forza dell’NDK
https://github.com/jooink/ndk-cpuid
● start the (intel) avd ● enter in the jni folder & execute 'ndk-build'● from the CPUIDApp root dir execute 'ant debug'● adb install -r bin/CPUIdApp-debug.apk
Cod
ice
(C, j
ni) void JNICALL … jbyteArray in, jbyteArray out) {
jsize len_out = (*env)->GetArrayLength(env, out); ... jbyte *body_out = (*env)->GetByteArrayElements(env, out, 0); for(i=0, j=0; i< len_out; i++, j+=3) body_out[i] = (jbyte)(0.299 * body_in[j] + … );
(*env)->ReleaseByteArrayElements(env, in, body_in, 0); ... }
Det
ails
(IPP
) Bundled in BeaconMountain beh … la ‘preview’
http://software.intel.com/en-us/intel-ipp
… ed avete la IPP per android x86 !!!
Scaricate la versione per linux ( la evaluation, or 199$ :( )
Installatela ( vi serve una macchina linux )
Copiate le librerie (*.a) e gli include (*.h) (32bit statici non-threaded)
Cod
ice
(IPP)
… jni ...
IppiSize srcRoi = { 1024, 1024 }; Ipp8u* pSrc = body_in; Ipp8u* pDst = body_out; ippiRGBToGray_8u_C3C1R(pSrc ,1024, pDst, 1024, srcRoi);
… jni ...
Res
ults
nat
ive
Res
ults
nat
ive
minmaxavg
Cod
ice
(js) var len_out = outb.length;
var i,j;for(i=0, j=0; i< len_out; i++, j+=3)
outb[i] = (0.299 * inb[j] + 0.587 * inb[j+1] + 0.114 *inb[j+2]);
var buffer_in = new ArrayBuffer(size*3);var buffer_out = new ArrayBuffer(size);
var inb = new Uint8Array(buffer_in);var out = new Uint8Array(buffer_out);
Res
ults
jsminmaxavg
Gra
zie Francesca Tosi
Alberto Mancini [email protected]
Github: github.com/jooink/
www.jooink.comjooink.blogspot.com
Det
ails
(HA
XM) Bundled in BeaconMountain
http://software.intel.com/en-us/android/articles/intel-hardware-accelerated-execution-manager
cambia la vita con le immagini x86
Attenzione pianta OSX, maverickinstallare lo hotfix