Moin,
ich moechte eine embedded Bildverarbeitungsanwendung entwickeln, die
eine Menge Floating Point-Operationen benoetigt. Konkret geht es um die
Bestimmung einer Homograhpie mit Hilfe eines Gradientensuchverfahrens.
Das laeuft in Matlab sehr schoen und fuehrt mit wirklich wenigen
Approximationsschritten zu vernuenftigen Ergebnissen. Allerdings bedarf
es fuer jeden Approximationsschritt der Bestimmung eines
Fehlerfunktionals und dessen Gradienten, was jeweils auf ungefaehr 6000
Floating Point-Operationen sind. Bei zwanzig Approximationsschritten
sind das 120k FLOPs.
Ist es realistisch, mindestens 40 solcher Homograhien (liefe dann auf
4,8MFLOPs hinaus) mit dem TMS320C6726B pro Sekunde zu berechnen
(immerhin ruehmt sich TI ja 2100MFLOPs mit dem zu schaffen)?
Und wie schwierig ist die Einarbeitung in diesen DSP? Bislang habe ich
nur mit dem Blackfin gearbeitet und der ist ja super dokumentiert und
hat eine grosse Bastlergemeinde. Gibt es vergleichbares fuer den
TMS320C6726B? (Wie zum Beispiel einen GNU-Compiler)
Alternativ hatte ich schon daran gedacht, das ganze auf einem FPGA zu
loesen, habe aber das Gefuehl, dass das eher unangenehmer wuerde, als
eine nette Umsetzung in C.
Danke, Joern
Das ganze erfordert erheblichen Rechenaufwand, der TI-DSP bietet da
einfach deutlich mehr Berechnungen pro Zeiteinheit. Auch bin ich mir
ueber den benoetigten Dynamikbereich nicht sicher, so dass ich im
Zweifel mit einem Floating-point Prozessor besser fuehre.
Andererseits habe ich tatsaechlich schon drueber nachgedacht, das ganze
mal Testweise auf dem Blackfin zu betreiben. Da ich aber das
Fraction-Format nicht so ganz optimal verstanden habe, habe ich mich da
noch nicht ran getraut.
Sind die Fractions im Compiler eigene Datentypen oder programmiert man
einfach weiter mit Integers und deuted die nur anders? In der
Programming-Reference waren Beispiele fuer 16bit, die definitiv nicht
fuer meine Belange ausreichen, gibt es auch einen 1.31, 2.30 Typ?
Gruss, Joern
na shon probiert, da sind Biblotheken (libs). Ich hab vor lange Zeit
damit gearbeitet aber das reicht locker für deine Anwendung der Blackfin
ist nicht schlecht shau dir mal die Benchmarks. Vergleich mal die
Anwendungen mit deinem Anwendung das sind Welten. Also meine Meinung ist
es reicht dicke.
Nein, leider bin ich noch nicht dazu gekommen, es zu testen, weil ich
die Hardware hier nicht herumliegen habe und ich im Moment noch ziemlich
mit Klausuren beschaeftigt bin.
Das Datenblatt sieht aber verdaechtig danach aus, als seien es im
Wesentlichen 16 bit Fixed points. Mein Problem damit ist, dass ich einen
Zahlenbereich bis mindestens +-640 abdecken muss mit einer
Mindestaufloesung von 1*10^-4, besser mehr. Das waere locker mit 32 bit
fixed point zu machen, nicht aber mit 16 bit. Habe ich es falsch
gelesen, oder unterstuetzt der tatsaechlich nur ein 16 bit fixed point
Format oder 32bit nur mit signifikantem Geschwindigkeitsverlust?
Es waere natuerlich ein absoluter Obertraum, wenn der Blackfin das
machen koennte, das ersparte mir die Einarbeitung in einen weiteren
Prozessor.
Gruss, Joern
Für 4.8 MFLOPS (single oder double precision?) braucht man ja noch nicht
wirklich einen DSP. Ich würde mich mal in Richtung ARM mit FPU
umschauen, z.B. BeagleBoard
(Beitrag "Neu im Shop: BeagleBoard (1200 MIPS ARM Cortex M8, TMS320C64x+ DSP)").
Und wenn doch mal etwas mehr Leistung nötig ist hat das auch einen
(fixed point) C6000-DSP an Bord.
Naja, im Zweifel ginge es darum ein neues Board aufzubauen und da wuerde
ich wahrscheinlich eher eines mit ordentlich Leistungsreserven mit nem
DSP aufbauen als einen General Purpose Prozessor wie den ARM zu
verwenden, wenngleich fuer den die grosse Unterstuetzung durch
verschiedene Tools spricht.
Da ich bereits ein Blackfin-Board aufgebaut und schon ein bisschen
Erfahrung mit dessen Programmierung gesammelt habe, bin ich jetzt eher
an einer moeglichen Loesung mit einem Blackfin interessiert.
Dazu auch gleich ein paar Fragen: Gefunden habe ich fract_math.h,
welches eine Reihe (hoffentlich optimierter) Fractional-Funktionen
bietet. Sind das 1.15 bzw. 1.31 fractions? Ist die Multiplikation zweier
1.31 fractions wieder eine 1.31 fraction, wird also das MSB verworfen?
Und wieviele Mega Fixed Point Operations schafft die Bibliothek auf
einem 400MHz Blackfin? Ich hatte zwar einen Bedarf von ungefaehr 4.5
MFLOPs angegeben, allerdings hat der Algorithmus noch einen deutlichen
Overhead fuer die Bereitstellung der Punktkorrespondenzen, aus denen die
Homographien berechnet werden sollen.
Und wie ists mit einer Linearen Algebra-Bibliothek, die auf fract_math
aufsetzt, gibt es da was optimiertes?
Gruss, Joern