I ragazzi di Distinctive Developments hanno realizzato una piccola applicazione in grado di misurare, in ambiente 3D, il numero di framerate di cui iPhone 3GS e Google Nexus One siano capaci.
L’applicazione contiene un’ambientazione tipica: scenario tridimensionale e character 3D multipli che mettono a dura prova sia GPU che CPU. Come potete osservare nel video, l’iPhone 3GS ha totalizzato una media di 60fps (frame per secondo) contro i 32fps del telefono di Google. Complicando l’ambientazione, inserendo più character, l’iPhone 3GS mantiene comunque il titolo di vincitore.
Come si spiega questo risultato? Una differenza importante tra i due dispositivi è che il Nexus One ha una risoluzione di schermo più grande rispetto al rivale (800×480 vs. 480×320). In altri termini significa che la GPU lavora circa 2,5 volte di più per ogni pixel frame rispetto all’iPhone 3GS. Abbassando la risoluzione del Nexus One, ad ogni buon conto, la media dei frame rate sale solo di 9 frame per secondo: 41fps contro 60fps a parità di risoluzione. Non ci siamo ancora.
E’ evidente che il problema non è nella gestione della GPU. Il collo di bottiglia infatti, è da ricercarsi nell’ottimizzazione del software per la CPU. L’applicazione che vediamo nel video è scritta per il 95% in C++ e compilata con NDK (Android Native Development Kit) in ambiente ARM. Se si disabilitano gli effetti calcolati dalle rispettive CPU, la media di framerate del Googlefonino aumenta di circa 20fps: 61fps come nel caso di iPhone 3GS.
Dov’è il problema? Il NDK non supporta ancora il codice Neon floating-point (istruzioni in assembly). Il modo per aggiornare il GCC (il compilatore del codice sorgente) ad una versione compatibile con le istruzioni Neon esiste, ma pare che sia necessario ricompilare l’intero firmware del dispositivo. La domanda è: cosa aspettano quelli di Google?
[Via Distinctive Developments]