Oliver schrieb:
> Könnte mir bitte ein erfahrener FPGA-Entwickler einen Tipp geben, wie
> man die Rechenleistung eines FPGAs in Zahlen fassen kann, um sie mit
> Mikrocontrollern zu vergleichen?
Erstmal geht das nur, indem eine konkrete Aufgabe gestellt wird. Und
auch dann gibt es einige Randbedingungen, die die Ergebnisse stark
kippen:
Dein Beispiel mit dem softcore ist ein sehr nachteiliges für den FPGA,
denn diese Cores sind von der Qualität (pipelining, Multi threading) den
aktuellen MCUs unterlegen und auch nicht so schnell taktbar. Zwischen
einem Soft-Core mit ALU im Durchschnitts-FPGA, der richtig Mathe rechnen
soll und einer ordentlichen PC-Intel-CPU besteht ein Verhältnis von
wenigstens 1:10. Die Rechenleistung des FPGA mit softcore ist
bestenfalls einige %te!
Und nun das gegenteilige Extrem:
Eindimensionale iterative Schleifen konstanter Länge, die in Software
komplett sequenziell gerechnet werden, können in FPGAs auf die
Rechenzeit NULL zusammenschrumpfen, wenn sie in eine Pipeline überführt
werden, die dann nur eine Latenz aufweist. Einlesen, Verrechnen und
Ausgabe der Daten machen dann nur einige us, das war es. Das ist dann
solange unabhängig von der Rechentiefe n (Iterationszahl x Kanalzahl),
solange die Bandbreite des FPGA-Kanals nicht erreicht wird.
Ab dann muss Architekturverdoppelung (mit Faktor k>n) her, die aber nur
in den Fällen funktioniert, in denen die zu prozessierenden Daten
unabhängig sind, also z.B. aus parallelen abgetasteten Kanälen stammen
oder sich aus gleichen zeitlichen unabhängigen Rechenaufgaben ergeben.
Dann kann man das soweit treiben, bis die Grenze der FPGA-Fläche
erreicht ist und hat auch dann noch die Rechentiefe NULL + Latenz. In
den anderen Fällen sinkt die effektive Bandbreite des FPGAs-Rechenkanals
virtuell auf k/n ab.
Das geht dann soweit, dass das FPGA irgendwann teilsequenziell arbeiten
muss und damit stückweise so langsam wird, wie ein Prozessor. Da die
Verarbeitungsgeschwindigkeit im FPGA auch immer ein Teiler der
Taktfrequenz ist, geht es dann mindestens mit k/2n , k/3n, k/4n nach
unten.
Zudem gibt es noch Unsicherheiten bei der Taktfrequenz: Lokal arbeiten
FPGAs mit einer maximalen Schaltfrequenz der Gatter / der Sonderlogik
abzüglich etwas Routing. Global kommen sie da aber bei Weitem nicht
dran. Da kann man auch noch einen Faktor 2 verlieren.
Bei 2D-Aufgaben / Iterationen muss zumindest eine Dimension im FPGA voll
sequenziell dargestellt werden und dann spätestens verschiebt sich das
Verhältnis immer mehr zu Gunsten des Prozessors, bzw. dessen Nachteil
wird immer geringer.
Ich hatte mal so einen Vergleich für einen Audio-DSP-App gemacht, wenn
Dir das was hilft:
http://www.96khz.org/oldpages/fpgaadvantage.htm