Forum: Digitale Signalverarbeitung / DSP / Machine Learning Blackfin, Assembler, Parallelität, GCC und Optimierung


von Gast (Gast)


Lesenswert?

Hallo,

ich sitz gerade vor einem Blackfin BF537 Board und weiß gerade nicht, wo 
ich so richtig anfangen soll.

Was ich bisher gemacht hab: Das Board ist eine LeanXCam mit Micron 
Kamera-Chip. Samples, in C compiliert, laufen dort und eine eigene 
DeBayer-Funktion klappt auch, obwohl ich den Eindruck bekomme, dass der 
GCC weit weg von Optimal ist für einen DSP.

Daher meine Frage:
- Geh ich recht in der Annahme, dass der GCC keine Ahnung von 
Parallelität und guten DSP-Code für den Blackfin hat?

- Heißt das, dass man eigentlich immer in Assembler programmieren muss, 
wenn man was haben möchte, das die Architektur auch ausnutzt?

- Kann mir jemand kurz erklären, wie man das hier zu lesen hat?
 A0+=R0.L*R1.L || R0.L = W[I1++] || R1.L = W[I2--];
(Wie ist es mit der Datenabhängigkeit? Kann R1.L und R0.L geladen 
werden, während die Daten gebraucht werden, oder findet der MUL mit den 
alten Werten statt und am Ende der Ausführung hat R0.L und R1.L neue 
Werte? Kann das jemand kurz erklären, damit ich überhaupt eine 
Vorstellung davon krieg wie das funktioniert?)

- Kennt jemand eine kostengünstige Entwicklungsumgebung, deren Compiler 
selbst die Algorithmen und die Parallelitäten erkennen kann und 
verwendet, sodass man mit Hochsprache auskommt?

- Weiß jemand ein gute Buch ala "Blackfin in Assembler programmieren" 
mit Einführungsbeispielen und Erklärung zu Parallelität und Syntax?

Viele Frage, tut mir leid! Aber ein DSP ist halt was anderes als Ein 
ARM9 ...

Grüße
Gast, der sich für Antworten bedankt!

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Gast wrote:
> - Geh ich recht in der Annahme, dass der GCC keine Ahnung von
> Parallelität und guten DSP-Code für den Blackfin hat?
>
> - Heißt das, dass man eigentlich immer in Assembler programmieren muss,
> wenn man was haben möchte, das die Architektur auch ausnutzt?

Ja, aber meistens beschränkt sich das auf ein paar Funktionen 
(Vektor-/Matrixmultiplikation, FFT), und viele davon gibt es schon 
fertig in irgend welchen Bibliotheken. Bei den restlichen 95% des Codes 
bringt es nicht viel.

> - Kann mir jemand kurz erklären, wie man das hier zu lesen hat?
>  A0+=R0.L*R1.L || R0.L = W[I1++] || R1.L = W[I2--];

Erst wird die MAC-Operation ausgeführt, dann werden die Register neu 
geladen und dabei die Pointer erhöht bzw. verringert.

> - Kennt jemand eine kostengünstige Entwicklungsumgebung, deren Compiler
> selbst die Algorithmen und die Parallelitäten erkennen kann und
> verwendet, sodass man mit Hochsprache auskommt?

Ich vermute mal dass VisualDSP besser optimiert, aber im Allgemeinen ist 
es für einen Compiler schwierig guten DSP-Code zu erzeugen. In jedem 
Fall muss man sich einige Gedanken um die Struktur machen, in welche 
Speicherbereiche man die Variablen legt, wie viele Pointer man 
verwendet, usw.

> - Weiß jemand ein gute Buch ala "Blackfin in Assembler programmieren"
> mit Einführungsbeispielen und Erklärung zu Parallelität und Syntax?

Leider nicht, aber ich bin sicher dass es bei ADI genug PDFs zu dem 
Thema gibt.

von T. H. (pumpkin) Benutzerseite


Lesenswert?

Gast wrote:
> Hallo,

> ich sitz gerade vor einem Blackfin BF537 Board und weiß gerade nicht, wo
> ich so richtig anfangen soll.


http://www.analog.com/static/imported-files/processor_manuals/blackfin_pgr.ref.man.rev1.3.pdf

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.