Forum: Compiler & IDEs STM32G431: Compilerunterstützung für Mathematical hardware accelerators


von noreply@noreply.com (Gast)


Lesenswert?

Hallo,

unterstützt die eabi-Toolchain schon die Mathematical hardware 
accelerators für STM32G431?

: Verschoben durch Admin
von Gerd E. (robberknight)


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.

von noreply@noreply.com (Gast)


Lesenswert?

Gerd E. schrieb:
> Du meinst die CORDIC- und FMAC-Einheiten, korrekt?

Ja. Danke.

Habe mir mal das Referenz Manual kurz angeschaut. Das geht, wie gesagt, 
in die Richtung spezieller Libraries.

von Irgend W. (Firma: egal) (irgendwer)


Lesenswert?


von QQ (Gast)


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?

von Gerd E. (robberknight)


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.

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.