STM32G431: Compilerunterstützung für Mathematical hardware accelerators

#6726842
Lesenswert?
• ▲
▼
noreply@noreply.com schrieb:
> unterstützt die eabi-Toolchain schon die Mathematical hardware
> accelerators für STM32G431?

Du meinst die CORDIC- und FMAC-Einheiten, korrekt?

Ich fürchte da wird eine "Compilerunterstützung" schwer. Denn die sind 
nicht Teil des CPU-Kerns, sondern das sind separate Hardwareeinheiten, 
die parallel zur CPU laufen. Der Compiler kann also keine Befehle 
erzeugen mit denen die angesteuert werden.

Du musst die stattdessen wie andere Peripherieeinheiten über Register 
ansteuern. Daher sehe ich die eher als Thema für eine spezielle 
Bibliothek als für den Compiler. Leider.
(Firma: egal) #6726978
Lesenswert?
• ▲
▼
Gast #6727149
Lesenswert?
• ▲
▼
Gerd E. schrieb:
> Ich fürchte da wird eine "Compilerunterstützung" schwer. Denn die sind
> nicht Teil des CPU-Kerns, sondern das sind separate Hardwareeinheiten,
> die parallel zur CPU laufen. Der Compiler kann also keine Befehle
> erzeugen mit denen die angesteuert werden.
> Du musst die stattdessen wie andere Peripherieeinheiten über Register
> ansteuern. Daher sehe ich die eher als Thema für eine spezielle
> Bibliothek als für den Compiler. Leider.

Ich kenne mich mit den Interna von Compilern nicht aus, aber wäre es 
nicht möglich eine Art "virtuelle Befehle" zu zu implementieren, die 
eben in eine Befehlsfolge übersetzt wird? Paralellitäten sollten so doch 
sogar effizienter vom Compiler lösbar sein, vor Allem wenn gewisse 
Registerzugriffe in beliebiger Reihenfolge stattfinden können?
#6728010
Lesenswert?
• ▲
▼
QQ schrieb:
> aber wäre es
> nicht möglich eine Art "virtuelle Befehle" zu zu implementieren, die
> eben in eine Befehlsfolge übersetzt wird?

Du bekommst das selbe Problem das Hardware-FPUs jetzt schon haben, nur 
noch in viel schlimmer: Du musst beim Aufruf anderer Funktionen den 
Zustand der Einheiten sichern und beim Rücksprung wiederherstellen.

Vor allem ist das auch nötig wenn Du in einen Interrupt springst. Die 
nötigen Befehle um das zu machen erhöhen Deine Interruptlatenz sehr 
deutlich. Schon mit Hardware-FPUs ist das ein Problem. Wenn es auf 
Interruptlatenz ankommt, ist es nicht unüblich auf die Hardware-FPU ganz 
zu verzichten, einfach nur um die FPU-Register nicht mit sichern und 
wiederherstellen zu müssen.

Das Sichern der zusätzlichen Register bedeutet dann am Ende auch eine 
neue ABI, Du kannst Programme die mit und ohne diese Option compiliert 
wurden nicht mehr miteinander mischen.

Ich denke der ganze Aufwand lohnt sich einfach nicht. Über eine 
Bibliothek kannst Du das einfacher und gezielter ansteuern, ohne gleich 
ganze Fundamente wie die ABI über den Haufen werfen zu müssen. Bei 
Grafikkarten und Rechenbeschleunigern für PCs wird das ja auch so 
gemacht, da gibt es OpenCL, CUDA etc. um die einzubinden und keinen 
neuen Compiler.

Antwort schreiben

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.

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.