22 votes

Les tâches intensives du processeur multi-filières accélèrent le processeur bien au-delà des limites de température.

J'ai écrit une tâche threadée très intensive en CPU qui fonctionne comme prévu sur mon MacBook Pro 2012 quad core. Je l'ai lâché avec 20 threads et les températures atteignent environ 100 °C comme mesuré avec Intel Power Gadget avec un étranglement minimal.

En ramenant le même programme et les mêmes fichiers de données à la maison sur mon MacBook Pro 13" 2016 avec une machine à double cœur et en le démarrant, je m'attendrais à ce qu'il maintienne également les 3,3-3,4 GHz jusqu'à ce que la température s'approche de la marque des 100 °C. La commande supérieure montre la tâche à 350 % (2 cœurs chacun en double filtrage), mais la fréquence du CPU est réduite à 1,6-1-8 GHz avec une température d'environ 60 °C et des ventilateurs silencieux. Si je lance 4 tâches CPU distinctes à un seul fil, la machine se comporte comme prévu et maintient une fréquence de 3,3-3,4 GHz jusqu'à ce que la température atteigne 100 °C et que les ventilateurs se mettent en marche. La question est de savoir pourquoi mon CPU est étranglé ?

Les deux machines sont à jour et utilisent les mêmes versions de gcc. Si je prends même le binaire de la machine de travail et le mets sur le Mac 2016, il a le même problème.

Si je fais tourner 3 ou 4 threads uniques de CPU pour que la machine tourne à plein régime, puis que je lance le programme threadé, cela ralentit également la fréquence.

Les deux machines disposent de 16 Go de RAM.

Modifier

Après avoir joué avec le code, je soupçonne qu'il est étranglé lorsqu'une tâche crée trop de threads. Dans ce programme, je prends chaque enregistrement que je lis et je crée un thread pour lui. Je ne laisse passer qu'une vingtaine de threads à la fois, de sorte qu'il n'y a jamais plus de 21 threads, mais il y a 14 400 000 enregistrements à traiter, de sorte qu'au cours des 30 minutes environ, chacun de ces enregistrements sera traité par un thread distinct.

J'ai créé un programme pthread trivial qui aspire le temps CPU et j'en ai fait tourner 10. L'ordinateur portable à problème a fonctionné ainsi et s'est réchauffé jusqu'à 95°C sans problème.

Je suppose que je vais réécrire mon code pour réutiliser le même fil au lieu de les détruire et de les recommencer.

Mise à jour 5/13/17

Après plusieurs heures de travail, il ne crée plus que n fils et ne fait que les réutiliser, cela n'a pas aidé. À part la température du processeur, qu'est-ce qui peut provoquer un ralentissement de cette machine ?

1voto

Mike Hardy Points 213

Il se peut que la différence de performances entre les processeurs 2012 et 2016 soit suffisamment importante pour que les cœurs soient privés de données et soient réduits jusqu'à ce qu'ils puissent à nouveau fonctionner.

Je fais cette supposition parce que vous indiquez qu'un nombre suffisant de processus monofil peuvent fonctionner à pleine vitesse sur tous les cœurs, et qu'un simple programme multi-fil peut fonctionner à pleine vitesse sur tous les cœurs.

Cela me fait penser qu'il y a quelque chose dans la conception du programme de votre charge de travail réelle par rapport à la charge de travail multithread de test qui ne laisse pas les CPU travailler tout le temps.

0voto

L'extension du noyau /System/Library/Extensions/AppleACPIPlatform.kext contrôle un grand nombre de protections de la température et du CPU. Elle est déjà compilée, évidemment, sur votre système, mais elle peut être disponible sur https://opensource.apple.com (Je ne le trouve pas, mais je n'y ai jeté qu'un coup d'œil rapide). Je ne serais pas surpris si Apple avait des paramètres très conservateurs sur la capacité du processeur.

0voto

Acid Points 39

Chaque fois que le système d'exploitation reconnaît que les threads sont imprévisibles et hors de contrôle, il réduit la vitesse pour assurer la stabilité du matériel et du système. Le modèle 2012 se comporte différemment et peut se bloquer dans le pire des cas. Cela m'est arrivé avec un contrôle des threads mal implémenté, c'est ma faute. Ne faites pas tourner autant de threads sur un dual core.

-2voto

Ça m'est arrivé avec un contrôle des fils mal implémenté, c'est ma faute. Ne faites pas tourner trop de threads sur un processeur à deux cœurs.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X