Si alguna vez ha hecho muchas compras comparativas para una nueva CPU, es posible que haya notado que todos los núcleos parecen tener la velocidad en lugar de una combinación de diferentes. ¿Porqué es eso? La publicación de preguntas y respuestas del superusuario de hoy tiene la respuesta a la pregunta de un lector curioso.
La sesión de preguntas y respuestas de hoy nos llega por cortesía de SuperUser, una subdivisión de Stack Exchange, una agrupación de sitios web de preguntas y respuestas impulsada por la comunidad.
La pregunta
El lector de superusuario Jamie quiere saber por qué los núcleos de la CPU tienen la misma velocidad en lugar de diferentes:
En general, si va a comprar una computadora nueva, debe determinar qué procesador comprar en función de la carga de trabajo esperada para la computadora. El rendimiento en los videojuegos tiende a estar determinado por la velocidad de un solo núcleo, mientras que las aplicaciones como la edición de video están determinadas por el número de núcleos. En términos de lo que está disponible en el mercado, todas las CPU parecen tener aproximadamente la misma velocidad y las principales diferencias son más subprocesos o más núcleos.
Por ejemplo:
- Intel Core i5-7600K, frecuencia base 3,80 GHz, 4 núcleos, 4 subprocesos
- Intel Core i7-7700K, frecuencia base 4.20 GHz, 4 núcleos, 8 subprocesos
- AMD Ryzen 5 1600X, frecuencia base 3,60 GHz, 6 núcleos, 12 subprocesos
- AMD Ryzen 7 1800X, frecuencia base 3,60 GHz, 8 núcleos, 16 hilos
¿Por qué vemos este patrón de núcleos crecientes, pero todos los núcleos tienen la misma velocidad de reloj? ¿Por qué no hay variantes con diferentes velocidades de reloj? Por ejemplo, dos núcleos "grandes" y muchos núcleos pequeños.
En lugar de, digamos, cuatro núcleos a 4.0 GHz (es decir, 4 × 4 GHz, 16 GHz máximo), ¿qué tal una CPU con dos núcleos que funcionan a 4.0 GHz y cuatro núcleos que funcionan a 2.0 GHz (es decir, 2 × 4.0 GHz + 4 × 2.0? GHz, 16 GHz máximo)? ¿La segunda opción sería igualmente buena en cargas de trabajo de un solo subproceso, pero potencialmente mejor en cargas de trabajo de subprocesos múltiples?
Hago esto como una pregunta general y no específicamente con respecto a las CPU enumeradas anteriormente o sobre cualquier carga de trabajo específica. Solo tengo curiosidad por saber por qué el patrón es lo que es.
¿Por qué los núcleos de CPU tienen todos la misma velocidad en lugar de diferentes?
La respuesta
El colaborador de superusuario bwDraco tiene la respuesta para nosotros:
Esto se conoce como multiprocesamiento heterogéneo (HMP) y es ampliamente adoptado por los dispositivos móviles. En dispositivos basados en ARM que implementan grande pequeño , el procesador contiene núcleos con diferentes perfiles de rendimiento y potencia, es decir, algunos núcleos funcionan rápido pero consumen mucha energía (arquitectura más rápida y / o relojes más altos) mientras que otros son energéticamente eficientes pero lentos (arquitectura más lenta y / o relojes más bajos). Esto es útil porque el uso de energía tiende a aumentar de manera desproporcionada a medida que aumenta el rendimiento una vez que pasa de cierto punto. La idea aquí es obtener rendimiento cuando lo necesita y duración de la batería cuando no lo necesita.
En las plataformas de escritorio, el consumo de energía es un problema mucho menor, por lo que no es realmente necesario. La mayoría de las aplicaciones esperan que cada núcleo tenga características de rendimiento similares, y los procesos de programación para los sistemas HMP son mucho más complejos que la programación para los sistemas tradicionales de multiprocesamiento simétrico (SMP) (técnicamente, Windows 10 tiene soporte para HMP, pero está diseñado principalmente para dispositivos móviles). dispositivos que usan ARM big.LITTLE).
Además, la mayoría de los procesadores de escritorio y portátiles de hoy en día no están limitados térmica o eléctricamente hasta el punto en que algunos núcleos necesitan correr más rápido que otros, incluso para ráfagas cortas. Básicamente hemos chocado contra una pared qué tan rápido podemos hacer núcleos individuales , por lo que reemplazar algunos núcleos por otros más lentos no permitirá que los núcleos restantes se ejecuten más rápido.
Si bien hay algunos procesadores de escritorio que tienen uno o dos núcleos capaces de funcionar más rápido que los demás, esta capacidad está actualmente limitada a ciertos procesadores Intel de muy alta gama (conocidos como Turbo Boost Max Technology 3.0) y solo implica una ligera ganancia en rendimiento para aquellos núcleos que pueden ejecutarse más rápido.
Si bien es posible diseñar un procesador x86 tradicional con núcleos grandes y rápidos y núcleos más pequeños y lentos para optimizar para cargas de trabajo con muchos subprocesos, esto agregaría una complejidad considerable al diseño del procesador y es poco probable que las aplicaciones lo admitan adecuadamente.
Tome un procesador hipotético con dos rápidos Kaby Lake (7.a generación) núcleos y ocho lentos Goldmont (Atom) núcleos. Tendría un total de 10 núcleos, y las cargas de trabajo con muchos subprocesos optimizadas para este tipo de procesador pueden ver una ganancia en rendimiento y eficiencia en comparación con un procesador Kaby Lake de cuatro núcleos normal. Sin embargo, los diferentes tipos de núcleos tienen niveles de rendimiento tremendamente diferentes, y los núcleos lentos ni siquiera admiten algunas de las instrucciones que admiten los núcleos rápidos, como AVX (ARM evita este problema al requerir que los núcleos grande y PEQUEÑO admitan las mismas instrucciones).
Una vez más, la mayoría de las aplicaciones de subprocesos múltiples basadas en Windows asumen que cada núcleo tiene el mismo o casi el mismo nivel de rendimiento y puede ejecutar las mismas instrucciones, por lo que es probable que este tipo de asimetría dé como resultado un rendimiento menos que ideal, tal vez incluso se bloquea si utiliza instrucciones que no son compatibles con los núcleos más lentos. Si bien Intel podría modificar los núcleos lentos para agregar soporte de instrucción avanzada para que todos los núcleos puedan ejecutar todas las instrucciones, esto no resolvería los problemas con el soporte de software para procesadores heterogéneos.
Un enfoque diferente para el diseño de aplicaciones, más cercano a lo que probablemente esté pensando en su pregunta, usaría la GPU para acelerar porciones de aplicaciones altamente paralelas. Esto se puede hacer usando API como OpenCL y Milagros . En cuanto a una solución de un solo chip, AMD promueve el soporte de hardware para la aceleración de GPU en sus APU, que combina una CPU tradicional y una GPU integrada de alto rendimiento en el mismo chip, como Arquitectura de sistema heterogénea , aunque esto no ha tenido mucha aceptación en la industria fuera de algunas aplicaciones especializadas.
¿Tiene algo que agregar a la explicación? Habla en los comentarios. ¿Quieres leer más respuestas de otros usuarios de Stack Exchange expertos en tecnología? Consulte el hilo de discusión completo aquí .
Credito de imagen: Mirko Waltermann (Flickr)