Alignment- und Performance-Problem beim Blackfin

Gast #1405897
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
Gast
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
Persönliche Seite
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.
Gast
> 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.
Gast
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:
1
harris.c:20: warning: 'BANK3' attribute directive ignored
2
harris.c:22: warning: 'BANK4' attribute directive ignored
3
harris.c:24: warning: 'BANK2' attribute directive ignored
4
harris.c:25: warning: 'BANK3' attribute directive ignored
5
harris.c:26: warning: 'BANK1' attribute directive ignored

Wie kann ich das Problem also loesen?

Vielen Dank schonmal, Joern

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.