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?