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 ?