2010-11-18 13 views
8

Utilizzo il processore Cortex-A8 e non capisco come utilizzare il flag -mfpu.ARM Cortex-A8: Come utilizzare sia NEON che vfpv3

Sulla Cortex-A8 ci sono entrambi vfpv3 e neon co-processori. In precedenza non ero saper utilizzare al neon così mi è stato solo usando

gcc -marm -mfloat-abi=softfp -mfpu=vfpv3

Ora ho capito come i processori SIMD correre e ho scritto certo codice utilizzando intrinseche al neon. Per utilizzare al neon coprocessore ora la mia bandiera -mfpu deve cambiare per -mfpu=neon, quindi la mia linea di comando del compilatore simile a questa

gcc -marm -mfloat-abi=softfp -mfpu=neon

Ora, questo significa che il mio vfpv3 non viene utilizzato più? Ho un sacco di codice che non sta facendo uso di NEON, quelle parti non fanno uso di vfpv3.

Se sono ancora utilizzati sia neon che vfpv3, non ho problemi, ma se viene utilizzato solo uno di essi, come posso utilizzare entrambi?

risposta

10

NEON implica anche il tradizionale supporto VFP. VFP può essere utilizzato per calcoli in virgola mobile "normali" (non vettoriali). Inoltre, NEON non supporta FP a precisione doppia, quindi solo le istruzioni VFP possono essere utilizzate per questo.
Quello che puoi fare è aggiungere -S alla riga di comando di gcc e controllare l'assembly. Le istruzioni che iniziano con V (ad esempio vld1.32, vmla.f32) sono istruzioni NEON e quelle che iniziano con F (fldd, fmacd) sono VFP. (Sebbene i documenti ARM ora preferiscano utilizzare il prefisso V anche per le istruzioni VFP, GCC non lo fa.)

+0

Igor I ha solo valori di virgola mobile a precisione singola. In effetti vedo molte istruzioni f (fads, fsitos), quindi penso che le istruzioni vfp vengano ancora emesse dal compilatore. – HaggarTheHorrible

+0

Una domanda non correlata, sai cosa significa un processore a doppia emissione? Cortex-A8 è processore dual issue cosa significa? Puoi indicarmi qualche link? La mia ricerca non è stata così produttiva. – HaggarTheHorrible

+0

Vikram, Coretex A8 è un processore fuori produzione doppio. Ciò significa (in modo diverso) che può eseguire alcuni o tutti 1) decodificare e accodare per l'esecuzione fuori ordine due istruzioni per orologio, 2) eseguire due istruzioni di questo tipo per orologio e/o 3) può ritirarne due risultati per orologio. In altre parole, nelle migliori condizioni può eseguire due istruzioni per orologio, sostenute. Le migliori condizioni si verificano solo quando non ci sono errori di cache, previsioni errate dei rami, ecc. –