La tarea intensiva de CPU multiproceso acelera la CPU antes de que los límites de temperatura

21

He escrito una tarea con subprocesos muy intensiva de CPU que funciona como se esperaba en mi MacBook Pro quad core 2012. Lo desabrocho con 20 hilos y las temperaturas alcanzan aproximadamente los 100 ° C, medido con Intel Power Gadget con un mínimo estrangulamiento.

Lleve el mismo programa y archivos de datos a mi MacBook Pro de 13 "2016 con una máquina de doble núcleo e inícielo, 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 cada uno con doble rosca), pero la frecuencia de la CPU se reduce a 1.6-1-8 GHz con la temperatura solo a 60 ° C más o menos con los ventiladores en silencio. Si comienzo 4 por separado tareas de CPU de un solo subproceso, la máquina se comporta como se espera, 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 acelerada?

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

Si ejecuto 3 o 4 subprocesos simples de la 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á estrangulando cuando una tarea crea demasiados hilos. En este programa, tomo cada registro que leo y creo un hilo para él. Solo dejo que pasen alrededor de 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 se procesarán durante los 30 minutos más o menos, cada uno de esos registros será procesado por un hilo separado.

Creé un programa trivial pthread que absorbió el tiempo de CPU y configuró 10 de ellos en ejecución. El problema de la computadora portátil funcionó y se calentó a 95 ° C sin problemas.

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

Actualización 13/05/17

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

markatlnk
fuente
1
¡Me encanta esta pregunta! ¿Qué tal ejecutar una tarea multiproceso específica diferente? Sugeriría ejecutar algo como una tarea ffmpeg (en un video de 1080p o 4K, para asegurarse de que usa todos los recursos de CPU disponibles) y ver si se acelera. Esto podría reducir el problema a: su programa en esa máquina o todos los programas multiproceso en esa máquina
NoahL
1
Si ejecuto Cinebench R15 benchmark, utiliza las tareas de subprocesos y funciona como se esperaba, la temperatura alcanza los 100 ° C y los ventiladores suben. Intel Power Gadget muestra que la frecuencia de la CPU todavía está cerca de 3.3Ghz. Por lo tanto, no parece un problema de hardware. Todo el código es solo código C sin nada que le guste usar p_threads y bloqueos Mutex mínimos. El programa es principalmente procesamiento de secuencia de ADN con un hilo que extrae algo así como 16 gigas de datos y lo pasa a n hilos individuales para el gran procesamiento de números.
markatlnk
1
¿Parece que otros programas pueden alcanzar el techo que estás buscando? Si el problema es solo de su código especial, es posible que necesitemos más información sobre ese código. No obstante, ¿dónde se procesarán sus datos? ¿Externo? ¿Cuánto trabajo informa kernel_task? Otros sensores de temperatura?
LаngLаngС
1
Su CPU tiene 8 núcleos lógicos, no 4, por lo que 4 hilos se mostrarían como 50% de uso total de CPU. Me pregunto si eso afecta la estimación de carga de su sistema.
sudo
No sé si querría pasar por el problema, pero podría intentar depurar a nivel del núcleo con el núcleo de depuración. Puede obtenerlo si hace clic en más descargas en el sitio de desarrollo de Apple.
user3052786

Respuestas:

1

Esto puede ser una posibilidad remota, pero ¿quizás la diferencia en el rendimiento de un solo núcleo y / o el rendimiento de la memoria caché entre los paquetes de CPU 2012 y 2016 es lo suficientemente grande como para que los núcleos carezcan de 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 ejecutar a toda velocidad en todos los núcleos, y un programa simple de múltiples hilos puede ejecutar 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 hilos de prueba que no permite que las CPU funcionen todo el tiempo

Mike Hardy
fuente
0

La extensión del núcleo /System/Library/Extensions/AppleACPIPlatform.kext controla muchas protecciones de temperatura y CPU. Ya está compilado, obviamente, en su sistema, pero puede estar disponible en https://opensource.apple.com (No puedo encontrarlo, pero solo le di un vistazo rápido). No me sorprendería si Apple tuviera configuraciones muy conservadoras en la capacidad de la CPU.

Klaatu von Schlacker
fuente
3
AFAIK the Apple kexts no son de código abierto. (¿Extrañamente?) El mejor recurso para obtener información sobre esto es la comunidad Hackintoshing debido a la necesidad de inyectar controladores.
JMY1000
¡No es extraño en absoluto! Los manipuladores dan el mejor consejo porque saben mucho más de lo que deberían de primera mano. En cuanto a la configuración conservadora de la CPU, recuerde que el MBP tiene un gran disipador térmico para un rendimiento de ráfaga, pero no tan bueno para ciclos sostenidos. Es muy probable que este problema se deba a que Apple quiere evitar que sus piernas se cocinen de manera preventiva. Escuché sobre algunas demandas sobre eso con el 2012MBP.
user1901982
0

Siempre que el sistema operativo reconozca los subprocesos como impredecibles y fuera de control, se acelerará para mantener la estabilidad del hardware y el sistema, el modelo 2012 se comporta de manera diferente y podría bloquearse en el peor de los casos. Me pasó con un control de subprocesos mal implementado, mi culpa. Simplemente no ejecute tantos hilos en un núcleo dual.

Ácido
fuente
-2

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

Calendario imprimible
fuente