web-dev-qa-db-fra.com

Pourquoi les différentes charges de processeur de 100% sont-elles différentes causant des températures différentes sur la CPU?

J'ai exécuté des tests entre l'utilisation de la CPUZ et l'OCCT. J'ai remarqué que si je fixais la CPUZ pour insister sur la CPU avec plusieurs threads, il ne passera jamais au-dessus de 70 ° C. D'autre part, l'opération s'est produite pour charger sur la CPU, elle tirait sur 75c au-delà de l'instantanément, puis arrête parfois le test à 85 ° C.

Que se passe-t-il ici? J'ai toujours compris que lorsque les vidéocards ont beaucoup de noyaux qui doivent être stressés séparément, les processeurs sont simples. Une boucle de base pour la boucle peut mettre 100% de charge sur une CPU. Un tas de boucles à long terme sur plusieurs threads peut charger chaque noyau. Comment se passe-t-il que cela se réchauffe de mon CPU beaucoup plus. Qu'est-ce que cela fait que cpuz ne peut pas?

Certaines informations de fond: la CPU est Intel Core I7-4790K. Turbo Boost est activé, mais je pense que cela ne sort pas à 5% lorsque l'un ou l'autre processus est en cours d'exécution.

36
Andrey

La CPU "Charge" (ou USAGE) est un moniteur d'activité pour indiquer quel pourcentage de temps de la CPU est dépensé sur une activité "utile" par rapport au temps "inactif". Le système d'exploitation détermine ce qui est "utile" activité et quel est le temps "inactif".

À zéro% de la charge de la CPU, le système d'exploitation ne planifie pas de processus utilisateur pendant cette période de temps.
[.____] à 50% de charge de la CPU, le système d'exploitation est prévu environ la moitié de l'intervalle de temps pour les processus utilisateur et l'autre moitié de cet intervalle de temps était passé dans la boucle inactive. Même s'il n'y a qu'un seul processus utilisateur, il ne peut pas être en mesure de consommer 100% de la charge de la CPU, car ce processus n'est pas intensément intensif de la CPU et doit être reporté pendant, par exemple, en attente d'une opération d'E/S compléter.
[.____] à 100% de charge de la CPU, le système d'exploitation a programmé tout l'intervalle de temps pour les processus utilisateur.

Notez que la CPU est en fait toujours occupée (lors de la mise sous tension), c'est-à-dire d'exécuter toujours des instructions. Si aucun processus (utilisateur) n'est prêt à exécuter, le planificateur du système d'exploitation doit remplir sa boucle inactive.

La température de la CPU est une conséquence de la puissance électrique consommée par les circuits de la CPU. Comme on se produit plus de commutateurs de transistors, plus de puissance est nécessaire et consommée, et la température de la CPU augmente.
[.____] Cette consommation d'énergie n'est pas indiquée par la CPU "Charge", qui est simplement un moniteur d'activité à base de temps.
[.____.
[.

Iow c'est le mélange d'instructions (c'est-à-dire les types d'instructions) que le processus exécute qui détermine la puissance électrique consommée et le niveau de température ultérieure.
[.____] Le système d'exploitation n'est pas capable de mesurer cette consommation d'énergie et ne signale que une mesure d'activité en fonction de la charge de la CPU et des capteurs de température.

9
sawdust

En tant que note supplémentaire, la majeure partie de la chaleur est générée lorsque des bits à l'intérieur de la CPU se retournent entre 0 et 1, pas lorsqu'ils sont "traités". En poussant un courant de zéros à travers un pipeline Alu produira beaucoup moins de chaleur que de pousser un flux de bits aléatoires. C'est aussi ce que je voudrais nous attendre à ce que le pipeline soit bloqué: il sera nourri avec des valeurs constantes (ne produisant aucun résultat utile), mais il est occupé à 100% aux fins de l'estimation de la charge de la CPU.

Ce n'est pas nécessairement ce qui se passe dans votre cas (je pense que @harrymc a cloué jusqu'à présent), tout ce que je dis, c'est que la charge de la CPU et la puissance dissipée sont différentes quantités physiques qui ne sont pas directement liées.

4
Dmitry Grigoryev

Je vais vous donner un exemple. Prendre deux boucles:

for (i = 0; i < 1000000000; ++i) {
    x += a [i];
}

et

for (i = 0; i < 1000000000; ++i) {
    x += a [i];
    y += a [i];
    z += a [i];
}

Dans la première boucle, le processeur doit attendre que l'ajout précédent soit terminée avant de pouvoir démarrer l'addition suivante. Si l'addition a une latence de 3 cycles, le processeur effectue une addition tous les 3 cycles. La charge de la CPU est de 100%, mais la CPU ne fait pas beaucoup de travail.

Dans la deuxième boucle, il existe également une itération tous les trois cycles, mais étant donné que les ajouts sont indépendants, le processeur effectuera 3 ajouts tous les 3 cycles, 3 fois plus de travail. La charge de la CPU est toujours de 100%, mais 3 fois plus de travail produira beaucoup plus de chaleur.

Vous obtiendrez donc plus de chaleur avec du code qui utilise plus de ressources informatiques disponibles dans chaque cycle.

1
gnasher729