Mehrere CPUs, Multithread-Leistung

Mehrere CPUs, Multithread-Leistung

Mein Programm:100 % CPU- und RAM-basiert, führtmathematische Berechnungen, liest zu Beginn die Daten von der Festplatte in den RAM.Keine Kommunikation zwischen Threads.Die Fäden nehmen alle diegleiche Zeitauch (fast).

Frage:

Wenn mein Programm so viele Threads verwendet wie CPU-Threads sind, welche Leistung kann ich dann von einem 2-CPU-System erwarten?

Angenommen, ich verwende zwei 8-Core-Xeons mit jeweils 16 Threads, also insgesamt 16 x 2 = 32 Threads. Wenn mein Programm 32 Threads verwendet, alle zu 100 % ausgelastet, erhalte ich dann die doppelte Leistung im Vergleich zu einer einzigen gleichen CPU?

Antwort1

Die beste Antwort, die Sie geben können, ist „wahrscheinlich nicht, aber es kommt darauf an“. Sie haben die doppelte reine CPU-Leistung zur Verfügung, aber:

  1. Sie verfügen nicht wirklich über die doppelte nutzbare Speicherbandbreite.

  2. Das „Pingpongen“ einiger Cache-Zeilen zwischen den CPUs wird einige Zeit dauern.

  3. Manchmal muss ein Thread auf einen anderen warten und je mehr Threads Sie haben, desto häufiger passiert das.

  4. Manchmal ist es so, dass Sie, obwohl Sie viel zu tun haben, nicht alles auf einmal erledigen können.

Und so weiter.

In sehr seltenen Fällen kann es tatsächlich zumehrmehr als die doppelte Leistung. Wenn ein Vorgang cachebegrenzt ist, kann der Thread durch mehr Kerne länger ausgeführt werden (weil der Kern nichts anderes zu tun hat, weil die anderen Kerne das tun), wodurch die CPU-Caches länger heiß bleiben.

Antwort2

Die ultimative Antwort auf Leistungsfragen lautet: Nicht raten, sondern testen!

Antwort3

Es klingt, als ob Sie an einempeinlich parallelRechenaufgabe. In diesem Fall lautet die Antwort „Ja“. Ihr Durchsatz wird nahezu linear mit der Gesamtzahl der verwendeten CPU-Threads skaliert.

verwandte Informationen