Resumen
Ciencias económicas. Es más barato y fácil diseñar una CPU que tenga más núcleos que una mayor velocidad de reloj, porque:
Aumento significativo en el uso de energía. El consumo de energía de la CPU aumenta rápidamente a medida que aumenta la velocidad del reloj: puede duplicar el número de núcleos que funcionan a una velocidad menor en el espacio térmico que se necesita para aumentar la velocidad del reloj en un 25%. Cuádruple por 50%.
Hay otras formas de aumentar la velocidad de procesamiento secuencial, y los fabricantes de CPU hacen un buen uso de ellas.
Voy a aprovechar en gran medida las excelentes respuestas a esta pregunta en uno de nuestros sitios de SE hermana. ¡Así que ve a votarlos!
Limitaciones de velocidad de reloj
Existen algunas limitaciones físicas conocidas para la velocidad del reloj:
Tiempo de transmisión
El tiempo que tarda una señal eléctrica en atravesar un circuito está limitado por la velocidad de la luz. Este es un límite difícil, y no se conoce una forma de evitarlo 1 . En gigahertz-relojes, nos estamos acercando a este límite.
Sin embargo, todavía no estamos allí. 1 GHz significa un nanosegundo por marca de reloj. En ese tiempo, la luz puede viajar 30 cm. A 10 GHz, la luz puede viajar 3 cm. Un solo núcleo de CPU tiene aproximadamente 5 mm de ancho, por lo que nos encontraremos con estos problemas en algún lugar más allá de 10 GHz. 2
Retraso de conmutación
No es suficiente considerar simplemente el tiempo que tarda una señal en viajar de un extremo a otro. ¡También debemos considerar el tiempo que le toma a una puerta lógica dentro de la CPU cambiar de un estado a otro! A medida que aumentamos la velocidad del reloj, esto puede convertirse en un problema.
Desafortunadamente, no estoy seguro acerca de los detalles, y no puedo proporcionar ningún número.
Aparentemente, bombear más energía puede acelerar la conmutación, pero esto conduce a problemas de consumo de energía y disipación de calor. Además, más potencia significa que necesita conductos más voluminosos capaces de manejarlo sin daños.
Disipación de calor / consumo de energía
Este es el grande. Citando la respuesta de fuzzyhair2 :
Los procesadores recientes se fabrican con tecnología CMOS. Cada vez que hay un ciclo de reloj, la potencia se disipa. Por lo tanto, mayores velocidades de procesador significan más disipación de calor.
Hay algunas mediciones encantadoras en este hilo del foro de AnandTech , e incluso derivaron una fórmula para el consumo de energía (que va de la mano con el calor generado):
Crédito a Idontcare
Podemos visualizar esto en el siguiente gráfico:
Crédito a Idontcare
Como puede ver, el consumo de energía (y el calor generado) aumenta extremadamente rápido a medida que la velocidad del reloj aumenta más allá de cierto punto. Esto hace que sea poco práctico aumentar sin límites la velocidad del reloj.
La razón del rápido aumento en el uso de energía probablemente esté relacionada con el retraso de conmutación: no es suficiente simplemente aumentar la potencia proporcionalmente a la velocidad del reloj; el voltaje también debe aumentarse para mantener la estabilidad en relojes más altos. Esto puede no ser completamente correcto; siéntase libre de señalar las correcciones en un comentario o editar esta respuesta.
¿Más núcleos?
Entonces, ¿por qué más núcleos? Bueno, no puedo responder eso definitivamente. Tendría que preguntarle a la gente de Intel y AMD. Pero puede ver más arriba que, con las CPU modernas, en algún momento resulta poco práctico aumentar la velocidad del reloj.
Sí, el multinúcleo también aumenta la potencia requerida y la disipación de calor. Pero evita claramente el tiempo de transmisión y los problemas de retraso de conmutación. Y, como puede ver en el gráfico, puede duplicar fácilmente el número de núcleos en una CPU moderna con la misma sobrecarga térmica que un aumento del 25% en la velocidad del reloj.
Algunas personas lo han hecho: el récord mundial actual de overclocking es apenas inferior a 9 GHz. Pero es un desafío de ingeniería importante hacerlo mientras se mantiene el consumo de energía dentro de límites aceptables. Los diseñadores en algún momento decidieron que agregar más núcleos para realizar más trabajo en paralelo proporcionaría un impulso más efectivo al rendimiento en la mayoría de los casos.
Ahí es donde entra la economía: probablemente era más barato (menos tiempo de diseño, menos complicado de fabricar) tomar la ruta multinúcleo. Y es fácil de comercializar: ¿a quién no le encanta el nuevo chip octa-core ? (Por supuesto, sabemos que el multinúcleo es bastante inútil cuando el software no lo utiliza ...)
No es una desventaja en varios núcleos: se necesita más espacio físico para poner el núcleo extra. Sin embargo, los tamaños de proceso de la CPU se reducen constantemente, por lo que hay mucho espacio para colocar dos copias de un diseño anterior: la verdadera compensación no es poder crear núcleos individuales más grandes y complejos. Por otra parte, aumentar la complejidad del núcleo es algo malo desde el punto de vista del diseño: más complejidad = más errores / errores y errores de fabricación. Parece que hemos encontrado un medio feliz con núcleos eficientes que son lo suficientemente simples como para no ocupar demasiado espacio.
Ya hemos alcanzado un límite con la cantidad de núcleos que podemos colocar en un solo dado en los tamaños de proceso actuales. Podríamos alcanzar un límite de hasta qué punto podemos reducir las cosas pronto. ¿Qué es lo siguiente? ¿Necesitamos más? Eso es difícil de responder, desafortunadamente. ¿Alguien aquí es clarividente?
Otras formas de mejorar el rendimiento.
Entonces, no podemos aumentar la velocidad del reloj. Y más núcleos tienen una desventaja adicional: es decir, solo ayudan cuando el software que se ejecuta en ellos puede hacer uso de ellos.
Entonces, ¿qué más podemos hacer? ¿Cómo son las CPU modernas mucho más rápidas que las antiguas a la misma velocidad de reloj?
La velocidad del reloj es realmente solo una aproximación muy aproximada del funcionamiento interno de una CPU. No todos los componentes de una CPU funcionan a esa velocidad; algunos pueden funcionar una vez cada dos tics, etc.
Lo que es más significativo es la cantidad de instrucciones que puede ejecutar por unidad de tiempo. Esta es una medida mucho mejor de cuánto puede lograr un solo núcleo de CPU. Algunas instrucciones; algunos tomarán un ciclo de reloj, algunos tomarán tres. La división, por ejemplo, es considerablemente más lenta que la suma.
Entonces, podríamos hacer que una CPU funcione mejor al aumentar el número de instrucciones que puede ejecutar por segundo. ¿Cómo? Bueno, podría hacer que una instrucción sea más eficiente; tal vez la división ahora solo toma dos ciclos. Luego hay instrucciones de canalización . Al dividir cada instrucción en varias etapas, es posible ejecutar instrucciones "en paralelo", pero cada instrucción aún tiene un orden secuencial bien definido, correspondiente a las instrucciones anteriores y posteriores, por lo que no requiere soporte de software como multinúcleo hace.
Hay otra forma: instrucciones más especializadas. Hemos visto cosas como SSE, que proporcionan instrucciones para procesar grandes cantidades de datos a la vez. Hay nuevos conjuntos de instrucciones que se introducen constantemente con objetivos similares. Estos, nuevamente, requieren soporte de software y aumentan la complejidad del hardware, pero proporcionan un buen aumento de rendimiento. Recientemente, hubo AES-NI, que proporciona cifrado y descifrado AES acelerado por hardware, mucho más rápido que un montón de aritmética implementada en software.
1 No sin profundizar en la física cuántica teórica, de todos modos.
2 En realidad, podría ser menor, ya que la propagación del campo eléctrico no es tan rápida como la velocidad de la luz en el vacío. Además, eso es solo para la distancia en línea recta: es probable que haya al menos un camino que sea considerablemente más largo que una línea recta.