Si tratta di un confronto valido tra CPU CPU e CPU desktop (Android G1 vs vecchio desktop Pentium 4)?

7

Sto provando a stimare le differenze di velocità durante la creazione del codice sul mio PC desktop che verrà portato su telefoni Android. Non ho bisogno di essere esatto, ma una buona stima mi aiuterà a impedirmi di creare codice che è spaventosamente lento su un telefono Android. Voglio supportare fino ad Android G1, quindi lo sto usando come "linea di base".

Ecco come sto attualmente eseguendo i miei calcoli usando Dhrystone MIPS usando un vecchio Pentium 4 per il confronto che sarà l'unità di test per i test rapidi. Secondo questo documento, un G1 che utilizza una CPU ARM Qualcomm MSM72xx è di circa 1 MIPS per Mhz:

link

Le ricerche sul Web hanno generato commenti degli utenti che indicano che la CPU del G1 è disponibile a circa 350 Mhz e non ai 523 Mhz mostrati nelle specifiche del chip, quindi assegnerò una valutazione MIPS di 350 MIPS per il G1, a torto oa ragione.

Questa pagina di Wikipedia mostra la versione Pentium 4 Extreme valutata a circa 9700 MIPS:

link

Questo rende il Pentium 4 circa 27 volte più veloce del G1. Dato questo moltiplicatore, se durante una delle operazioni che richiedono tempo il mio codice impiega 1 secondo sul Pentium 4, stimerei che ci vorranno 27 secondi su un G1.

La mia logica è corretta? Spero che non sia perché ciò significa che dovrò fare delle ottimizzazioni davvero dolorose al codice per rendere le cose vivibili sul G1. Se la mia logica non è corretta e c'è un algoritmo migliore per questo calcolo, faccelo sapere.

- Roschler

    
posta Robert Oschler 13.07.2011 - 04:46
fonte

2 risposte

11

Sì, il tuo desktop P4 sarà molto più veloce di un telefono cellulare.

Ero abituato a lavorare su un sistema operativo per telefoni cellulari. Questo era qualche anno fa, e stavamo usando CPU XScale e OMAP ARM, e avevamo anche un simulatore desktop che eseguiva lo stesso codice compilato per x86. Non l'ho mai misurato, ma 27x è certamente plausibile.

Ci sono un sacco di fattori coinvolti oltre alla velocità di clock della CPU, principalmente legata all'hardware. Le periferiche, la memoria, la velocità e l'architettura del bus sono biggies. Un altro è come viene costruito il silicio della CPU; Le CPU ARM sono in genere più semplici e non hanno caratteristiche di miglioramento delle prestazioni che si trovano nei chip x86 che aumentano i requisiti di potenza e le dimensioni dei chip.

In definitiva, devi fare misurazioni. E sì, questo tipo di lavoro incorporato spesso comporta "dolorose ottimizzazioni al codice per rendere le cose vivibili" per gli utenti finali. Questa è una grande ragione per cui gli sviluppatori ARM con esperienza sono molto richiesti nella Silicon Valley in questo momento - se hai già quelle capacità di ottimizzazione specializzate, molte persone ne hanno bisogno.

Aggiungerò un commento su "ottimizzazione prematura" del codice dello smartphone.

Quando stai facendo funzionare qualsiasi tipo di sistema embedded, devi scrivere il tuo codice con l'ottimizzazione nella parte posteriore della tua mente. Non è che tutto il codice che scrivi debba essere ottimizzato immediatamente, ma devi avere una buona idea di dove potresti avere problemi, e non dipingerti in un angolo dal punto di vista del design.

Generalmente si eseguono gli eseguibili incorporati su un desktop e li si trasferisce sul dispositivo, quindi il ciclo di build / test è di almeno un ordine di grandezza maggiore rispetto a un desktop, in quanto i risultati del più piccolo cambiamento di codice possono richiedere alcuni minuti. Inoltre, gli strumenti di profiling del codice sui dispositivi incorporati fanno davvero schifo se addirittura esistono.

Quindi non vuoi lasciare il tuning delle prestazioni fino all'ultimo sui dispositivi embedded. Se lo fai, e hai una scadenza, sei per un sacco di all-nighters, e forse completare il fallimento del progetto. Nei dispositivi embedded, il test delle prestazioni è analogo al test delle unità: deve passare la prima volta e devi continuare a testarlo in modo che le prestazioni non regrediscano.

    
risposta data 13.07.2011 - 05:24
fonte
5

Ci sono molte più prestazioni rispetto alla potenza di calcolo del numero di CPU, anche sugli algoritmi legati alla CPU. L'efficienza del compilatore (e dell'implementazione JVM se stai lavorando con Java, che probabilmente stai facendo su un telefono Android), la quantità di memoria disponibile e le dimensioni del bus, la dimensione delle cache del processore, ecc tutti i fattori in esso.

Se vuoi veramente sapere quanto veloce sarà il codice, prova a testarlo con il codice reale. Scrivere un algoritmo dispendioso in termini di tempo (l'ordinamento di bolle su un grande set di dati funziona bene) e compilare lo stesso codice su entrambe le piattaforme, quindi testare il tempo di esecuzione. Per un'immagine più completa, prova diversi algoritmi che eserciteranno diversi set di funzionalità.

    
risposta data 13.07.2011 - 05:09
fonte

Leggi altre domande sui tag