Il task intensivo con CPU multi-thread limita la CPU prima dei limiti di temperatura


21

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?


1
Adoro questa domanda! Che ne dici di eseguire un'attività specifica multithread specifica? Suggerirei di eseguire qualcosa come un'attività ffmpeg (su un video 1080p o 4K, per assicurarsi che utilizzi tutte le risorse della CPU disponibili) e vedere se rallenta. Questo potrebbe restringere il problema a entrambi: il tuo programma in quella macchina o tutti i programmi multithread su quella macchina
NoahL

1
Se eseguo il benchmark Cinebench R15, utilizza le attività filettate e funziona come previsto, la temperatura arriva fino a circa 100 ° C e le ventole aumentano. Intel Power Gadget mostra che la frequenza della CPU è ancora vicino a 3,3 Ghz. Quindi non sembra un problema hardware. Tutto il codice è solo codice C con niente di speciale che usa p_threads e blocchi Mutex minimi. Il programma consiste principalmente nell'elaborazione di sequenze di DNA con un thread che estrae qualcosa come 16 gig di dati e lo passa a n singoli thread per lo scricchiolio dei numeri pesanti.
markatlnk,

1
Sembra che altri programmi possano raggiungere il limite che stai cercando? Se il problema riguarda solo il tuo codice speciale, potremmo aver bisogno di maggiori informazioni su quel codice. Anche se, dove devono essere trattati i tuoi dati? Esterno? Quanto lavoro segnala kernel_task? Altri sensori di temperatura?
LängLаngС,

1
La tua CPU ha 8 core logici, non 4, quindi 4 thread mostrerebbero il 50% di utilizzo totale della CPU. Mi chiedo se ciò influisca sulla stima del carico del tuo sistema.
sudo,

Non so se vorresti affrontare il problema, ma potresti provare a eseguire il debug a livello di kernel con il kernel di debug. Puoi ottenerlo se fai clic su un numero maggiore di download sul sito di sviluppo Apple.
user3052786

Risposte:


1

Potrebbe trattarsi di una prospettiva a lungo termine, ma forse la differenza tra le prestazioni single-core e / o cache tra i pacchetti cpu 2012 e 2016 è abbastanza grande da far affamare i dati e rallentare i core fino a quando non sono in grado di funzionare di nuovo?

Sto facendo un'ipotesi perché indichi che i processi a thread singolo sono sufficienti per eseguire la velocità massima su tutti i core e un semplice programma multi-thread può eseguire la velocità massima su tutti i core.

Questo mi fa pensare che ci sia qualcosa nella progettazione del programma del tuo carico di lavoro reale rispetto al carico di lavoro multi-thread di prova che non consente alle CPU di funzionare sempre


0

L'estensione del kernel /System/Library/Extensions/AppleACPIPlatform.kext controlla molte protezioni di temperatura e CPU. È già compilato, ovviamente, sul tuo sistema, ma potrebbe essere disponibile su https://opensource.apple.com (non riesco a trovarlo, ma gli ho dato solo una rapida occhiata). Non mi sorprenderebbe se Apple avesse impostazioni molto conservative sulla capacità della CPU.


3
AFAIK i kexts di Apple non sono open source. (Stranamente?) La migliore risorsa per informazioni su questo è la comunità di Hackintoshing a causa della necessità di iniettare i driver.
JMY1000 il

Per niente strano! I trilli danno il miglior consiglio perché sanno molto di più di quanto dovrebbero prima mano. Per quanto riguarda le impostazioni conservative della CPU, ricorda che l'MBP ha un ottimo dissipatore di calore per le prestazioni di scoppio, ma non eccezionale per i cicli prolungati. È molto probabile che questo problema sia dovuto a Apple che desidera impedire preventivamente la cottura delle gambe. Ho sentito parlare di alcune cause legali su questo con il 2012MBP.
user1901982

0

Ogni volta che il sistema operativo riconosce i thread come imprevedibili e fuori controllo, rallenterà per rimanere stabilità hardware e di sistema, il modello 2012 si comporta in modo diverso e potrebbe bloccarsi nel peggiore dei casi. Mi è successo con un controllo del thread mal implementato, colpa mia. Non eseguire così tanti thread su un dual core.


-2

Mi è successo con un controllo del thread mal implementato, colpa mia. Non eseguire troppi thread su una CPU dual core.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.