2012-07-17 2 views
8

Ho imparato un po 'sulle funzioni della CPU e sono incappato in NEON.In che modo i programmi Android utilizzano NEON SIMD?

Da quello che ho letto, sembra che NEON richieda una programmazione specifica per utilizzarlo, ma è completamente vero, oppure le cpu che hanno questa funzione trovano ancora il modo di aumentarla e velocizzare i processi multimediali per alcune applicazioni anche sebbene non ci sia un codice specifico per questo?

+0

Le estensioni del set di istruzioni devono essere targetizzate da * qualcosa * (driver/kernel/libreria C, ecc.). –

+0

Nel senso che il compilatore Android farà questo a un certo livello (dal momento che non tutte le CPU hanno la funzione.)? Sto vedendo questo come le estensioni MMX che il cpus intel aveva, credo che originariamente doveva essere preso di mira dal programmatore, quindi i compilatori presumevano che esistesse, quindi è stato antiquato .. – Tam

+1

Potrebbe esserci qualche ottimizzazione che i compilatori possono utilizzare - - ma per quelli che hanno affermato "60% -150% di numeri", ci vuole ancora la codifica manuale e la conoscenza intrinseca dell'uso. (Non che tu scriveresti un intero programma in assemblea, ma piuttosto le parti pesanti di CODEC o Trasformazioni 3d, ecc.) –

risposta

9

Esistono diversi modi per utilizzare le istruzioni NEON. Alcuni di questi sono:

  • Librarires. È una buona possibilità che la tua memcpia sia realizzata a mano usando NEON. Le librerie di riproduzione musicale/video nell'API utilizzano NEON e/o GPU per l'accelerazione. Inoltre, ci sono lib di terze parti che lo usano. FastCV di Qualcomm è un buon esempio
  • Istruzioni fornite dal compilatore. Alcuni compilatori, con le opzioni del compilatore corrette, invieranno le istruzioni NEON. La maggior parte dei compilatori userà il neon per le operazioni flottanti, ma non per vettorializzarle. Utilizzeranno l'unità come unità di dati singoli, solo perché è veloce e conveniente. Ci sono alcune funzionalità di vettorizzazione nel compilatore GCC e ARM, ma sono davvero limitate in ambito e risultati.
  • C codificato a mano con intrinseche http://gcc.gnu.org/onlinedocs/gcc/ARM-NEON-Intrinsics.html È probabilmente il modo migliore per iniziare nel mondo NEON.
  • Assemblatore codificato a mano. Questo sembra essere il migliore, se si desidera ottenere prestazioni massime. Richiede anche una buona dose di impegno e conoscenza di CS.

  • E, ultimo ma non meno importante, è possibile utilizzare NEON semplicemente scaricando alcune app che lo utilizzano. Il vostro lettore musicale preferito probabilmente mette a frutto l'unità NEON nel vostro smartphone :)

Conclusione: NEON ha un sacco di usi, ma viene utilizzato solo se il codice contiene specificamente le istruzioni NEON. Più tecnicamente, come @pst ha detto, deve essere indirizzato a da un pezzo di codice.

+0

Grazie. La tua menzione della riproduzione di musica/video significa che Android lo utilizza automaticamente (che è compilato per questo) quando usiamo il SoundPool? (Ho notato una notevole differenza nella velocità di avvio di un effetto sonoro per due telefoni, uno con e uno con neon inclusi nelle caratteristiche della CPU.) – Tam

+0

Molto probabilmente Android offre una versione ottimizzata per la sua API audio, da utilizzare con telefoni che supportano NEON, ecc. e versioni C++ semplici per quelli senza NEON. Non ho controllato il codice sorgente oi driver Android, ma questo è un modello standard. – Sam