Multicore-CPU-Energiebedarf und Lastausgleich

10

Ich interessiere mich für den Lastenausgleich für Multicore-CPU-Systeme. Wenn Sie 1 CPU mit mehreren Kernen verwenden, ist es energieeffizienter, die Last auf mehrere Kerne zu verteilen oder einzelne Kerne zu füllen und andere im Leerlauf zu lassen.
Die Grundannahme ist, dass der Arbeitsaufwand in beiden Fällen zur gleichen Zeit genau gleich ist. Ist es also effizienter, 4 Kerne in derselben CPU mit jeweils 25% Last oder 1 Kern mit 100% Last zu verwenden?
Ich würde annehmen, dass 1 Kern mit 100% Last effizienter sein sollte, aber da ich mich irren könnte, suchte ich nach ernsthaften Antworten auf dieses Problem (keine Vermutungen).

private_meta
quelle
+1 Wirklich interessante Frage! Hier sind einige Links tomshardware.com/reviews/truth-pc-power-consumption,1707.html tomshardware.com/reviews/intel-cpu-power-consumption,1750.html , die Ihre Frage jedoch nicht wirklich beantworten. Ich habe C2D T8100 und eines Tages werde ich einige Tests durchführen, um festzustellen, welche Art von Last mehr Wärme erzeugt.
AndrejaKo
4 Kerne bei 25% werden die Wärme definitiv besser verteilen als 1 Kern bei 100%.
Brian Knoblauch
Wenn der Arbeitsaufwand in den Anwendungsfällen konstant ist, führt die Anhäufung der gesamten Last auf demselben Kern zu einer geringeren Leistung - was effektiv mehr Zeit und Zeit in Anspruch nimmt. Sie können die sofortige Energieeinsparung verlieren, wenn dieselbe Arbeit längere Zeit in Anspruch nimmt. (+1, zum Nachdenken anregende Frage)
Nik
@Brian stimmte zu, dass die Verwendung von mehr Kernen die Wärme verteilt, aber erzeugt sie insgesamt die gleiche Wärmemenge?
Kevin Panko
AMD hat CPUs angekündigt, die nicht verwendete Kerne ausschalten können, damit die aktiven Kerne mit höherer Taktrate ausgeführt werden können
b0fh

Antworten:

6

IMO ist diese Frage im allgemeinen Fall einfach nicht zu beantworten.

Auf meinem Schreibtisch befindet sich eine dieser neuen Core i7-980x 6-Core TurboBoost-fähigen CPUs. Wenn Sie einen einzelnen Kern auf diesen Computer laden, wird die Taktrate dieses Kerns erhöht, wodurch der Stromverbrauch der CPU erhöht wird, was einen großen Unterschied macht. Diese CPU sowie andere, modernere CPUs können inaktive Kerne teilweise ausschalten, was die Energieeinsparung erhöht. Dies gilt nicht für ältere CPU-Modelle.

Beachten Sie, dass sich die Arbeit, die Sie mit einem Kern ausführen müssen, notwendigerweise von der Arbeit unterscheidet, die Sie mit mehreren Kernen ausführen. Wenn Sie die Last auf mehrere Kerne verteilen können , werden Sie feststellen, dass viel zusätzliche Zeit für den einzelnen Kern aufgewendet wird, um teure Kontextwechsel durchzuführen, und Ihre Leistung leidet darunter.

Auf jeden Fall hat das Problem zu viele Variablen, um sie wirklich zu beantworten. Man könnte immer weiter über die verschiedenen Arten von Ladungen sprechen, und jeder, der versucht, eine Benchmark zu erstellen, um eine Antwort zu erhalten, wird am Ende (wahrscheinlich versehentlich) Vergleiche zwischen Äpfeln und Orangen anstellen, die in anderen Anwendungsfällen nicht zutreffen.

Oh, und noch etwas. Die meisten Leute werden wahrscheinlich Effizienz in Bezug auf Leistung zitieren . Du willst nicht in diese Falle tappen. Da die Zeit für die Verarbeitung der Lasten je nach Lastausgleich zwangsläufig unterschiedlich ist, müssen Sie das Ergebnis im Laufe der Zeit integrieren, um die Nettomenge an Energie zu ermitteln, die zur Ausführung der Aufträge verwendet wird, um ein glaubwürdiges Ergebnis zu erzielen.

David Markle
quelle
LOL Wie kannst du das sagen? Hokie Engineering, Baby!
David Markle
Nimmt einen, um einen zu kennen. Gehen Sie Mizzou
hotei
Oh, Moment mal. Ich lag falsch. Es gibt einen Mann, der einige Benchmarks durchführen und uns im allgemeinen Fall eine Antwort geben könnte: gizmodo.com/5598885/…
David Markle
4

Ich habe heute einige Tests mit diesem Computer (Intel C2D T8100) und mit optimierten SETI @ Home-Anwendungen von lunatics installer 0.36 durchgeführt. Ich habe M $ Joulmeter verwendet , um den Stromverbrauch zu berechnen. Ich habe die Verbrauchsbaumzeiten gemessen. Zuerst lasse ich BOINC 100% Kerne und 100% CPU-Zeit in Anspruch nehmen und lasse es eine Stunde lang laufen. Der Prozessor verbrauchte 20 W und die CPU-Zeitdiagramme des Task-Managers waren zu 100% flach. Der durchschnittliche Stromverbrauch meines Computers betrug 45,05 W und stieg an. Im Moment, als ich den Test abbrach, betrug der Stromverbrauch 46,18 W.

