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
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.
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.
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.
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.
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.
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
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.
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.
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.
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.
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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.