Látványos sebességbeli javulást hoz a Linaro munkája az Android 4.0-ban

Címkék

A Linaro-nál dolgozó Bernhard Rosenkränzer azt mutatja be két teljesen egyforma, TI OMAP4430-alapú Pandaboard-on, hogy a Linaro által hackelt Android 4.0.4 kétszer olyan gyorsan fut, mint a stock Android 4.0.4. Rosenkränzer szerint jelentős javulás a Linaro toolchain-nek, újabb verziójú fordítónak és az optimalizációknak köszönhető. A demó végeredménye kb. 30 fps a stock Android 4.0.4-gyel, míg a Linaro-s Android build-del kb. 60 fps. A CyanogenMod fejlesztők már rá is cuppantak a témára, illetve más fejlesztők kezei közül kikerült több olyan CM9 build is, amely már a Linaro-féle optimalizációkra épít.

További részletek itt.

Hozzászólások

Rátenyerelt a "Twice as amazing" gombra a fejlesztők legnagyobb bánatára.

Most mit fognak csinálni 2-3 főverzión keresztül, mert valaki elvette a kenyerüket.
:)

Érdekes. Kíváncsi vagyok a google reakcióra, azért ott is van bőven hacker aki optimalizál.

Azt a "-fno-strict-aliasing" részt hallottátok? A gugliban is meg lehet találni, ha rákerestek. Szerintem az baromira égő, és állítólag már fél éve ki lehetett volna javítani. Csodálkoznék, ha a Google nem tette volna már meg. Nem lehet, hogy a letölthető Android nem ugyanaz, mint ami a Nexus-on fut?

Azt nem tudom mit használ a Google az Androidhoz magához, de pl az NDK még mindig gcc 4.4-nél tart, ami nyilván nem optimalizál túl jól az újabb procikra (és valószínűleg a régiekre sem :) ).
Plusz az -fstrict-aliasing valóban okozhat nagyobb eltéréseket.

Mondjuk 2x-es sebesség meglepő, én 30%-nál nem vártam volna többet ezektől, szóval vagy a gcc 4.4 volt nagyon nem optimális ezekhez a cpu-khoz, vagy vannak itt még egyéb trükkök amit nem kötöttek az orrunkra...

Szerk.:
Úgy látszik valóban nem ilyen drámai a javulás...

"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee." -- Ted Ts'o

Vannak ARM utasítások, amiket sok fordító egyáltalán nem használ (UMULL, SMULL, UMAAL). Aztán van az ARM-nak rengeteg regisztere, amit szintén nem használnak (LDMIA és STMIA utasításokkal lehet majdnem DMA sebességű memcpy-t, meg memset-et csinálni). Bizonyos esetekben ezek többszáz százalékos gyorsulást hoznak. Ha keresel pl. C-ben írt MP3 decoder-t, meg ARM assembly-ben írt MP3 decodert, akkor láthatsz erre példát magad is. Nyilván sok esetben az ilyen trükkök nem használhatóak.
Ezzel együtt én nem tartom hihetetlennek a Limaro eredményét. Még úgy sem, hogy a csávó nem ilyen, a fordító által nem ismert trükkökről beszélt, hanem kizárólag a meglévő optimalizáció használatáról. (Árnyalja a képet, hogy az egész demó egy bizonyos AM4430-as procin futott. Könnyen lehet, hogy más procira más optimalizáció kellene.)

Vajon ezeket az optimalizációkat lehet alkalmazni korábbi (2.3.4) Androidoknál is? Vagy az optimalizált verziót érdemes lehet megpróbálni feltenni gyengébb hardverű készülékre is?

Egyrészt ez elég régi, lehet a Linaro azóta kitalálta a tutit (persze nem valószínű), másrészt állították, hogy a kódba is belenyúltak. Ebből a szempontból a fentebb kétszer linkelt másik teszt perdöntőbb. (Ami szintén nem mutatott lényegi gyorsulást 1 benchmark progit leszámítva.)

"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee." -- Ted Ts'o