Ho scritto un'attività con thread molto intensivo della CPU che funziona come previsto sul mio quad core MacBook Pro 2012. Lo spengo con 20 fili e le temperature salgono a circa 100 ° C come misurato con Intel Power Gadget con una regolazione minima.
Portare lo stesso programma e i file di dati sul mio MacBook Pro 2016 13 "con una macchina dual core e avviarlo, mi aspetto che continui anche sui 3.3-3.4 GHz finché la temperatura non si avvicina ai 100 ° Segno C. Il comando in alto mostra il compito al 350% (2 core ogni doppio thread), ma la frequenza della CPU viene tagliata a 1,6-1-8 GHz con la temperatura solo a 60 ° C o giù di lì con i ventilatori morti. avvia 4 task CPU separati a thread singolo, la macchina si comporta come previsto mantenendo il 3.3-3.4 GHz fino a quando non raggiunge i 100 ° C e le ventole si avviano. La domanda è: perché la mia CPU viene rallentata?
Entrambe le macchine sono aggiornate e utilizzano le stesse versioni di gcc. Se prendo il binario dalla macchina funzionante e lo metto nel Mac 2016, ha lo stesso problema.
Se eseguo 3 o 4 thread singoli della CPU in modo che la macchina funzioni a piena velocità, quindi avvia il programma filettato, rallenta anche la frequenza.
Entrambe le macchine hanno 16 GB di RAM.
Modifica
Dopo aver giocato con il codice, ho il sospetto che si stia riducendo quando un'attività crea troppi thread. In questo programma, prendo ogni record che leggo e creo un thread per questo. Ho lasciato passare solo 20 thread alla volta, quindi in nessun momento ci sono più di 21 thread, ma ci sono 14.400.000 record da elaborare, quindi nei 30 minuti circa ognuno di questi record verrà elaborato da un thread separato. / p>
Ho creato un banale programma pthread che ha risucchiato il tempo della CPU e ne ha impostati 10 in esecuzione. Il problema con il laptop è stato eseguito e riscaldato fino a 95C senza problemi.
Credo che riscriverò il mio codice per riutilizzare lo stesso thread invece di distruggerli e avviarli di nuovo.
Aggiornamento 5/13/17
Dopo diverse ore di lavoro, ora crea solo n thread e li riutilizza solo, che non ha aiutato. A parte la temperatura della CPU, cosa causerà il rallentamento della macchina?