Autor Thema: Was genau ist ein Sprung?  (Gelesen 8557 mal)

streetrunner

  • Beiträge: 67
    • Profil anzeigen
Gespeichert
« Antwort #20 am: 25. June 2013, 21:24 »
Zitat
aber bei der Komplexität heutiger x86-Prozessoren würde ich das eher nicht wollen
Ich glaube x86 ist bei der Komplexität nicht alleine, letzten endlich dürfte jede CPU die mit Pipelines arbeitet davon betroffen sein wenn sie nicht wie z.B. MIPS oder Itanium auf SEHR VIEL Vorarbeit vom Compiler angewiesen ist.

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #21 am: 26. June 2013, 09:29 »
Hm, inwiefern ist MIPS auf viel Vorarbeit angewiesen? Das ist halt einfach eine ziemlich einfache CPU, die zwar eine Pipeline hat, aber die ist kurz genug und Out of Order gibt es nicht, so dass es übersichtlich bleibt.

Und ja, ich bezweifle nicht, dass es jede Menge anderer CPUs gibt, bei denen man das auch nicht selber machen will. ;)
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

streetrunner

  • Beiträge: 67
    • Profil anzeigen
Gespeichert
« Antwort #22 am: 26. June 2013, 10:47 »
MIPS ist deshalb sehr einfach, da der Compiler die komplizierte Arbeit macht. Das soll jetzt nicht heißen das andere Compiler nicht auch optimieren (der andauernde Gebrauch von "volatile" spricht da glaube ich Bände :-D), aber bei MIPS ist es so das man gefühlt versucht hat alles was kompliziert ist und Platz auf dem Die verbraucht in den Compiler zu verlagern. Das MIPS kein Out of Order hat stimmt dann nicht mehr so ganz, da sich dort der Compiler im vorhinein darum kümmert. Des weiteren meine ich gelesen zu haben dass bei bedingten Sprüngen der Compiler dafür Sorge zu tragen hat dass nach dem Sprung die Pipeline erst mal leer ist (NOP-Befehle).

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #23 am: 26. June 2013, 15:30 »
Der Sprung wirkt erst mit einer Instruktion Verzögerung (und zwar immer), aber das war's. In diesen Delay Slot kann man entweder ein nop reinstecken oder auch eine Instruktion, die noch ausgeführt wird.

Meines Wissens werden keine Befehle umgeordnet oder ähnliches, wo man den Überblick wirklich verlieren würde.
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

Svenska

  • Beiträge: 1 792
    • Profil anzeigen
Gespeichert
« Antwort #24 am: 26. June 2013, 15:47 »
Der Compiler darf (und wird, wenn er vernünftig optimiert) die Befehle umsortieren, und zwar unabhängig von der Architektur. Das macht die CPU aber noch lange nicht zu einer Out-Of-Order-Architektur.

Die-Space ist teuer und inzwischen nichtmal mehr vollständig nutzbar (Heat Envelope oder Dark Silicon, realisiert als z.B. Turbo Mode bei Intel), daher ist es schon sinnvoll, möglichst viel überflüssige Intelligenz aus der CPU zu entfernen. Außerdem muss so ein µOp-Scheduler in Echtzeit arbeiten, während ein "echter" Compiler vergleichsweise unendlich viel Zeit zum Optimieren und gleichzeitig deutlich mehr Kontext zur Verfügung hat.

Beide Ansätze existieren (vgl. Mali und PowerVR bei embedded-GPUs), was zeigt, dass es eigentlich keine Rolle spielt. Andere Metriken sind wichtiger (geworden) als Performance.

 

Einloggen