Wie andere bereits gesagt haben, hängt dies vollständig von der Aufgabe ab.
Um dies zu veranschaulichen, betrachten wir einen tatsächlichen Benchmark:
Dies wurde meiner Masterarbeit entnommen (derzeit nicht online verfügbar).
Dies zeigt die relative Beschleunigung 1 von String-Matching-Algorithmen (jede Farbe ist ein anderer Algorithmus). Die Algorithmen wurden auf zwei Intel Xeon X5550 Quad-Core-Prozessoren mit Hyperthreading ausgeführt. Mit anderen Worten: Es gab insgesamt 8 Kerne, von denen jeder zwei Hardware-Threads (= "Hyperthreads") ausführen kann. Daher testet der Benchmark die Beschleunigung mit bis zu 16 Threads (dh der maximalen Anzahl gleichzeitiger Threads, die diese Konfiguration ausführen kann).
Zwei der vier Algorithmen (blau und grau) werden über den gesamten Bereich mehr oder weniger linear skaliert. Das heißt, es profitiert von Hyperthreading.
Zwei andere Algorithmen (in Rot und Grün; unglückliche Wahl für Farbblinde) sind für bis zu 8 Threads linear skalierbar. Danach stagnieren sie. Dies zeigt deutlich, dass diese Algorithmen nicht von Hyperthreading profitieren.
Der Grund? In diesem speziellen Fall ist es der Arbeitsspeicher. Die ersten beiden Algorithmen benötigen mehr Speicher für die Berechnung und sind durch die Leistung des Hauptspeicherbusses eingeschränkt. Das heißt, während ein Hardware-Thread auf Speicher wartet, kann der andere die Ausführung fortsetzen. ein primärer Anwendungsfall für Hardware-Threads.
Die anderen Algorithmen benötigen weniger Speicher und müssen nicht auf den Bus warten. Sie sind fast vollständig rechnergebunden und verwenden nur ganzzahlige Arithmetik (tatsächlich Bitoperationen). Daher gibt es kein Potenzial für die parallele Ausführung und keinen Vorteil von parallelen Instruktionspipelines.
1 Ie ein Beschleunigungsfaktor von 4 bedeutet, dass der Algorithmus läuft viermal so schnell, als ob es mit nur einem Thread ausgeführt wurde. Definitionsgemäß hat jeder Algorithmus, der in einem Thread ausgeführt wird, einen relativen Beschleunigungsfaktor von 1.