Ho scritto un'attività con thread molto intensiva per la CPU che funziona come previsto sul mio quad-core MacBook Pro 2012. Lo allento con 20 fili e le temperature arrivano fino a circa 100 ° C misurate con Intel Power Gadget con limitazione minima.
Porta lo stesso programma e file di dati a casa sul mio MacBook Pro 13 "2016 con una macchina dual core e avvialo, mi aspetto che manterrà anche i 3,3-3,4 GHz fino a quando la temperatura si avvicinerà al segno di 100 ° C. Il comando superiore mostra l'attività al 350% (2 core ciascuno a doppia filettatura), ma la frequenza della CPU viene ridotta a 1,6-1-8 GHz con la temperatura solo a 60 ° C o giù di lì con le ventole completamente silenziose. Se inizio 4 separatamente attività della CPU a thread singolo, la macchina si comporta come previsto, mantenendo i 3,3-3,4 GHz fino a raggiungere i 100 ° C e le ventole iniziano a girare. La domanda è: perché la mia CPU viene ridotta?
Entrambe le macchine sono aggiornate ed eseguono le stesse versioni di gcc. Se prendo anche il binario dalla macchina funzionante e lo metto sul Mac 2016, ha lo stesso problema.
Se eseguo 3 o 4 thread singoli CPU in modo che la macchina vada alla massima velocità, quindi avvio il programma thread, rallenta anche la frequenza.
Entrambe le macchine hanno 16 GB di RAM.
modificare
Dopo aver giocato con il codice, sospetto che si stia restringendo quando un'attività crea troppi thread. In questo programma prendo ogni record che leggo e creo un thread per esso. Ho lasciato solo 20 thread alla volta, quindi in nessun momento ci sono più di 21 thread, ma ci sono 14.400.000 di record da elaborare, quindi nei 30 minuti circa ciascuno di questi record verrà elaborato da un thread separato.
Ho creato un banale programma pthread che ha risucchiato il tempo della CPU e ne ho eseguiti 10 in esecuzione. Il laptop problema ha funzionato e si è riscaldato fino a 95 ° C senza problemi.
Immagino che riscriverò il mio codice per riutilizzare lo stesso thread invece di distruggerli e riavviarli.
Aggiornamento 13/05/17
Dopo diverse ore di lavoro, ora crea solo n thread e li riutilizza, il che non ha aiutato. Oltre alla temperatura della CPU, che cosa farà rallentare questa macchina?