En una CPU, ¿la velocidad de un cálculo afecta el calor generado?


9

Tomemos como ejemplo una CPU que es capaz de cambiar su velocidad de reloj, como una CPU de computadora moderna (Intel, AMD, lo que sea). Cuando hace un cierto cálculo a una velocidad de reloj particular, ¿genera la misma cantidad de calor que cuando hace el mismo cálculo a una velocidad de reloj más lenta? Sé que la disipación de calor y la acumulación de calor son problemas diferentes, así que hablemos sobre el calor bruto generado.


Un cálculo realizado con una velocidad más alta lleva menos tiempo.
Eugene Sh.

44
En una computadora que es ideal en el sentido de Landauer , creo que el cálculo produciría la misma cantidad de energía térmica. Pero en las computadoras del mundo real, probablemente va a ser diferente. Particularmente porque la cantidad de calor que ya se ha generado y aún no se ha disipado (es decir, la temperatura del semiconductor) va a afectar sus propiedades y, por lo tanto, el calor que genera.
Hogar

Por supuesto que sí, he diseñado algunos diseños de FPGA y necesitábamos que fuera de baja potencia. Por lo tanto, utilizamos una fuente de reloj de 10 kHz en lugar de una fuente de 1 MHz, ya que no necesitábamos tanta potencia de procesamiento.
lucas92

2
El consumo de energía dinámico es proporcional al cuadrado de la frecuencia de reloj en ckts síncronos. Entonces el calor también debería aumentar.
Mitu Raj

1
@MITURAJ, el consumo dinámico de energía es proporcional a la velocidad del reloj. No es cuadrado de la velocidad del reloj. Proporcional al cuadrado de voltaje.
mkeith

Respuestas:


14

Además de la velocidad del reloj, tenga en cuenta que en una CPU "grande" real (una que tiene cachés, un MMU, TLB, ejecución canalizada, SIMD, etc.) otro factor importante de cuánto calor se genera sería qué tan bien utiliza el flujo de instrucciones Los recursos de CPU disponibles. Si ejecuta un programa que requiere mucha memoria, la mayoría de las veces la CPU se estaría muriendo de hambre de datos, sin hacer nada, por lo que el calor producido sería relativamente bajo. Un código puramente de cálculo con bucles estrechos se calienta más. Se podría generar aún más calor con un código optimizado que no incurre en predicciones erróneas de las ramas, utiliza las unidades SIMD de forma intensiva, hace un uso óptimo de los cachés, etc.

Hay programas diseñados específicamente para operar la CPU en este modo, enfatizándolo tanto como sea posible, Prime95 es un ejemplo destacado para la PC.

De hecho, si una PC ya ejecuta Prime95 en todos los núcleos de CPU disponibles, y al mismo tiempo inicia otra aplicación intensiva de CPU (por ejemplo, renderizado 3D), notará que la CPU se enfría . Esto se debe a que tiene que compartir el código Prime95 muy pesado (que "ilumina todos los transistores" ) con el código de representación de demanda relativamente más baja (que probablemente tiene muchos errores de caché y errores de ramificación, lo que permite que la CPU se detenga por un rato y enfriar).

Otra cosa que debe tener en cuenta es que, por lo general, cada CPU tiene una tabla con velocidades de reloj permitidas y voltajes de núcleo asociados con cada velocidad. Los relojes más bajos también se combinan con un voltaje más bajo, ya que el fabricante ha determinado que la CPU será estable a ese voltaje. El consumo de energía varía aproximadamente linealmente con la velocidad del reloj, pero cuadráticamente con el voltaje.


1
La potencia varía cuadráticamente frente al voltaje para una velocidad de reloj dada . Por lo general, utiliza el voltaje para variar linealmente la velocidad del reloj. Como resultado, la potencia es cúbica frente a la tensión, mientras que la velocidad del reloj es lineal. Por lo tanto, el consumo de energía es cuadrático frente a la velocidad del reloj.
MooseBoys

SIMD puede generar tanto calor que algunas CPU se sobrecalientan cuando se usa AVX512 de manera extensiva. +1 para señalar que el aumento de voltaje también es relevante.
bosque

