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).
cpu-usage
power-consumption
private_meta
quelle
quelle
Antworten:
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.
quelle
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.
quelle
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.
quelle
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.
quelle