2012-02-22 5 views
17

Mi piacerebbe capire di più la CPU utilizzata sui telefoni Android. Il motivo è che stiamo costruendo la libreria C che ha le specifiche di architettura per processori CPU/Math che possiamo impostare.Android ARMv6/v7 e VFP/NEON

  1. Finora abbiamo scoperto che le CPU tutti i dispositivi Android sono il design ARM e sono o ARMv6 (dispositivi meno recenti, bassi end, Huawei, ZTE, piccola SE) o ARMv7 (compresse a nido d'ape e tutti più dispositivi costosi, quasi tutti con risoluzione WVGA e superiore) Ho controllato ~ 20 dispositivi e tutti hanno un processore di quel tipo. È corretto? Ce ne sono altri?

  2. Ora, quando si tratta di operazioni matematiche multimediale e credo che due unità sono importanti - il VFP per aritmetica in virgola mobile e il SIMD - NEON. Dopo aver testato il gruppo di dispositivi sopra menzionato, ho trovato che il supporto VFP è presente in quasi tutti i dispositivi, mentre NEON no. Qualche commento a riguardo?

  3. Non so quale sia esattamente la differenza ARMv6 e ARMv7 (oltre alla velocità in generale). Ora stiamo costruendo una libreria C multimediale, che ha un paio di bandiere per la costruzione. La mia domanda è come indirizzare il maggior numero di dispositivi su un lato e come consentire agli utenti dei dispositivi migliori di utilizzare il proprio hardware. La mia proposta è di preparare 3 build distinte: ARMv6/VFP, ARMv7/VFP e ARMv7/VFP/NEON. Altre proposte?

  4. Il ARMv6/VFP me dovrebbe funzionare su tutte le configurazioni, ad eccezione dei dispositivi, che mancano VFP (ad esempio il vecchio HTC Wildfire) - ma quelli rimarrà supportato.

È un buon approccio? Qualsiasi commento è gradito.

saluti, Sten

risposta

12
  1. Esatto. Attualmente ci sono due tipi: ARMv6 e ARMv7. Molto probabilmente nel prossimo futuro ci sarà anche un target x86. Il NDK più recente supporta già build per esso.

  2. VFP è obbligatorio su ARMv7, ma non su ARMv6. NEON è facoltativo e non tutti i dispositivi lo supportano. Il più distinto esempio è Nvidia Tegra 2. È distribuito sulla maggior parte dei tablet e telefoni di fascia alta, ma non supporta NEON. Nvidia Tegra 3 supporta NEON.

  3. Penso che dovresti attenersi a ARMv6 con emulazione floating point, ARMv7 + VFP, ARMv7 + NEON.

  4. Esattamente - VFP non è supportato su tutti i dispositivi ARMv6. Quindi semplicemente non usarlo lì. Per impostazione predefinita, NDK crea un target armeabi destinato ai dispositivi ARMv6 e non utilizza VFP. armeabi-v7a costruisce per ARMv7 e usa VFP.

4

E 'vero che la maggior parte dei dispositivi Android rientrano in queste tre categorie:

1) ARMv6

2) ARMv7

3) ARMv7 + NEON

Il NDK non supporta pienamente questo. Non v'è alcun obiettivo accumulo ARMv6 ABI, ci sono solo due bersagli di compilazione ARM supportate dal NDK:

1) ARMv5 (che verrà eseguito su tutti i dispositivi ARM Android)

2) ARMv7 (con l'utilizzo opzionale di VFP e NEON)

Le limitazioni imposte da questo sono che se si desidera utilizzare le istruzioni ARMv6 (dal codice C o ASM), è necessario indirizzare l'ABI ARMv7 nel NDK.

7

Mi concentrerei su v7.

Quasi nessun nuovo prodotto viene spedito con la v6 e nel momento in cui la libreria è pronta per la produzione, v6 non sarà pubblicato.

ecco alcune informazioni: - Neon include sempre VFP - Coretex A8 può caratterizzare sia al neon o nessuno - La VFP su Neon di A8 è in realtà VFP-lite, che è un bel po 'più lento. Molto più lento del VFP di V6. - Coretex A9 e versioni successive possono essere Neon, VFP o nessuno. - V7 ha molte istruzioni avanzate ben adattate per operazioni matematiche oltre alla capacità di duplicazione. - I fornitori di chip possono omettere Neon e persino VFP, ma pagano lo stesso canone di licenza a ARM in modo indipendente. Avrebbero solo risparmiato molto poco sui costi di produzione. - Neon è estremamente potente in mani capaci, ma non può fare doppia precisione. - Ad eccezione di quelli con Tegra senza neon, non mi è noto nessun telefono Android basato su V7 che non sia dotato di Neon. (Il motivo è sopra) - Tegra3 ha Neon