Forum: Mikrocontroller und Digitale Elektronik Amdahlsches gesetz


von L. T. (tilo)


Lesenswert?

Moin,

ich hab da ne frage zum Amdahlsches gesetz das gibt ja aussage über die 
Beschleunigung eines progamm. wie seht das aus in bezug auf prozessoren 
mit integrierten Pipline

von Klaus 2. (klaus2m5)


Lesenswert?

L. Tienson schrieb:
> Moin,
>
> ich hab da ne frage zum Amdahlsches gesetz das gibt ja aussage über die
> Beschleunigung eines progamm. wie seht das aus in bezug auf prozessoren
> mit integrierten Pipline

Amdahls Gesetz bezieht sich ausschließlich auf den Zugewinn an Leistung 
durch eng gekoppelte Prozessoren (gemeinsamer Hauptspeicher).

Beim Pipelining, das alle modernen Prozessoren mehr oder weniger nutzen 
um idealerweise eine komplette Instruktion pro Takt ausführen zu können, 
ist Amdahls Gesetz nicht anwendbar.

Es treten folgende Probleme auf, die zum anhalten (Interlock) 
nachfolgender Instruktionen in der Pipeline führen:

STIS - store in instruction stream, eine nachfolgende Instruktion wird 
durch noch nicht vollständig ausgeführte Instruktionen verändert.

EG - execute generate - Die Berechnung (generate) der Operandenadresse 
einer nachfolgenden Instruktion basiert auf einer noch nicht vollständig 
ausgeführten Instruktion.

EE - execute execute - Für die Berechnung ist ein noch nicht vollständig 
berechnetes Resultat einer früheren Instruktion notwendig.

Ich erinnere mich nicht mehr an alle, aber diese Effekte sind ganz 
anders, als die durch Amdahls Gesetz berechneten Probleme bei Zugriffen 
auf den gemeinsamen Hauptspeicher und die Verluste bei der Verwaltung 
der gemeinsamen Prozessoren durch ein Betriebssystem.

von L. T. (tilo)


Lesenswert?

Danke erstmal für die ausführliche Antwort.

Und dann dazu also ich versteh das so das es nicht anwendbar ist, da wie 
du geschrieben hast in einem Prozessor angestrebt wird alles in einem 
Takt zu machen und es dann zu Fehler kommt wenn z.b bei einer Berechnung 
die Lösung einer anderen Berechnung benötigt wird die aber zur gleichen 
zeit durchgeführt wird.

von (prx) A. K. (prx)


Lesenswert?

L. Tienson schrieb:
> Und dann dazu also ich versteh das so das es nicht anwendbar ist, da wie
> du geschrieben hast in einem Prozessor angestrebt wird alles in einem
> Takt zu machen und es dann zu Fehler kommt wenn z.b bei einer Berechnung
> die Lösung einer anderen Berechnung benötigt wird die aber zur gleichen
> zeit durchgeführt wird.

Bahnhof. Versuchs bitte nochmal. Was für "Fehler"?

Amdahls "Gesetz" bezieht sich auf parallele Prozessoren. Ob die mit oder 
ohne Pipeline arbeiten ist nicht relevant. Auch Taktfrequenzen und 
Zugriffszeiten von Speichern beeinflussen die Performance ohne irgend 
etwas mit Amdahl zu tun zu haben, d.h. nicht jede Massnahme zur 
Steigerung der Performance hat etwas mit Amdahls "Gesetz" zu tun.

Allerdings gibt es einen ähnlichen Effekt beim Pipelining, ohne aber mit 
Amdahl zu tun zu haben. Die Pipeline beliebig zu vertiefen bringt 
irgendwann keinen Nutzen mehr, u.U. Nachteile.

von Klaus 2. (klaus2m5)


Lesenswert?

L. Tienson schrieb:
> Danke erstmal für die ausführliche Antwort.
>
> Und dann dazu also ich versteh das so das es nicht anwendbar ist, da wie
> du geschrieben hast in einem Prozessor angestrebt wird alles in einem
> Takt zu machen und es dann zu Fehler kommt wenn z.b bei einer Berechnung
> die Lösung einer anderen Berechnung benötigt wird die aber zur gleichen
> zeit durchgeführt wird.

A. K. schrieb:
> Bahnhof. Versuchs bitte nochmal. Was für "Fehler"?
Das kann man schon als Fehler sehen. Entweder ist der Compiler so 
klever, die Folge der Instruktionen entsprechend zu verändern, oder der 
Programmierer tut das. Das Programm lässt sich aber nicht immer 
optimieren und so kann es trotz Optimierung dazu kommen, dass 
Instruktionen in der Pipeline angehalten werden müssen.

Die ersten Prozessoren mit Pipelines konnten die Wechselwirkung zwischen 
Resultat einer Instruktion und den nachfolgenden Instruktionen nicht 
erkennen. Da musste zwingend der Programmierer/Compiler darauf achten, 
sonst funktionierte das Programm tatsächlich fehlerhaft. Einer der 
Gründe, warum es NOPs gibt.