1
@MooseBoys, cierto, muy buen punto. Pero vale la pena señalar que, en realidad, si una CPU de velocidad completa tiene Vcore = 1.2V, reducir a la mitad la velocidad del reloj no permitiría Vcore = 0.6, simplemente no funcionará :)
anrieff

@anreiff Podría estar recordando mal, pero creo que algunos chips modernos de Intel bajarán a 0.8V más o menos mientras estén inactivos. Sin embargo, solo están a ~ 700MHz en ese punto, y el caché probablemente esté apagado.
mbrig

Lo que pasa es que no llegan a cerca de 0 V, como cabría esperar si la velocidad del reloj de la CPU y Vcore fueran proporcionales. Es más como 3.5GHz@1.2V y 0.7GHz@0.8V. La reducción en la velocidad tiene más efecto sobre la disipación de potencia que el voltaje, incluso si el primero lo afecta "solo" linealmente.
anrieff

5

La potencia consumida es proporcional a la velocidad de transición del reloj y las pérdidas de conducción al cambiar esas puertas de condensador efectivas. Sin embargo, el aumento de temperatura es proporcional a la potencia consumida por la resistencia térmica efectiva, en grados C por vatio y, por lo tanto, es independiente de la energía, o más bien puede funcionar más frío o más caliente dependiendo del consumo de energía y no distribuir esa energía durante un período de tiempo más largo. Puede haber una fórmula que muestra que el aumento de temperatura con la velocidad del reloj es una potencia fraccional de potencia mayor que uno.


4
  • La potencia será menor a la frecuencia de operación más baja.

  • Con el mismo voltaje central, la energía total sería mayor a la frecuencia de reloj más baja.

  • Pero si el voltaje del núcleo se ajusta con frecuencia, entonces la energía total puede ser menor.

  • Para los algoritmos que pasan la mayor parte de su tiempo esperando operaciones de E / S, el tiempo de ejecución será aproximadamente constante independientemente de la frecuencia del reloj central. Por lo tanto, la energía total requerida para el cálculo aumentará proporcionalmente a la frecuencia del reloj.


    El consumo de energía de una CPU consta de dos partes.

1) Consumo de corriente estática (I_static). Para alguna tensión y temperatura de suministro en particular, este consumo de corriente es constante independientemente de lo que esté haciendo la CPU.

Una CPU hecha con tecnología CMOS consta de miles o millones de transistores MOSFET. El consumo de corriente estática se debe principalmente a la corriente combinada de fuga de estado apagado de millones de transistores MOSFET.

  • El consumo de corriente estática generalmente aumenta a medida que aumenta el voltaje de suministro.

  • El consumo de corriente estática generalmente aumenta a medida que aumenta la temperatura de la CPU.

  • El consumo de corriente estática es para muchos dispositivos mucho más pequeño que el consumo de corriente dinámico.

2) Consumo dinámico de corriente. Para un procesador construido usando procesos CMOS, la corriente dinámica ocurre cuando los transistores cambian entre estados de encendido / apagado.

  • Para una tensión de alimentación especificada, el consumo de corriente dinámico suele ser directamente proporcional a la frecuencia.

  • El consumo de corriente dinámico aumenta a medida que aumenta el voltaje de suministro.

La razon es la siguiente. Cada transistor MOSFET en la CPU tiene una cierta cantidad de capacitancia asociada. Cada vez que cambia un MOSFET; Se necesita una carga Q = C * V para cargar / descargar esa capacitancia.

El consumo de corriente dinámico para cada transistor es I_dynamic = C * V * f.

Independientemente de la frecuencia con la que se ejecutan las instrucciones, un conjunto particular de operaciones en una CPU en particular (suponiendo un comportamiento idéntico del caché y la memoria) consume una cierta cantidad de carga total (Q_program) debido al consumo dinámico de corriente, independientemente de la frecuencia que las instrucciones se ejecutan en.