Im zweiten Test habe ich BOINC so eingestellt, dass es 50% der verfügbaren Kerne und 100% der CPU-Zeit beansprucht und eine Stunde lang laufen lässt. Der CPU-Stromverbrauch variierte zwischen 12 W und 13 W. Der durchschnittliche Verbrauch betrug 42,72 W und stieg. Im Moment, als ich den Test abbrach, betrug der Verbrauch 44 W. Um das CPU-Zeitdiagramm für den Zielkern flach zu machen, habe ich die Programmaffinität auf einen Kern und die Priorität auf hoch gesetzt. Die Grafik für andere Kerne zeigte etwas mehr als die normale CPU-Auslastung.

Für den dritten Test habe ich BOINC so eingestellt, dass 100% der verfügbaren Kerne und 50% der CPU-Zeit verwendet werden. Der Stromverbrauch variierte bei großen Sprüngen zwischen 5 W und 17 W. Der durchschnittliche Stromverbrauch nach einer Teststunde betrug 39,96 W und fiel. CPU-Zeitgraphen liefen wie /\/\/\/\/\/\/\/\/\/\/\/\/\. Aufgrund der Größe der von BOINC verwendeten Zeiteinheiten wurden Spitzen erwartet.

Daher glaube ich, dass es effizienter ist, zwei Kerne bei halber Last zu verwenden, als einen Kern bei voller Last.

Und ja, ich weiß, dass für eine ordnungsgemäße Studie viel mehr Proben benötigt werden, aber zur Zeit habe ich nicht genügend Computer oder Zeit, um ordnungsgemäße Statistiken zu erstellen.

AndrejaKo
quelle
1
Jetzt wäre es schön, ein Äquivalent zum Joulemeter für andere Betriebssysteme zu finden, dann könnte ich einige der Geräte testen, die ich bekommen habe ...
private_meta
Hier ist etwas für GNU / Linux-Laptops thinkwiki.org/wiki/How_to_measure_power_consumption
AndrejaKo
Hier ist ein weiterer interessanter Link: www.lesswatts.org/ und ein weiterer susegeek.com/general/… und ein weiterer publib.boulder.ibm.com/infocenter/lnxinfo/v3r0m0/… Anscheinend glauben die Leute ACPI-Lesungen nicht und sind überzeugt Da externe Zähler erforderlich sind, wird in wenigen dieser Links die Verwendung externer Zähler erläutert. Ich bin nicht genug mit anderen Betriebssystemen, um Hilfe leisten zu können.
AndrejaKo
Vielen Dank. Das Problem bei externen Zählern ist, dass sie den gesamten Stromverbrauch messen, nicht nur die Rechenleistung. Der gesamte Stromverbrauch wäre ebenfalls wichtig (z. B. verwenden Algorithmen häufig Festplatten). Wenn ACPI-Messwerte nicht vertrauenswürdig erscheinen, müssen Sie auch externe Messwerte für Windows-Computer verwenden, um sie vergleichen zu können: - /
private_meta
Trotzdem sind ACPI-Messwerte besser als keine Messwerte, oder? Mithilfe von Tests, die sich am stärksten auf die CPU auswirken, können wir außerdem den Basisstromverbrauch ermitteln und feststellen, wie stark er mit der Last zunimmt. Auf diese Weise können wir erkennen, dass der größte Teil der Verbrauchsänderung auf die CPU-Auslastung zurückzuführen ist. Ich könnte später noch einige Tests mit einem Voltmeter und einem Amperemeter durchführen. Es wäre wirklich interessant zu sehen, wie sich ACPI-Messungen und reale Instrumentenmessungen vergleichen lassen. Schade, dass ein solcher Vergleich nicht verallgemeinert werden kann.
AndrejaKo
0

Die Antwort auf Ihre Frage lautet zweifach: Wenn Sie hochvektorisierbaren, parallelen Code ausführen, ist es immer effizienter, die Last auf mehrere Kerne zu verteilen. Die Kerne laufen mit geringerer Last und geben weniger Wärme ab als ein einzelner Kern, der an seine Grenzen stößt. Wenn Ihr Code jedoch nicht parallelisierbar ist, ist die Ausführung auf mehreren Kernen aufgrund der Anzahl der Cache-Fehler, die aufgrund von Abhängigkeiten im gesamten Code auftreten, weniger effizient. Dies erzeugt möglicherweise immer noch weniger Wärme, aber die Ausführung Ihrer Aufgabe dauert definitiv länger als die Ausführung auf einem einzelnen Kern.

emish
quelle
1
Aber wenn Sie nicht parallelisierbaren Code haben, wie werden Sie auf mehr als einem Kern laufen?
AndrejaKo
Ihrer Meinung nach erzeugen 4 Kerne, die zu 25% zusammengeschoben werden, weniger Wärme (und verursachen mehr Energieverlust) als 1 Kern, der zu 100% geschoben wird.
private_meta
@AndrejaKo Wenn mehrere Prozesse oder Threads vorhanden sind, können diese leicht auf die Kerne verteilt werden.
Emish
0

Ihre gestellte Frage enthält zu viele Unbekannte. Fragen Sie nach Zeit- oder Energieeffizienz? Nicht paralleler Code oder paralleler Code? Einzeljob oder durchschnittliches Desktop-Multitasking? Wenn Sie eine Stromrechnung über 1000 US-Dollar pro Monat für Ihre Computer haben, ist dies möglicherweise ein oder zwei Sorgen wert. Andernfalls können Sie nicht genug sparen, um das Problem zu lösen. Es macht Spaß, darüber zu sprechen - aber wenn Sie ein ernstes Problem haben, lautet die beste Antwort: Probieren Sie verschiedene Dinge aus und sehen Sie, was funktioniert.

hotei
quelle