La tarea intensiva de CPU con múltiples subprocesos acelera la CPU mucho antes de los límites de temperatura

22

He escrito una tarea de subprocesos muy intensiva en CPU que funciona como se esperaba en mi MacBook Pro de cuatro núcleos de 2012. Lo suelto con 20 hilos y las temperaturas alcanzan los 100 ° C, medido con el Intel Power Gadget con un mínimo de regulación.

Lleve el mismo programa y archivos de datos a mi MacBook Pro de 13 "con una máquina de doble núcleo y enciéndalo. Espero que también mantenga el 3.3-3.4 GHz hasta que la temperatura se acerque a los 100 ° Marca C. El comando superior muestra la tarea al 350% (2 núcleos cada uno de doble rosca), pero la frecuencia de la CPU se corta a 1.6-1-8 GHz con la temperatura solo a 60 ° C o menos, con los ventiladores completamente silenciosos. Comience 4 tareas separadas de la CPU con un solo hilo, la máquina se comporta como se espera y mantiene 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 se está reduciendo?

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 coloco en la Mac 2016, tiene el mismo problema.

Si ejecuto 3 o 4 subprocesos únicos de CPU para que la máquina funcione a toda velocidad, luego inicio el programa de subprocesos, también disminuye 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. Solo dejo 20 o más subprocesos a la vez, así que en ningún momento hay más de 21 subprocesos, pero hay 14,400,000 registros que deben procesarse, de modo que durante los 30 minutos aproximadamente, cada uno de esos registros será procesado por un subproceso separado. / p>

Creé un programa trivial pthread que consumía tiempo de CPU y configuraba 10 de ellos en ejecución. La computadora portátil con problemas funcionó y se calentó a 95ºC 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 subprocesos y solo los reutiliza, eso no ayudó. Aparte de la temperatura de la CPU, ¿qué hará que esta máquina disminuya?

    
pregunta markatlnk 04.05.2017 - 03:09

4 respuestas

1

Esto puede ser un tiro largo, pero tal vez la diferencia en el rendimiento de un solo núcleo y / o el rendimiento de la memoria caché entre los paquetes de CPU de 2012 y 2016 sea lo suficientemente grande como para que los núcleos no tengan datos y se reduzcan hasta que puedan volver a funcionar. ?

Estoy haciendo esa suposición porque indica que suficientes procesos de un solo hilo pueden ejecutarse a toda velocidad en todos los núcleos, y un simple programa de múltiples hilos puede ejecutarse 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 de múltiples subprocesos de prueba que no permite que las CPU funcionen todo el tiempo

    
respondido por el Mike Hardy 12.06.2018 - 16:35
0

La extensión del kernel /System/Library/Extensions/AppleACPIPlatform.kext controla muchas protecciones de temperatura y CPU. Ya está compilado, obviamente, en su sistema, pero puede estar disponible en enlace (no puedo encontrarlo, pero solo lo di un vistazo rápido). No me sorprendería si Apple tuviera una configuración muy conservadora en la capacidad de la CPU.

    
respondido por el Klaatu von Schlacker 22.12.2017 - 04:23
0

Cuando el sistema operativo reconoce los hilos como impredecibles y fuera de control, se reducirá para mantener la estabilidad del sistema y del hardware, el modelo 2012 se comporta de forma diferente y puede bloquearse en el peor de los casos. Me pasó con un control de subproceso mal implementado, mi culpa. Simplemente no ejecute tantos hilos en un núcleo dual.

    
respondido por el Acid 08.03.2018 - 17:13
-3

Me sucedió con un control de subproceso mal implementado, mi error. Simplemente no ejecute demasiados subprocesos en una CPU de doble núcleo.

    
respondido por el Printable Calendar 20.05.2018 - 18:29

Lea otras preguntas en las etiquetas