Pero si las instrucciones se ejecutan más lentamente, la carga total debido al consumo de corriente estática será mayor porque ha pasado más tiempo.

Matemáticamente uno podría escribir ...

W = (I_dynamic + I_static) * V_supply

E = W * tiempo = Q_programa * V_supply + I_static * V_supply * time

Podemos ver que a medida que la frecuencia del reloj se aproxima a 0, la potencia se acercará a un valor fijo, pero la energía requerida para calcular el programa se aproxima al infinito.

Entonces, si (basado en las capacitancias de los transistores de la CPU) Q_program se fija para un voltaje de suministro y un conjunto de operaciones en particular, ¿cómo ahorran energía las CPU modernas al reducir su frecuencia de reloj? La respuesta es que la mayoría de las CPU modernas incluyen un regulador de voltaje central ajustable (o en un chip complementario). Cuando bajan su frecuencia de reloj, también pueden bajar su voltaje central. Q_program (y E_program) luego disminuye proporcionalmente con el voltaje de alimentación.

Tenga en cuenta que la CPU no puede usar el voltaje más bajo en las frecuencias más altas porque a voltajes más bajos aumenta el tiempo de conmutación del transistor.

La potencia es proporcional al voltaje (al cuadrado) y al consumo de corriente. Entonces, si el voltaje se cae simultáneamente con la frecuencia, entonces la potencia cae con el cubo de la frecuencia.


1

Los transistores usan energía, que se desperdicia como calor. Hay dos mecanismos, energía estática y dinámica. La energía estática es constante y la energía dinámica (conmutación) se produce cada vez que cambia de estado (0-> 1 o 1-> 0). La energía dinámica (conmutación) suele ser la mayor fuente de calor que la estática. El cálculo que desea realizar tomará la misma cantidad de ciclos de reloj y hará que la misma cantidad de bits de transistor se invierta independientemente de la velocidad del reloj. Por lo tanto, el calor dinámico es el mismo para ambas situaciones. El calor estático es ... estático. En resumen, suponiendo que la CPU SOLO esté haciendo este cálculo 1, el consumo de energía / calor es exactamente el mismo cuando se promedia durante un período de tiempo determinado.


Estás al borde de la verdad, pero lo dejaré pasar. El nivel de energía para CMOS sube casi en una línea lineal con frecuencia de operación, pero duplica el voltaje y la energía se cuadruplica. Ecuación desagradable de I2R, sin incluir la velocidad.
Sparky256

El OP preguntó únicamente sobre la velocidad del reloj, sin mencionar el voltaje reducido.
TopCat

Una respuesta anterior mencionó la penalización por voltajes de núcleo. No implicaba que necesitaras responder a ese problema. Solo estaba haciendo un comentario, en un cuadro de comentarios.
Sparky256

La pregunta era sobre el CALOR (medido en julios), no la potencia o la temperatura. El calor es una forma de energía. Excepto por la pequeña cantidad de energía recibida de las fuentes de entrada y entregada a las cargas de salida, toda la energía consumida en el dispositivo se convertirá en calor y eventualmente se disipará. En la lógica CMOS, el consumo de energía genera calor cuando cambia el estado de la máquina, normalmente una vez por ciclo de reloj durante ese momento en el que las puertas están a medio camino entre 0 y 1. Por lo tanto, el CALOR para una tarea dada debe ser independiente de la velocidad del reloj y totalmente dependiente en el número de ciclos de reloj.
richard1941

1

En el escenario que describió, la energía requerida para el cálculo no depende de la velocidad del reloj. Pero el calor puede ser un término "blando". Digamos que el cálculo toma 1 Joule. Si lo haces en 1 segundo, eso es 1 Joule / seg = 1 vatio. Pero si toma 2 segundos, eso es 1 Joule / 2sec = 0.5 Joule / sec = 0.5 Watt.

El procesador definitivamente alcanzará una temperatura más alta si el cálculo se realiza más rápido, porque la energía se libera más rápido. No creo que tenga mucho sentido decir más que eso.

Oh, excepto que los números que te he dado no están destinados a ser realistas. Es solo el concepto.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.