22 votos

Las tareas intensivas de la CPU con múltiples hilos estrangulan la CPU antes de los límites de temperatura

He escrito una tarea roscada muy intensiva de la CPU que funciona como se espera en mi MacBook Pro quad core 2012. La pongo en marcha con 20 hilos y las temperaturas llegan a unos 100 °C medidos con Intel Power Gadget con un estrangulamiento mínimo.

Llevar el mismo programa y los archivos de datos a casa a mi MacBook Pro 2016 de 13" con una máquina de doble núcleo y ponerla en marcha, esperaría que también mantuviera los 3,3-3,4 GHz hasta que la temperatura se acerque a la marca de 100 °C. El comando superior muestra la tarea al 350% (2 núcleos de doble hilo cada uno), pero la frecuencia de la CPU se reduce a 1,6-1-8 GHz con la temperatura sólo a 60 °C o así con los ventiladores en silencio. Si inicio 4 tareas separadas de un solo hilo de la CPU, la máquina se comporta como se esperaba, manteniendo los 3,3-3,4 GHz hasta que alcanza los 100 °C y los ventiladores se ponen en marcha. La pregunta es ¿por qué mi CPU está siendo estrangulada?

Ambas máquinas están actualizadas y ejecutan las mismas versiones de gcc. Si incluso tomo el binario de la máquina de trabajo y lo pongo en el Mac 2016, tiene el mismo problema.

Si ejecuto 3 o 4 hilos de la CPU para que la máquina vaya a toda velocidad, y luego empiezo el programa con hilos, también baja la frecuencia.

Ambas máquinas tienen 16 GB de RAM.

Editar

Después de jugar con el código, sospecho que se está acelerando cuando una tarea crea demasiados hilos. En este programa, tomo cada registro que leo y creo un hilo para él. Sólo dejo pasar unos 20 hilos a la vez, por lo que en ningún momento hay más de 21 hilos, pero hay 14.400.000 registros que hay que procesar, por lo que a lo largo de unos 30 minutos cada uno de esos registros será procesado por un hilo distinto.

Creé un programa pthread trivial que chupaba el tiempo de la CPU y puse 10 de ellos en funcionamiento. El portátil problemático lo ejecutó y se calentó hasta los 95C sin problemas.

Supongo que reescribiré mi código para reutilizar el mismo hilo en lugar de destruirlos y volver a iniciarlos.

Actualización 5/13/17

Después de varias horas de trabajo, ahora solo crea n hilos y solo los reutiliza, eso no ayudó. Aparte de la temperatura de la CPU, ¿qué hará que esta máquina se ralentice?

1voto

Mike Hardy Puntos 125

Esto puede ser una posibilidad remota, pero tal vez la diferencia en el rendimiento de un solo núcleo y/o el rendimiento de la caché entre los paquetes de cpu de 2012 y 2016 son lo suficientemente grandes como para que los núcleos estén hambrientos de datos y se ralenticen hasta que sean capaces de trabajar de nuevo?

Hago esa conjetura porque indicas que bastantes procesos de un solo hilo pueden funcionar a toda velocidad en todos los núcleos, y que un simple programa multihilo puede funcionar a toda velocidad en todos los núcleos.

Eso me hace pensar que hay algo en el diseño del programa de su carga de trabajo real frente a la carga de trabajo multihilo de prueba que no está dejando que las CPUs trabajen todo el tiempo

0voto

Govind Parmar Puntos 134

La extensión del kernel /System/Library/Extensions/AppleACPIPlatform.kext controla muchas salvaguardas de la temperatura y la CPU. Ya está compilado, obviamente, en su sistema, pero puede estar disponible en https://opensource.apple.com (No lo encuentro, pero sólo le he echado un vistazo rápido). No me sorprendería que Apple tuviera una configuración muy conservadora de la capacidad de la CPU.

0voto

Acid Puntos 16

Cuando el sistema operativo reconoce que los hilos son impredecibles y están fuera de control, los reduce para mantener la estabilidad del hardware y del sistema, el modelo 2012 se comporta de forma diferente y puede bloquearse en el peor de los casos. A mi me pasó con un control de hilos mal implementado, culpa mía. Simplemente no ejecute tantos hilos en un doble núcleo.

-2voto

Me pasó con un control de hilos mal implementado, culpa mía. Simplemente no ejecute demasiados hilos en una CPU de doble núcleo.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X