Intel i7-1065G7 no alcanza la frecuencia máxima de turbo boost

Aug 18 2020

Tengo una computadora portátil con una CPU Intel i7-1065G7 . turbostatinformes

35 * 100.0 = 3500.0 MHz max turbo 8 active cores
35 * 100.0 = 3500.0 MHz max turbo 7 active cores
35 * 100.0 = 3500.0 MHz max turbo 6 active cores
35 * 100.0 = 3500.0 MHz max turbo 5 active cores
35 * 100.0 = 3500.0 MHz max turbo 4 active cores
35 * 100.0 = 3500.0 MHz max turbo 3 active cores
38 * 100.0 = 3800.0 MHz max turbo 2 active cores
39 * 100.0 = 3900.0 MHz max turbo 1 active cores

(estos son 4 núcleos físicos / 8 virtuales) Cuando lanzo una gran carga de un solo hilo (calculando pi con mpfr) a la cpu, observo que dos núcleos (¿tal vez un núcleo físico?) funcionan exactamente a 3500 MHz mientras que los otros tienen un menor frecuencia. Pero nunca alcanzan las frecuencias más altas de turbo boost.

Si desactivo algunos de los núcleos de la CPU (por ejemplo, con echo 0 > /sys/devices/system/cpu/cpu[2-7]*/online) el portátil no llega a los correspondientes frecuencias superiores a impulsar turbo, lo que resulta en un mayor rendimiento (una tarea que tuvo un promedio de 18,5 segundos antes de que ahora toma 16.8).

¿Cómo puedo hacer que mi nuevo portátil alcance su máxima velocidad de reloj cuando no se necesitan todos los núcleos?

Estoy usando Ubuntu 20.04 con kernel 5.4.0 en una computadora portátil HP Envy x360.

Lo que espero: En mi viejo portátil con un i7-4712MQ turbostat da

30 * 100.0 = 3000.0 MHz max turbo 4 active cores
30 * 100.0 = 3000.0 MHz max turbo 3 active cores
32 * 100.0 = 3200.0 MHz max turbo 2 active cores
33 * 100.0 = 3300.0 MHz max turbo 1 active cores

(esta es también una máquina de 4/8 núcleos). En esta máquina, una carga de un solo núcleo hace que un núcleo aumente a casi 3.3 GHz, bajo una carga de dos núcleos, dos relojes a 3.2 GHz, etc.

No he comprobado las frecuencias de la CPU individual en Windows, pero el administrador de tareas a veces muestra frecuencias por encima de 3,7 GHz.

Actualización: Entonces el problema desapareció ... No tengo idea de por qué. Desinstalé, linux-cloud-toolspero no creo que esta deba ser la razón.

Respuestas

H2ONaCl Aug 18 2020 at 08:01

Tu escribiste...

Cuando lanzo una gran carga de un solo hilo

Si su programa es de un solo subproceso, no necesita ir a la frecuencia máxima en los otros subprocesos, por lo que no es así.

Su enlace es para el procesador Intel® Core ™ i7-1065G7.

El documento de Intel que vinculó dice que el máximo es 3900 MHz. Sus datos parecen mostrar que hay un núcleo a 3900 MHz, así que no sé por qué cree que no alcanzó el máximo. Publicaste esto ...

35 * 100.0 = 3500.0 MHz max turbo 8 active cores
35 * 100.0 = 3500.0 MHz max turbo 7 active cores
35 * 100.0 = 3500.0 MHz max turbo 6 active cores
35 * 100.0 = 3500.0 MHz max turbo 5 active cores
35 * 100.0 = 3500.0 MHz max turbo 4 active cores
35 * 100.0 = 3500.0 MHz max turbo 3 active cores
38 * 100.0 = 3800.0 MHz max turbo 2 active cores
39 * 100.0 = 3900.0 MHz max turbo 1 active cores

En general, si la lectura no es la frecuencia máxima, es porque lo hace solo de manera intermitente, por lo que la medición solo lo mostrará de manera intermitente o, de lo contrario, no necesita estar en la frecuencia máxima porque hay alguna restricción como IO. No se preocupe por eso. Si escribe un programa que no tiene restricciones, en otras palabras, es un hilo con restricciones de cálculo, le garantizo que llegará a la frecuencia máxima.

Un tiempo transcurrido de 18,5 s puede no ser significativo debido a efectos aleatorios que no desea utilizar para sacar conclusiones. Los trabajos de ejecución prolongada de 200 segundos o más pueden brindarle datos más significativos.

thesps Sep 28 2020 at 19:04

Experimenté algo similar, en una configuración similar (CPU i7-9700K, Ubuntu 18.04). Y creo que el uso de mi máquina puede ser similar: es una máquina de escritorio que uso para ejecutar algunas aplicaciones intensivas (pero de un solo hilo), mientras que posiblemente también tenga un navegador web y algunas aplicaciones de mensajería abiertas. Encontré que la sugerencia en los comentarios debajo de la publicación original funcionaba: establecer la afinidad de la CPU para los procesos. Solía tasksethacerlo [1].

Primera prueba (sin cambios en la configuración de afinidad): los 8 núcleos 'inactivos' a ~ 10% de utilización. Empiezo una tarea intensiva de CPU de un solo subproceso. Un núcleo salta al 100%, veo 3.6 GHz (el máximo sin turbo) en todos los núcleos que usan i7z.

Segunda prueba: Restringir todos los procesos que se ejecutan en la CPU núcleos de 0 y 1, con: . Ahora esos 2 núcleos se encuentran en 30-40%, el resto en 0% (aunque algunos otros núcleos pueden comenzar a tener actividad cuando el sistema operativo inicia los procesos). Luego, inicie la misma tarea intensiva de CPU de un solo subproceso. Un núcleo salta al 100%, pero ahora veo que alcanza la frecuencia turbo máxima de 4,9 GHz. Luego configuré la afinidad para usar todos los núcleos reemplazando el rango con , en mi caso.for i in `sudo ps -aux | awk '{ print $2 }'`; do sudo taskset -a -p -c 0-1 $i; done0-10-7

[1] http://manpages.ubuntu.com/manpages/focal/man1/taskset.1.html