Besoin en énergie CPU multicœur et équilibrage de charge

10

Je suis intéressé par l'équilibrage de charge pour les systèmes CPU multicœurs. Si vous utilisez 1 CPU avec plusieurs cœurs, est-il plus économe en énergie pour équilibrer la charge sur plusieurs cœurs, ou essayez de remplir des cœurs uniques et de laisser les autres inactifs.
L'hypothèse de base est que la quantité de travail effectuée dans les deux cas est exactement la même, en même temps. Donc, est-il plus efficace d'utiliser 4 cœurs dans le même processeur avec 25% de charge chacun ou 1 cœur avec 100% de charge.
Je suppose qu'un cœur avec une charge de 100% devrait être plus efficace, mais comme je me trompe peut-être, je cherchais des réponses sérieuses à ce problème (pas de suppositions).

private_meta
la source
+1 Question vraiment intéressante! Voici quelques liens tomshardware.com/reviews/truth-pc-power-consumption,1707.html tomshardware.com/reviews/intel-cpu-power-consumption,1750.html mais ils ne répondent pas vraiment à votre question. J'ai le C2D T8100 et un de ces jours je vais faire des tests pour voir quel type de charge produit plus de chaleur.
AndrejaKo
4 cœurs à 25% vont certainement diffuser la chaleur mieux que 1 cœur à 100%.
Brian Knoblauch
Si la quantité de travail est constante dans tous les cas d'utilisation, empiler toute la charge sur le même noyau va le rendre moins performant, ce qui prendra plus de temps et de battage. Vous pourriez perdre les économies d'énergie instantanées lorsque le même travail nécessite plus de temps. (+1, question suscitant la réflexion)
nik
@Brian a convenu que l'utilisation de plus de cœurs répartit la chaleur, mais génère-t-elle la même quantité de chaleur au total?
Kevin Panko
AMD a annoncé des processeurs qui pourront éteindre les cœurs inutilisés, permettant d'exécuter les cœurs actifs à une vitesse d'horloge supérieure
b0fh

Réponses:

6

OMI, cette question est simplement sans réponse dans le cas général.

Sur mon bureau, j'ai l'un de ces nouveaux processeurs compatibles Core i7-980x à 6 cœurs TurboBoost. Si vous chargez un seul cœur sur cette machine, cela augmentera la vitesse d'horloge de ce cœur, augmentant ainsi la consommation d'énergie du processeur, ce qui fera une énorme différence. Ce processeur ainsi que d'autres processeurs plus modernes peuvent partiellement mettre hors tension les cœurs inactifs, ce qui augmente les économies d'énergie. Ce n'est pas aussi vrai sur les anciens modèles de CPU.

Gardez à l'esprit que le travail que vous avez à faire avec un cœur sera nécessairement différent de celui que vous faites avec plusieurs cœurs. S'il est vrai que vous pouvez répartir la charge sur plusieurs cœurs, vous constaterez que beaucoup de temps supplémentaire sera consacré au seul cœur à effectuer des changements de contexte coûteux, et vos performances en souffriront.

Quoi qu'il en soit, le problème a trop de variables pour vraiment répondre. On pourrait continuer encore et encore sur les différents types de charges, et quiconque essaie de comparer pour obtenir une réponse finira (probablement par inadvertance) par faire des comparaisons pommes-oranges qui ne s'appliquent pas dans d'autres cas d'utilisation.

Oh, et encore une chose. La plupart des gens citeront probablement l'efficacité en termes de puissance . Vous ne voulez pas tomber dans ce piège. Étant donné que le temps de traitement des charges sera nécessairement différent selon la façon dont les charges sont équilibrées, vous devez intégrer le résultat au fil du temps pour trouver la quantité nette d' énergie utilisée pour terminer les travaux afin d'arriver à un résultat crédible.

David Markle
la source
LOL Comment pourriez-vous dire? Hokie Engineering, bébé!
David Markle
Il faut en connaître un. Go Mizzou
hotei
Oh, attendez. J'avais tort. Il y a un homme qui pourrait exécuter des repères et nous donner une réponse dans le cas général: gizmodo.com/5598885/…
David Markle
4

J'ai fait quelques tests aujourd'hui en utilisant cet ordinateur (Intel C2D T8100) et en utilisant des applications SETI @ Home optimisées de l'installateur lunatique 0.36. J'ai utilisé M $ Joulmeter pour calculer la consommation d'énergie. J'ai mesuré les temps de l'arbre de consommation. Tout d'abord, j'ai laissé BOINC prendre 100% de cœurs et 100% de temps CPU et le laisser fonctionner pendant une heure. Le processeur consommait 20 W et les graphiques de temps CPU du gestionnaire de tâches étaient plats à 100%. La consommation électrique moyenne de mon ordinateur était de 45,05 W et augmentait et au moment où j'ai arrêté la consommation d'énergie de test était de 46,18 W.

