mikrocontroller.net

Forum: Digitale Signalverarbeitung / DSP Alignment- und Performance-Problem beim Blackfin


Autor: Joern (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin,

gerade bastel ich an einem Cornerdetector auf dem Blackfin und bin dabei 
zwei Problemen begegnet, denen ich bisher noch nicht beikommen konnte.

Fuer die Detektion verwende ich die von AD optimierte 2D-Faltung, 
kompiliert mit den GNU-Compiler. Diese verlangt nach 4 Byte aligned 
Daten und bislang ist es mir noch nicht gelungen, Arrays von short-Typen 
4 Byte zu alignen. Im Moment mache ich es ueber den Umweg von 
int-Arrays, es muss aber doch auch eine schoenere Moeglichkeit beim 
GNU-Compiler in C geben oder?

Das weitere Problem ist ein signifikanter Unterschied zwischen 
rechnerischer und tatsaechlier Performance. Rechnerisch muessten um die 
1000 Faltungen eines kompletten Bildes pro Sekunde moeglich sein. 
Praktisch komme ich aber auf etwas was mindestens um den Faktor 50 
darunter liegt. Ist das allein mit unguenstig im Speicher verteilten 
Arrays zu erklaeren oder deutet es auf etwas grundlegend falsch 
gemachtes, wie falsch initalisiertem PLL und SDRAM oder Cache hin? Und 
wenn es nur der Speicher ist, wie gelingt es mir in C mit dem GNU, die 
Felder elegant in unterschiedlichen Mikrobanks unterzubringen? Es ist 
doch hoffentlich nicht so, dass ich das aufwendig im Linkskript loesen 
muss, oder?

Danke und Gruss, Joern

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schon mal __attribute__((aligned(4))) probiert?

Autor: T. H. (pumpkin) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Machst du das auf uCLinux oder Bare Metal? Wenn Bare Metal: Da wird wohl 
ein "kleiner" Eingriff ins Linkerscript nötig sein.

  Beitrag "Re: Blackfin GCC - Standalone!"

Autor: Joern (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja, dies _attribute_ ging garnicht, da hat der Compiler immer einen 
Fehler ausgegeben. Was habe denn da falsch gemacht, denn das untere 
Beispiel scheint den selben Compiler zu verwenden? Ist eine 
stand-alone-application.

Gruss, Joern

Autor: T. H. (pumpkin) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Joern schrieb:
> ja, dies _attribute_ ging garnicht, da hat der Compiler immer einen
> Fehler ausgegeben. Was habe denn da falsch gemacht, denn das untere
> Beispiel scheint den selben Compiler zu verwenden? Ist eine
> stand-alone-application.
>
> Gruss, Joern

Welches "untere Beispiel" meinst du? Was für einen Fehler schmeißt die 
GCC? Am besten du zeigst uns mal Code.

Autor: WuschelWerner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> rechnerischer und tatsaechlier Performance

Was hast du den gerechnet ? Die tatsächliche Performance ist oft um 
einiges geringer als die Angaben im Datenblatt, die sich auf praktisch 
mögliche, aber oft nur theoretische Fälle beziehen. Da reicht ein 
zyklischer Interrupt der dir die Perfomance drückt usw.

Autor: Joern (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok, ich habe es nochmal probiert und es scheint weitestgehend zu laufen 
(zumindest das alignen).
Wie bekomme ich aber die Verteilung auf unterschiedliche Banks im SDRAM 
hin? Ich hoffte, man koennte beliebige Attribute verwenden und diese 
dann im Linkerskript definieren. Der Compiler sieht das anders:
harris.c:20: warning: 'BANK3' attribute directive ignored
harris.c:22: warning: 'BANK4' attribute directive ignored
harris.c:24: warning: 'BANK2' attribute directive ignored
harris.c:25: warning: 'BANK3' attribute directive ignored
harris.c:26: warning: 'BANK1' attribute directive ignored

Wie kann ich das Problem also loesen?

Vielen Dank schonmal, Joern

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.