A. K. schrieb:
> Amdahls "Gesetz" bezieht sich auf parallele Prozessoren. Ob die mit oder
> ohne Pipeline arbeiten ist nicht relevant.
So ist es.

A. K. schrieb:
> Auch Taktfrequenzen und
> Zugriffszeiten von Speichern beeinflussen die Performance ohne irgend
> etwas mit Amdahl zu tun zu haben...
...jedoch können mehrere Prozessoren gleichzeitig auf den gleichen 
Speicher zugreifen wollen (contention), oder das Schreiben eines 
Prozessors in den Speicher erfordert das Anhalten der anderen 
Prozessoren, wenn diese die gleiche Speicheradresse lesen wollen 
(serialization). Das hat dann wieder mit Amdahls Gesetz zu tun.

Noch komplizierter wird es, wenn jeder Prozessor seinen eigenen Cache 
hat. Wenn in einen Cache geschrieben wird, müssen alle anderen Caches 
diesen Speicherinhalt neu laden, falls von dem jeweiligen Prozessor 
darauf zugegiffen wird.

A. K. schrieb:
> Allerdings gibt es einen ähnlichen Effekt beim Pipelining, ohne aber mit
> Amdahl zu tun zu haben. Die Pipeline beliebig zu vertiefen bringt
> irgendwann keinen Nutzen mehr, u.U. Nachteile.
Tatsächlich wird eine dem Multiprocessing änliche Technologie 
eingesetzt, um die Probleme einer Pipeline abzumildern, das 
Multithreading.

von Davis (Gast)


Lesenswert?

A. K. schrieb:
> L. Tienson schrieb:
>> Und dann dazu also ich versteh das so das es nicht anwendbar ist, da wie
>> du geschrieben hast in einem Prozessor angestrebt wird alles in einem
>> Takt zu machen und es dann zu Fehler kommt wenn z.b bei einer Berechnung
>> die Lösung einer anderen Berechnung benötigt wird die aber zur gleichen
>> zeit durchgeführt wird.
>
> Bahnhof.

Kein Wunder! So konfus wie er schreibt - so denkt er.

von Axel S. (a-za-z0-9)


Lesenswert?

Klaus 2m5 schrieb:

> A. K. schrieb:
>> Amdahls "Gesetz" bezieht sich auf parallele Prozessoren. Ob die mit oder
>> ohne Pipeline arbeiten ist nicht relevant.
...
>> Auch Taktfrequenzen und
>> Zugriffszeiten von Speichern beeinflussen die Performance ohne irgend
>> etwas mit Amdahl zu tun zu haben...

> ...jedoch können mehrere Prozessoren gleichzeitig auf den gleichen
> Speicher zugreifen wollen (contention), oder das Schreiben eines
> Prozessors in den Speicher erfordert das Anhalten der anderen
> Prozessoren, wenn diese die gleiche Speicheradresse lesen wollen
> (serialization). Das hat dann wieder mit Amdahls Gesetz zu tun.

Nein, hat es nicht. Amdahls Gesetz kümmert sich nicht um geringesten um 
die Gründe der Serialisierung. Welcher Anteil des Programms parallel 
ausgeführt werden kann und welcher nicht, geht als Input in Amdahls 
Gesetz rein und ist damit explizit nicht (mehr) Gegenstand der 
Betrachtung. Amdahl setzt (reichlich weltfremd IMHO) auf perfekte 
Skalierbarkeit der parallelen Anteile.

Ich höre heute übrigens zu ersten Mal von diesem "Gesetz" und finde es 
reichlich trivial. Der nichttriviale Teil besteht ja gerade in der 
Abschätzung welche Programmteile parallelisierbar sind und welche nicht.

Oder - ein mehr praktischer Ansatz - wie man Algorithmus und/oder 
Implementierung so gestaltet, daß der parallele Anteil möglichst groß 
wird.


XL

von (prx) A. K. (prx)


Lesenswert?

Klaus 2m5 schrieb:
> Die ersten Prozessoren mit Pipelines konnten die Wechselwirkung zwischen
> Resultat einer Instruktion und den nachfolgenden Instruktionen nicht
> erkennen.

Rein aus Neugierde: Welche waren das?
Ab den 60ern war das jedenfalls kein Problem mehr.

von (prx) A. K. (prx)


Lesenswert?

Axel Schwenke schrieb:
> Ich höre heute übrigens zu ersten Mal von diesem "Gesetz" und finde es
> reichlich trivial.

Nur ist Parallelisierung heute selbstverständlich geworden, auch massive 
(GPU), und etwas weiter als zu Amdahls Zeiten ist man auch.

Dazu kommt die Erkenntnis, dass man bei der single thread performance 
ziemlich dicht an der Wand steht und anders als mit Parallelisierung 
nicht mehr viel weiter kommt.

von Klaus2m5 (Gast)


Lesenswert?

