Forum: Mikrocontroller und Digitale Elektronik Taktzyklen pro Befehl bei Cortex-M7


von Markus K. (markus-)


Lesenswert?

Ich würde gerne wissen, wie lange die einzelnen Maschinenbefehle bei 
einem ARM Cortex M7 (STM32F756) brauchen. Mir ist klar, dass die CPU 
pipelined und superskalar ist und das es deswegen wahrscheinlich keine 
einzelne Zahl pro Befehl gibt.

Bei ST war da sowieso nichts zu finden, aber auch bei ARM bin ich nicht 
fündig geworden. Jedenfalls konnte ich im "ARM Cortex-M7 Processor 
Technical Reference Manual" und im "ARMv7-M Architecture Reference 
Manual" nichts finden.

Kennt da jemand so eine Liste?

von Uwe Bonnes (Gast)


Lesenswert?

Google "cortex-m instruction cycle count" der erste Treffer...

von Markus K. (markus-)


Lesenswert?

Da die Reihenfolge der Ergebnisse bei google davon abhängt, was man 
sonst so sucht ist eine Angabe wie "erster Treffer bei google" nicht 
unbedingt zielführend.

Ich habe natürlich gegoogelt, aber nicht nach "cortex-M", sondern nach 
"Cortex-M7", weil die verschiedenen Cortex-M ja unterschiedliche 
Architekturen haben.

Beim Cortex-M4 (der auch ein ARMv7-M ist) stehen im Technical Reference 
Manual tatsächlich Taktzyklen drin, beim M7 dagegen nicht. Der M7 ist 
bei gleichem Takt aber deutlich schneller als ein M4.

von Dennis H. (c-logic) Benutzerseite


Lesenswert?

Der M7 hat allerdings auch Instruction und Data-Cache.

von (prx) A. K. (prx)


Lesenswert?

Der Core des M7 unterscheidet sich drastisch von den M3/M4. Angaben zu 
M3/M4 sind daher auf den M7 nicht anwendbar.

Etwas Information zur Pipeline findet sich in 
https://semiaccurate.com/2015/04/30/arm-goes-great-detail-m7-core/
Ansonsten scheint ARM dazu keine detaillierte Informationen 
rauszurücken, zumindest nicht öffentlich als Doku.

Allerdings ist das eher für jene Leute relevant, die Compiler darauf 
optimieren müssen oder extrem zeitkritische Programmteile in Assembler 
schreiben. Bei solchen Cores aus Angaben über Latency + Throughput von 
Befehlen und den Abhängigkeiten der Pipelinestages auf die effektiv 
erreichbare Leistung von Programmen jenseits einiger weniger Befehle zu 
schliessen ist ausgesprochen schwierig.

Für Leute, die das wirklich wissen müssen, scheint es Kurse zu geben.

von Uwe Bonnes (Gast)


Lesenswert?

Das Rechenwerk vom M3/4 und M7 ist das Gleiche. Register nach Register 
Manipulationen brauchen daher die gleiche Anzahl an Taktzyklen, naemlich 
fast immer nur einen. Wenn es aber von den Registern in die Peripherie 
und die verschiedenen RAM/ROMs geht, dann wird es komplizierter. Da hat 
der M7 Verbesserungen.

von (prx) A. K. (prx)


Lesenswert?

Uwe Bonnes schrieb:
> Das Rechenwerk vom M3/4 und M7 ist das Gleiche. Register nach Register
> Manipulationen brauchen daher die gleiche Anzahl an Taktzyklen, naemlich
> fast immer nur einen.

Selbst bei den ALU Befehlen ist es nicht ganz so einfach. Wie sieht denn 
die Laufzeit von
  ADD R0, R0, R0, #1
  ADD R0, R0, R0, #1
  ADD R0, R0, R0, #1
  ADD R0, R0, R0, #1
bei M3 und M7 aus? Beim M3 gibts 1 Takt pro Befehl, beim M7 wird vmtl. 
jeder einzelne Befehl 2 Takte benötigen. Bei
  ADD R0, R0, R0, #1
  ADD R1, R1, R1, #1
  ADD R0, R0, R0, #1
  ADD R1, R1, R1, #1
dürfte es dann 1 Takt pro Befehl sein, und bei
  ADD R0, R0, R0, #1
  ASR R1, #1
  ADD R1, R1, R1, #1
  ASR R1, #1
möglicherweise 0,5, also 2 Befehle pro Takt.

Es reicht schon beim Cortex M3 nicht aus, für die Ermittlung der 
Laufzeit bloss die Anzahl ausgeführter Befehle zusammenzuzählen. Weil 
man gelegentlich auch Speicherzugriffe drin hat. Selbst idealisiert 
nicht, d.h. ohne langsame Peripherie und Waitstates. Je tiefer eine 
Pipeline ist, desto mehr Abhängigkeiten können zwischen benachbarten 
Befehlen entstehen.

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.