2010-11-18 13 views
8

I Cortex-A8-Prozessor bin mit und verstehe ich nicht, wie die -mfpu Flagge verwenden.ARM Cortex-A8: Wie Verwendung sowohl von NEON zu machen und vfpv3

Auf dem Cortex-A8 gibt es sowohl vfpv3 und Neon Coprozessoren. Zuvor war zu wissen ich nicht, wie Neon zu verwenden, so ich nur

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

Jetzt habe unter Verwendung wurde ich verstanden, wie SIMD-Prozessoren laufen, und ich habe einigen Code NEON intrinsics geschrieben. So verwenden Sie Neon-Koprozessor jetzt meine -mfpu Flag -mfpu=neon ändern muss, so dass mein Compiler-Befehlszeile wie diese nun

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

sieht, bedeutet das, dass meine vfpv3 nicht mehr verwendet wird? Ich habe viel Code, der NEON nicht nutzt, verwenden diese Teile nicht vfpv3.

Wenn sowohl Neon und vfpv3 noch verwendet werden, dann habe ich keine Probleme, aber wenn nur einer von ihnen verwendet wird, wie kann ich den Einsatz von beiden machen?

Antwort

10

NEON bedeutet, dass Sie auch die traditionelle VFP-Unterstützung haben. VFP kann für "normale" (Nicht-Vektor-) Gleitkommaberechnungen verwendet werden. Außerdem unterstützt NEON keine Double-Precision-FP, so dass nur VFP-Anweisungen dafür verwendet werden können.
Was Sie tun können, ist Hinzufügen von -S zur gcc-Befehlszeile und überprüfen Sie die Baugruppe. Anweisungen, die mit V beginnen (z. B. vld1.32, vmla.f32), sind NEON-Befehle und diejenigen, die mit F (fldd, fmacd) beginnen, sind VFP. (Obwohl ARM-Dokumente jetzt bevorzugen, das V-Präfix auch für VFP-Befehle zu verwenden, macht GCC das nicht.)

+0

Igor Ich habe nur Gleitkommawerte mit einfacher Genauigkeit. Tatsächlich sehe ich viele f-Anweisungen (Fadds, Fsitos), also denke ich, dass die vfp-Anweisungen immer noch vom Compiler ausgegeben werden. – HaggarTheHorrible

+0

Eine unabhängige Frage, wissen Sie, was ein Dual-Problem-Prozessor bedeutet? Cortex-A8 ist Dual-Issue-Prozessor was bedeutet es? Kannst du mich auf irgendwelche Links hinweisen? Meine Suche war nicht so produktiv. – HaggarTheHorrible

+0

Vikram, Coretex A8 ist ein Dual-Issue-Out-of-Order-Prozessor. Das bedeutet (verschiedentlich), dass es einiges oder alles von 1) Decodieren und Enqueue für eine Out-of-Order-Ausführung von zwei Befehlen pro Takt ausführen kann, 2) Ausführen von zwei solcher eingereihten Anweisungen pro Takt und/oder 3) Zurückziehen von zwei solchen Ergebnisse pro Uhr. Mit anderen Worten, unter besten Bedingungen kann er zwei Befehle pro Takt ausführen, die aufrechterhalten werden. Die besten Bedingungen treten nur dann auf, wenn es keine Cache-Fehler, Verzweigungsfehlvorhersagen usw. gibt. –