Parallel zu Programmieren gibt uns Geschwindigkeitsvorteile. Um diese zu Messen nehmen wir Laufzeiten (dabei seien die Laufzeit mit
Prozessoren und
die Laufzeit mit einem Prozessor(sequentielle Laufzeit)):
Der Speed-up bezeichnet den Faktor um den ein Programm schneller werden kann, wenn mehr Prozessoren hinzu gefügt werden.
Die Effizienz bezeichnet einen Wert, wie viel „Sinn“ jeder Prozessor hat, wenn ich ein Programm mit Prozessoren ausführe. Die Effizienz ist der Scale-up um die Anzahl Prozessoren normiert:
Amdahls Gesetz sagt aus, dass es in Programmen immer einen sequentiellen Anteil gibt (bspw. Initialisierung von Variablen, die auf allein Prozessoren oder Knoten ausgeführt werden muss, oder einmal im System und dann verteilt werden). Diesen Anteil kann man nicht parallelisieren, dh. die Laufzeit diesen Anteils bleibt gleich. Sei der sequentielle Anteil eines Programms, und somit
der parallele Anteil, mit:
Mit jedem hinzugefügten Prozessor wird somit nur der parallele Anteil des Programms schneller. Es ergibt sich für den Speed-up:
Dh. der Speed-Up ist begrenzt, die Effizienz ist, wenn immer mehr Prozessoren hinzugefügt werden gleich Null, weil der sequentielle Anteil immer gleich bleibt (dh. da nützen mehr Prozessoren nichts) und der parallele Anteil quasi in einer Zeit von Null geschafft wird.