En 2014, escuché muchos lenguajes de programación promocionados por sus características de concurrencia. Se dice que la concurrencia es crucial para las ganancias de rendimiento.
Al hacer esta declaración, muchas personas señalan un artículo de 2005 llamado El almuerzo gratis ha terminado: un giro fundamental hacia la concurrencia en el software . El argumento básico es que cada vez es más difícil aumentar la velocidad de reloj de los procesadores, pero aún podemos poner más núcleos en un chip, y que para obtener ganancias de rendimiento, será necesario escribir el software para aprovechar múltiples núcleos.
Algunas citas clave:
Estamos acostumbrados a ver que las CPU de 500MHz dan paso a las CPU de 1GHz que dan paso a las CPU de 2GHz, y así sucesivamente. Hoy estamos en el rango de 3GHz en computadoras convencionales.
La pregunta clave es: ¿cuándo terminará? Después de todo, la Ley de Moore predice un crecimiento exponencial, y claramente el crecimiento exponencial no puede continuar para siempre antes de que alcancemos límites físicos duros; la luz no se hace más rápida. El crecimiento eventualmente debe ralentizarse e incluso terminar.
... Se ha vuelto cada vez más difícil explotar velocidades de reloj más altas debido a no solo uno sino varios problemas físicos, en particular el calor (demasiado y demasiado difícil de disipar), el consumo de energía (demasiado alto) y los problemas de fuga de corriente.
... El futuro de Intel y de la mayoría de los proveedores de procesadores se encuentra en otra parte, ya que las compañías de chips persiguen agresivamente las mismas nuevas direcciones multinúcleo.
... Multinúcleo se trata de ejecutar dos o más CPU reales en un chip.
Las predicciones de este artículo parecen haberse mantenido, pero no entiendo por qué. Solo tengo ideas muy vagas sobre cómo funciona el hardware.
Mi visión simplificada es "cada vez es más difícil agrupar más potencia de procesamiento en el mismo espacio" (debido a problemas con el calor, el consumo de energía, etc.). Esperaría que la conclusión sea "por lo tanto, tendremos que tener computadoras más grandes o ejecutar nuestros programas en varias computadoras". (Y de hecho, la computación en la nube distribuida es algo de lo que estamos escuchando más).
Pero parte de la solución parece ser arquitecturas multinúcleo. A menos que las computadoras crezcan en tamaño (que no lo han hecho), esta parece ser otra forma de decir "empacar más poder de procesamiento en el mismo espacio".
¿Por qué "agregar más núcleos" no tiene las mismas limitaciones físicas que "hacer que la CPU sea más rápida"?
Por favor explique en los términos más simples que pueda. :)
fuente
Respuestas:
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 :
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.
fuente
exponential
. Este es un uso perfectamente válido de la palabra, y sería tangencial al punto de esta respuesta quedar empantanado en detalles matemáticos. Si realmente quiere intentar "corregirlo", no dude en sugerir una edición. No dependerá de mí si se acepta o no, siempre y cuando no cambies significativamente el significado.La física es física. No podemos seguir empacando más transistores en espacios cada vez más pequeños para siempre. En algún momento se vuelve tan pequeño que lidias con basura cuántica extraña. En algún momento no podemos empacar el doble de transistores en un año de lo que solíamos hacerlo (de eso se trata la ley de Moore).
Las velocidades de reloj crudas no significan nada. Mi antiguo Pentium M era aproximadamente la mitad de la velocidad de reloj de una CPU de escritorio contemporánea (y, sin embargo, en muchos aspectos más rápido ), y los sistemas modernos apenas se están acercando a las velocidades de los sistemas hace 10 años (y son claramente más rápidos). Básicamente, 'solo' aumentar la velocidad del reloj no proporciona ganancias reales de rendimiento en muchos casos. Puede ayudar en algunas operaciones de subproceso único, pero es mejor gastar el presupuesto de diseño en una mejor eficiencia en términos de todo lo demás.
Múltiples núcleos le permiten hacer dos o más cosas a la vez, por lo que no necesita esperar a que una cosa termine para la siguiente. En el corto plazo, simplemente puede insertar dos núcleos existentes en el mismo paquete (por ejemplo, con los Pentium D y su MCM, que era un diseño de transición) y tiene un sistema que es el doble de rápido. La mayoría de las implementaciones modernas comparten cosas como un controlador de memoria, por supuesto.
También puede construir de manera más inteligente de diferentes maneras. ARM hace Big-Little: tener 4 núcleos de baja potencia 'débiles' trabajando junto con 4 núcleos más potentes para que tengas lo mejor de ambos mundos. Intel le permite bajar el acelerador (para una mejor eficiencia energética) o overclockear núcleos específicos (para un mejor rendimiento de un solo hilo). Recuerdo que AMD hace algo con los módulos.
También puede mover cosas como controladores de memoria (para que tenga una latencia más baja) y funciones relacionadas con IO (la CPU moderna no tiene puente norte), así como video (que es más importante con las computadoras portátiles y el diseño AIW). Tiene más sentido hacer estas cosas que 'solo' seguir aumentando la velocidad del reloj.
En algún momento, 'más' núcleos pueden no funcionar, aunque las GPU tienen cientos de núcleos.
Los multinúcleos como tales permiten a las computadoras trabajar de manera más inteligente en todas estas formas.
fuente
wierd quantum crap
+ 1 por eso solo!Respuesta simple
La respuesta más simple a la pregunta.
en realidad se encuentra dentro de otra parte de su pregunta:
En esencia, múltiples núcleos es como tener múltiples "computadoras" en el mismo dispositivo.
Respuesta compleja
Un "núcleo" es la parte de la computadora que realmente procesa instrucciones (sumar, multiplicar, "e" ing, etc.). Un núcleo solo puede ejecutar una sola instrucción a la vez. Si desea que su computadora sea "más potente", hay dos cosas básicas que puede hacer:
Las limitaciones físicas del n. ° 1 son principalmente la necesidad de descargar el calor causado por el procesamiento y la velocidad de un electrón en el circuito. Una vez que separe algunos de esos transistores en un núcleo separado, aliviará en gran medida el problema del calor.
Hay una limitación importante para el n. ° 2: debe poder dividir su problema en múltiples problemas independientes y luego combinar la respuesta. En una computadora personal moderna, esto no es realmente un problema, ya que hay muchos problemas independientes que compiten por tiempo de cálculo con el núcleo (s) de todos modos. Pero al hacer problemas computacionales intensivos, los núcleos múltiples solo ayudan realmente si el problema es susceptible de concurrencia.
fuente
Enfrentan las mismas limitaciones físicas, pero cambiar al diseño multinúcleo nos da un respiro antes de que peguemos en algunos de ellos. Al mismo tiempo, surgen otros problemas causados por esas limitaciones, pero son más fáciles de superar.
Hecho 1: El consumo de energía y el calor emitido crecen más rápido que la potencia computacional. Empujar una CPU de 1 GHz a 2 GHZ aumentará el consumo de energía de 20 W a 80 W, lo mismo con calor disipado. (Acabo de inventar estos números, pero así es como funciona)
Hecho 2: Comprar una segunda CPU y ejecutar ambas a 1 GHz duplicaría su potencia de cálculo. Dos CPU que funcionan a 1 GHz podrían procesar la misma cantidad de datos que una CPU de 2 GHz, pero cada una consumiría solo 20 W de energía, es decir, 40 W en total.
Beneficio: Duplicar el número de CPU en lugar de la frecuencia de reloj nos ahorra algo de energía y ya no estamos tan cerca de la "barrera de frecuencia" como antes.
Problema: debe dividir el trabajo entre dos CPU y combinar los resultados más adelante.
Si puede resolver este problema en un tiempo aceptable y utilizando menos energía de la que acaba de ahorrar, entonces se habrá beneficiado gracias al uso de múltiples CPU.
Ahora solo tiene que fusionar dos CPU en una CPU de doble núcleo y ya está en casa. Esto es beneficioso porque los núcleos pueden compartir algunas partes de la CPU, por ejemplo, caché ( respuesta relacionada ).
fuente
Larga historia corta: acelerar los núcleos individuales ha alcanzado sus límites, por lo que seguimos reduciéndolos y agregando más de ellos, hasta que esto alcance sus límites o podamos cambiar a mejores materiales (o lograr un avance fundamental que derroque la tecnología establecida, algo así como computación cuántica de tamaño real, realmente trabajando).
Creo que este problema es multidimensional y tomará algo de escritura para pintar la imagen más completa:
Puede haber muchos más. Una CPU multipropósito está tratando de encontrar una solución para mezclar todos estos factores (y más) en un chip de producción masiva que se adapte al 93% de los sujetos en el mercado. Como puede ver, el último punto es el más crucial, la percepción del cliente, que se deriva directamente de la forma en que el cliente usa la CPU.
Pregúntese cuál es su aplicación habitual? Tal vez: 25 pestañas de Firefox, cada una reproduce algunos anuncios en segundo plano, mientras escucha música, todo mientras espera su trabajo de construcción que comenzó hace unas 2 horas para terminar. Eso es mucho trabajo por hacer, y aún así quieres una experiencia fluida. ¡Pero su CPU puede manejar UNA tarea a la vez! En una sola cosa. Entonces, lo que haces es dividir las cosas y hacer una larga cola y cada uno recibe su parte y todos están felices. Excepto por ti, porque todas las cosas se vuelven lentas y no se suavizan en absoluto.
Así que aceleras tu CPU para realizar más operaciones en la misma cantidad de tiempo. Pero como dijiste: calor y consumo de energía. Y ahí es donde llegamos a la parte de la materia prima. El silicio se vuelve más conductor a medida que se calienta, lo que significa que fluye más corriente a través del material a medida que lo calienta. Los transistores tienen un mayor consumo de energía a medida que los cambia más rápido. También las frecuencias altas empeoran la diafonía entre cables cortos. Como puede ver, el enfoque de acelerar las cosas conducirá a un "colapso". Mientras no tengamos mejores materias primas que el silicio o transistores mucho mejores, estamos atrapados donde estamos con una velocidad de núcleo único.
Esto nos lleva de vuelta a donde empezamos. Hacer cosas, en paralelo. Agreguemos otro núcleo. Ahora podemos hacer dos cosas al mismo tiempo. Así que vamos a enfriar un poco las cosas y simplemente escribamos un software que pueda dividir su trabajo en dos núcleos menos potentes pero más funcionales. Este enfoque tiene dos problemas principales (además de que necesita tiempo para que el mundo del software se adapte a él): 1. Amplíe el chip o reduzca el núcleo individual. 2. Algunas tareas simplemente no se pueden dividir en dos partes que se ejecutan simultáneamente. Siga agregando núcleos siempre que pueda reducirlos, o agrande el chip y mantenga a raya el problema del calor. Ah, y no olvidemos al cliente. Si cambiamos nuestros casos de uso, las industrias tienen que adaptarse. Vea todas las cosas "nuevas" brillantes que el sector móvil ha creado.
¡Sí, esta estrategia alcanzará sus limitaciones! E Intel lo sabe, por eso dicen que el futuro está en otro lugar. Pero seguirán haciéndolo mientras sea barato, efectivo y factible.
Por último, pero no menos importante: la física. La mecánica cuántica limitará la reducción de viruta. La velocidad de la luz aún no es un límite, ya que los electrones no pueden viajar a la velocidad de la luz en el silicio, en realidad es mucho más lenta que eso. Además, es la velocidad de impulso la que pone el límite a la velocidad que ofrece un material. Así como el sonido viaja más rápido en el agua que en el aire, los impulsos eléctricos viajan más rápido, por ejemplo, en el grafeno que en el silicio. Esto lleva de vuelta a las materias primas. El grafeno es excelente en cuanto a sus propiedades eléctricas. Sería un material mucho mejor para construir CPU, desafortunadamente es muy difícil de producir en gran cantidad.
fuente
Digamos (como un ejemplo poco realista, pero que aún debe transmitir) que tienes una CPU que funciona a 100F. La forma en que generalmente funciona el multinúcleo es tomando la frecuencia de reloj de la CPU que está funcionando a 100F y bajando, bajando así un poco la velocidad. Debido a que ya no está funcionando tan caliente, pueden dejar caer un segundo, tercero o incluso cuarto junto a él sin afectar significativamente la temperatura general de la CPU y obtener los beneficios del multinúcleo. Obviamente, esto conlleva cierta sobrecarga, ya que los núcleos aún deben controlarse desde un lugar, por un núcleo. Cuantos más núcleos agregue, más gastos generales habrá. En cuanto a los núcleos individuales, cuanto más aumenta la velocidad en ellos, más calor generan. Obviamente, esto tiene limitaciones físicas (es decir, después de cierto punto, comienza a ser perjudicial para el rendimiento,
A medida que pasa el tiempo, han encontrado formas de disminuir el tamaño físico de las CPU, razón por la cual todavía no hemos encontrado el requisito de necesitar más espacio, sin embargo, por ejemplo, las CPU de 16 núcleos realmente no existen (en el tiempo de escritura) fuera del equipo de calidad de servidor debido a las limitaciones de tamaño físico, ya que las CPU de calidad de servidor son significativamente más grandes físicamente que las de calidad de consumidor estándar.
fuente
CPU = motor de automóvil: es más fácil hacer un automóvil más potente con 16 válvulas, es decir, un lamborghini, que un automóvil de altas rpm que tendría una válvula / cilindro gigante a 100 000 rpm.
Las razones son físicas y químicas, el silicio necesita ser reemplazado por un combustible de cohete computacional para cambiar el equilibrio entre el número de núcleos y la velocidad del núcleo.
fuente
Diría que la restricción principal en los límites de potencia computacional está relacionada principalmente con el límite de la velocidad con la que podemos mover el electrón a través de un circuito (
velocidad dederiva de electronesligeros). Hay muchos más factores como el que mencionaste.Agregar núcleos adicionales no haría que el procesador fuera más rápido, aunque le permitiría procesar más en la misma cantidad de tiempo.
La Ley de Moore es una lectura muy interesante e informativa. Esta cita en particular es relevante aquí:
fuente
Larga historia aún más corta:
Realmente no necesitamos CPU más rápidas. Fuera de unos pocos usos altamente especializados *, la CPU no ha sido el cuello de botella durante años: todos los bits periféricos como la memoria, el almacenamiento y la red generalmente hacen que la CPU espere millones de ciclos de reloj durante los cuales puede hacer otras cosas. Un segundo núcleo puede hacer más "otras cosas", produciendo así una percepción de mayor rendimiento para el usuario.
Muchos dispositivos móviles, computadoras portátiles, etc. acelerarán la CPU para una mejor duración de la batería y temperaturas más frías. No hay muchos incentivos para desarrollar un núcleo ARM de 3.5GHz si su cliente principal lo ejecuta a 1.3GHz.
fuente
Respuesta corta y simple:
¿Por qué no pasar de 1 camión que transporta mercancías a 100 camiones que transportan 100 veces más, enfrenta las mismas limitaciones físicas que pasar de 1 camión a 100 mph a 1 camión a 10,000 mph?
Responda esa pregunta, y su pregunta también será respondida. El concepto es más o menos el mismo.
fuente
Creo que otro factor es la temperatura. Si aumenta la frecuencia del reloj, la temperatura central aumenta. Si agrega más núcleos, a pesar de que el consumo de energía aumenta, esto se distribuye entre los núcleos, por lo que la temperatura se mantiene igual (como si agrega dos líquidos calientes, a la misma temperatura, entre sí, la temperatura se mantiene igual) )
Otra razón es que aumentar la frecuencia del reloj tiende a aumentar el consumo de energía en un cuadrado del factor que aumenta la frecuencia (dependiendo de las otras barreras que esté golpeando en un punto dado). Por lo tanto, aumentar la frecuencia del reloj aumenta el consumo de energía en un cuadrado, mientras que agregar más núcleos solo lo aumenta linealmente.
fuente
La respuesta a por qué no "agregar más núcleos" enfrenta las mismas limitaciones físicas que "hacer que la CPU sea más rápida" es que un sistema multinúcleo enfrenta exactamente las mismas limitaciones que una CPU de un solo núcleo. Hemos llegado a un punto en el que realmente no tenemos una opción para hacer que un solo sistema central vaya más rápido, por lo que lo hicimos para que podamos hacer más cosas a la vez. Los desafíos de tamaño y coordinación son actualmente más fáciles de resolver que ir más rápido. La desventaja es que si una tarea no se puede dividir en pedazos, es posible que no terminemos yendo mucho más rápido que un solo sistema central.
fuente
No puede hacer que una CPU sea más rápida simplemente metiendo más puertas. Finalmente, las instrucciones deben ejecutarse, y cada instrucción requiere varias operaciones de "cambio". Existen límites físicos fundamentales (mecánica cuántica: el Principio de incertidumbre) que hacen que sea muy difícil aumentar la "velocidad de reloj" de una CPU más allá de la velocidad de los sistemas de gama alta actuales.
fuente