Dans le deuxième test, j'ai configuré BOINC pour prendre 50% des cœurs disponibles et 100% du temps CPU et le laisser fonctionner pendant une heure. La consommation d'énergie du processeur variait entre 12W et 13W. La consommation moyenne était de 42,72 W et en hausse. Au moment où j'ai arrêté le test, la consommation était de 44W. Afin que le graphique du temps CPU pour le cœur cible soit plat, j'ai défini l'affinité du programme sur un cœur et la priorité sur élevée. Le graphique pour les autres cœurs a montré une utilisation du temps CPU légèrement supérieure à la normale.

Pour le troisième test, j'ai défini BOINC pour utiliser 100% des cœurs disponibles et 50% du temps CPU. La consommation électrique variait en grands sauts entre 5W et 17W. La consommation électrique moyenne après une heure de test était de 39,96 W et en baisse. Graphiques de temps CPU looled comme /\/\/\/\/\/\/\/\/\/\/\/\/\. Des pics étaient attendus en raison de la taille des unités de temps utilisées par BOINC.

Je pense donc qu'il est plus efficace d'utiliser deux cœurs fonctionnant à demi-charge que d'exécuter un cœur à pleine charge.

Et oui, je sais que pour une étude appropriée, il faut beaucoup plus d'échantillons, mais à l'époque je n'ai pas assez d'ordinateurs ni de temps pour faire des statistiques adéquates.

AndrejaKo
la source
1
Maintenant, ce serait bien de trouver un équivalent du Joulemeter pour d'autres systèmes d'exploitation, alors je pourrais tester certains des équipements que j'ai ...
private_meta
Voici quelque chose pour les ordinateurs portables GNU / Linux thinkwiki.org/wiki/How_to_measure_power_consumption
AndrejaKo
Voici un autre lien intéressant: www.lesswatts.org/ et un autre susegeek.com/general/… et un autre publib.boulder.ibm.com/infocenter/lnxinfo/v3r0m0/… Apparemment, les gens ne croient pas aux lectures ACPI et sont convaincus que les compteurs externes sont nécessaires, donc peu de ces liens expliquent comment utiliser les compteurs externes. Je ne suis pas assez 1337 avec d'autres systèmes d'exploitation pour pouvoir vous aider.
AndrejaKo
Merci. Le problème avec les compteurs externes est qu'ils mesurent toute la consommation d'énergie, pas seulement la puissance de traitement. Alors que la consommation totale d'énergie serait également importante (par exemple, les algorithmes utilisent largement les disques durs). Si les lectures ACPI ne semblent pas fiables, vous devez également utiliser des lectures externes pour les ordinateurs Windows pour pouvoir les comparer: - /
private_meta
Mais les lectures ACPI sont toujours meilleures que pas de lectures, non? De plus, en utilisant des tests qui ont le plus d'impact sur le processeur, nous pouvons établir la consommation d'énergie de base et voir combien elle augmente avec la charge. De cette façon, nous pouvons savoir que la majeure partie du changement de consommation provenait de la charge du processeur. Je pourrais faire plus de tests plus tard avec un voltmètre et un ampèremètre. Il serait vraiment intéressant de voir comment les mesures ACPI et les mesures réelles des instruments se comparent. Dommage qu'une telle comparaison ne puisse pas être généralisée.
AndrejaKo
0

La réponse à votre question est double: si vous exécutez du code parallèle hautement vectorisable, l'équilibrage de la charge sur plusieurs cœurs est toujours plus efficace. Les noyaux fonctionneront à des charges plus faibles, libérant moins de chaleur qu'un seul noyau poussé à sa limite. En revanche, si votre code n'est pas parallélisable, son exécution sur plusieurs cœurs est moins efficace en raison du nombre d'échecs de cache qui se produiront en raison de dépendances à travers le code. Cela peut encore générer moins de chaleur, mais cela prendra certainement plus de temps pour terminer votre tâche que de l'exécuter sur un seul cœur.

emish
la source
1
Mais si vous avez du code non parallélisable, comment allez-vous exécuter sur plusieurs cœurs?
AndrejaKo
Selon vous, 4 noyaux fusionnés à 25% génèrent ensemble moins de chaleur (et produisent plus de pertes d'énergie) qu'un noyau poussé à 100%.
private_meta
@AndrejaKo S'il existe plusieurs processus ou threads, il est facile de les répartir sur les cœurs.
emish
0

Votre question telle qu'elle a été posée comporte trop d'inconnues. Vous posez des questions sur l'efficacité en termes de temps ou d'efficacité énergétique? Code non parallèle ou code parallèle? Travail unique ou multitâche de bureau moyen? Si vous avez une facture d'énergie de plus de 1000 $ / mois pour vos ordinateurs, cela POURRAIT valoir la peine de s'inquiéter. Sinon, vous ne pouvez pas économiser suffisamment pour que le problème mérite d'être résolu. Amusant de parler - mais si vous avez un problème grave, la meilleure réponse est: essayez différentes choses et voyez ce qui fonctionne.

hotei
la source