A. K. schrieb:
> Rein aus Neugierde: Welche waren das?
> Ab den 60ern war das jedenfalls kein Problem mehr.

War leider auch vor meiner Zeit. Wikipedia erwähnt die Existenz solcher 
Prozessoren, gibt aber keine Beispiele.

http://en.wikipedia.org/wiki/Instruction_pipeline#Hazards

Axel Schwenke schrieb:
> Amdahls Gesetz kümmert sich nicht um geringesten um
> die Gründe der Serialisierung.
Nein, dass muss es auch nicht. Trotzdem ist das ein Grund für nicht 
parallelisierbare Programmanteile und muss in die Gleichung eingehen.

Trivial? Ja, aber gilt noch heute. Aus einer Vervielfachung der 
Prozessoren kann ich eben keine lineare Vervielfachung der 
Systemleistung erreichen. Je mehr Prozessoren, desto geringer der 
Leistungsgewinn pro hinzugefügten Prozessor.

von (prx) A. K. (prx)


Lesenswert?

Klaus2m5 schrieb:
> War leider auch vor meiner Zeit. Wikipedia erwähnt die Existenz solcher
> Prozessoren, gibt aber keine Beispiele.

Das ist anders zu verstehen. Damit sind beispielsweise die Branch/Load 
Delay-Slots der MIPS Prozessoren gemeint. Die sind aber nicht drin, weil 
man keine Interlocks hätte implementieren können, sondern weil man es 
bewusst nicht gemacht hat. Das Akronym MIPS leitet sich direkt davon ab.

Wie ich schon schrieb gab es bereits lange davor Pipelines mit 
Interlocks. Auch schon gepipelinete Execution Units.

Besonders perfide war die offengelegte Pipeline von Intels 960 RISC 
Prozessor. Da landete das Ergebnis des Befehls N nicht im Zielregister 
dieses Befehls, sondern im Zielregister des Befehls N+K. 
Assemblerprogrammierung auf so einer Kiste ist Sudoku pur. Ein NOP 
eingefügt und du fängst wieder ganz von vorne an.

von (prx) A. K. (prx)


Lesenswert?

Sorry, ich meinte Intel i860, nicht i960.

von Axel S. (a-za-z0-9)


Lesenswert?

Klaus2m5 schrieb:
> Axel Schwenke schrieb:

>> Amdahls Gesetz kümmert sich nicht um geringesten um
>> die Gründe der Serialisierung.

> Trivial? Ja, aber gilt noch heute. Aus einer Vervielfachung der
> Prozessoren kann ich eben keine lineare Vervielfachung der
> Systemleistung erreichen. Je mehr Prozessoren, desto geringer der
> Leistungsgewinn pro hinzugefügten Prozessor.

Das ist aber keine Schlußfolgerung aus Amdahls Gesetz. Ganz knapp auf 
den Punkt gebracht sagt Amdahls Gesetz [1] "wenn dein Programm 
nichtparallelisierbare Anteile enthält, dann ist die Gesamtlaufzeit des 
Programms mindestens gleich der Laufzeit dieser Anteile, egal wie viele 
CPU-Kerne du darauf wirfst"

und das ist nun wirklich trivial. Etwa vergleichbar zu:

1+x >= 1 für alle x >= 0

Der einzige Weg, das nicht sofort zu sehen, ist Blindheit ;)

Was Amdahl komplett fehlt, ist eine Betrachtung derart, daß auch 
theoretisch parallelisierbare Teile praktisch Serialisierungspunkte 
haben können (explizite oder implizite Semaphore, etwa für 
Cache-Koherenz). Oder daß UMA-Architekturen nur auf wenige Knoten 
skalieren und auf NUMA-Architekturen systematisch zusätzliche Kosten für 
Inter-Node Kommunikation anfallen.

Und überhaupt ist die simple Modellierung in "parallele" und "serielle" 
Anteile höchst fragwürdig.

[1] In der Version, die ich auf der deutschen Wikipedia gefunden habe


XL

von Klaus 2. (klaus2m5)


Lesenswert?

Klaus2m5 schrieb:
> Je mehr Prozessoren, desto geringer der
> Leistungsgewinn pro hinzugefügten Prozessor.

Axel Schwenke schrieb:
> Das ist aber keine Schlußfolgerung aus Amdahls Gesetz.

Genau darum ging es aber 1967. Du musst Dir nur den Graphen ansehen. Wir 
hatten erst Mitte der 80er Jahre die erste Mehrprozessorserie, die 
Amdahl 580. Die 5870 hatte einen zweiten Prozessor, die 5880 zwei 
vollständige gekoppelte Einprozessor Systeme, die auch eigenständig 
funktionierten.

von Klaus 2. (klaus2m5)


Lesenswert?

Dass etwas mehr dahintersteckt, als die einfache Formel, kann man im 
Wikipedia Literaturverweis lesen:

http://www-inst.eecs.berkeley.edu/~n252/paper/Amdahl.pdf

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.