Ich habe eine sehr CPU-intensive Thread-Aufgabe geschrieben, die auf meinem 2012 MacBook Pro Quad Core wie erwartet funktioniert. Ich drehe es locker mit 20 Threads und die Temperaturen erreichen ungefähr 100 ° C, gemessen mit Intel Power Gadget mit minimaler Drosselung.
Nehmen Sie die gleichen Programm- und Datendateien mit nach Hause zu meinem 2016 13 "MacBook Pro mit einem Dual-Core-Computer und starten Sie es. Ich würde erwarten, dass es auch die 3,3-3,4 GHz beibehält, bis die Temperatur die 100 ° C-Marke erreicht. Der obere Befehl zeigt die Aufgabe bei 350% (2 Kerne pro Dual-Thread), aber die CPU-Frequenz wird auf 1,6-1-8 GHz gesenkt, wobei die Temperatur nur bei etwa 60 ° C liegt und die Lüfter absolut leise sind Bei Single-Threaded-CPU-Aufgaben verhält sich die Maschine wie erwartet und behält 3,3 bis 3,4 GHz bei, bis die 100 ° C erreicht sind und die Lüfter anspringen. Die Frage ist, warum meine CPU gedrosselt wird.
Beide Maschinen sind auf dem neuesten Stand und führen die gleichen Versionen von gcc aus. Wenn ich die Binärdatei sogar von der Arbeitsmaschine nehme und sie auf den Mac 2016 lege, hat sie das gleiche Problem.
Wenn ich 3 oder 4 CPU-Einzelthreads ausführe, damit die Maschine mit voller Geschwindigkeit läuft, starte ich das Thread-Programm und verlangsame die Frequenz ebenfalls.
Beide Computer verfügen über 16 GB RAM.
Bearbeiten
Nachdem ich mit Code herumgespielt habe, vermute ich, dass er gedrosselt wird, wenn eine Aufgabe zu viele Threads erstellt. In diesem Programm nehme ich jeden Datensatz, den ich lese, und erstelle einen Thread dafür. Ich lasse nur ungefähr 20 Threads gleichzeitig laufen, sodass es zu keinem Zeitpunkt mehr als 21 Threads gibt, aber es gibt 14.400.000 zu verarbeitende Datensätze in den ungefähr 30 Minuten. Jeder dieser Datensätze wird von einem separaten Thread verarbeitet.
Ich habe ein triviales pthread-Programm erstellt, das die CPU-Zeit verschwendet und 10 davon zum Laufen gebracht hat. Das Problem Laptop lief und erwärmte sich auf 95C ohne Probleme.
Ich denke, ich werde meinen Code umschreiben, um denselben Thread wiederzuverwenden, anstatt sie zu zerstören und neu zu starten.
Update 13.05.17
Nach mehreren Stunden Arbeit werden nur noch n Threads erstellt und wieder verwendet, was nicht geholfen hat. Was verursacht, abgesehen von der CPU-Temperatur, ein Drosseln dieses Computers?