¿Por qué tenemos CPU con todos los núcleos a las mismas velocidades y no combinaciones de diferentes velocidades?

79

En general, si está comprando una computadora nueva, determinará qué procesador comprar según cuál sea su carga de trabajo esperada. El rendimiento en los juegos 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 la cantidad de núcleos.

En términos de lo que está disponible en el mercado, todas las CPU parecen tener aproximadamente la misma velocidad, siendo las principales diferencias más hilos o más núcleos.

Por ejemplo:

  • Intel Core i5-7600K, frecuencia base 3,80 GHz, 4 núcleos, 4 hilos
  • Intel Core i7-7700K, frecuencia base 4,20 GHz, 4 núcleos, 8 hilos
  • AMD Ryzen 5 1600X, frecuencia base 3.60 GHz, 6 núcleos, 12 hilos
  • AMD Ryzen 7 1800X, frecuencia base 3.60 GHz, 8 núcleos, 16 hilos

Entonces, ¿por qué vemos este patrón de núcleos crecientes con todos los núcleos que tienen la misma velocidad de reloj?

¿Por qué no tenemos variantes con diferentes velocidades de reloj? Por ejemplo, dos núcleos 'grandes' y muchos núcleos pequeños.

Por ejemplo, en lugar de, por ejemplo, cuatro núcleos a 4.0 GHz (es decir, 4x4 GHz ~ 16 GHz máximo), ¿qué pasa con una CPU con dos núcleos funcionando a 4.0 GHz y digamos cuatro núcleos funcionando a 2 GHz (es decir, 2x4.0 GHz + 4x2.0 GHz ~ 16 GHz máximo). ¿No sería la segunda opción igualmente buena en cargas de trabajo de un solo subproceso, pero potencialmente mejor en cargas de trabajo de subprocesos múltiples?

Hago esta pregunta como un punto general, no específicamente sobre las CPU que enumeré anteriormente, o sobre cualquier carga de trabajo específica. Tengo curiosidad por saber por qué el patrón es como es.

Jamie
fuente
15
Hay muchos teléfonos móviles con núcleos rápidos y lentos, y en casi todos los servidores multinúcleos modernos las velocidades del núcleo de la CPU son independientes del reloj dependiendo de la carga, algunos incluso apagan los núcleos cuando no se usan. En una computadora de uso general donde no se diseña para ahorrar energía, sin embargo, tener solo dos tipos de núcleos (CPU y GPU) solo hace que la plataforma sea más flexible.
eckes
55
Antes de que el planificador de subprocesos pudiera hacer una elección inteligente sobre qué núcleo usar, tendría que determinar si un proceso puede aprovechar múltiples núcleos. Hacerlo de manera confiable sería muy problemático y propenso a errores. Particularmente cuando esto puede cambiar dinámicamente según las necesidades de la aplicación. En muchos casos, el planificador tendría que hacer una elección subóptima cuando el mejor núcleo estaba en uso. Los núcleos idénticos simplifican las cosas, brindan la máxima flexibilidad y generalmente tienen el mejor rendimiento.
LMiller7
33
No se puede decir que las velocidades de reloj sean aditivas de la manera que usted describió. Tener cuatro núcleos funcionando a 4 Ghz no significa que tenga un "total" de 16 GHz, ni significa que estos 16 Ghz podrían dividirse en 8 procesadores que funcionan a 2 Ghz o 16 procesadores a 1 GHz.
Bob Jarvis
16
La premisa de la pregunta es simplemente incorrecta. Las CPU modernas son perfectamente capaces de ejecutar núcleos a diferentes velocidades
phuclv

Respuestas:

85

Esto se conoce como multiprocesamiento heterogéneo ( HMP ) y es ampliamente adoptado por los dispositivos móviles. En los dispositivos basados ​​en ARM que implementan big.LITTLE , el procesador contiene núcleos con diferentes perfiles de rendimiento y potencia, por ejemplo, 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 consumo de energía tiende a aumentar de manera desproporcionada a medida que aumenta el rendimiento una vez que pasa un cierto punto. La idea aquí es obtener rendimiento cuando lo necesite y duración de la batería cuando no lo necesite.

En las plataformas de escritorio, el consumo de energía es un problema mucho menor, por lo que esto 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 sistemas HMP son mucho más complejos que la programación para sistemas SMP tradicionales. (Windows 10 técnicamente tiene soporte para HMP, pero está destinado principalmente a dispositivos móviles 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 funcionar más rápido que otros, incluso para ráfagas cortas. Básicamente nos hemos topado con lo rápido que podemos hacer núcleos individuales , por lo que reemplazar algunos núcleos por otros más lentos no permitirá que los núcleos restantes funcionen 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 actualmente está limitada a ciertos procesadores Intel de muy alta gama (como Turbo Boost Max Technology 3.0) y solo implica un ligero aumento en el rendimiento para esos núcleos que pueden correr más rápido.


Si bien es ciertamente posible diseñar un procesador x86 tradicional con núcleos grandes, rápidos y núcleos más pequeños y lentos para optimizar las 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 núcleos rápidos Kaby Lake (núcleo de séptima generación) y ocho núcleos lentos Goldmont (Atom). Tendría un total de 10 núcleos, y las cargas de trabajo con muchos subprocesos optimizados para este tipo de procesador pueden ver una ganancia en rendimiento y eficiencia sobre un procesador Kaby Lake de cuatro núcleos normal . Sin embargo, los diferentes tipos de núcleos tienen niveles de rendimiento muy 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 LITTLE admitan las mismas instrucciones).

Una vez más, la mayoría de las aplicaciones multiproceso basadas en Windows suponen que cada núcleo tiene el mismo nivel de rendimiento o casi el mismo y puede ejecutar las mismas instrucciones, por lo que este tipo de asimetría probablemente resulte en un rendimiento menos que ideal, tal vez incluso se bloquee si utiliza instrucciones no compatibles con los núcleos lentos. Si bien Intel podría modificar los núcleos lentos para agregar soporte avanzado de instrucciones para que todos los núcleos puedan ejecutar todas las instrucciones, esto no resolvería 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 CUDA . En cuanto a una solución de un solo chip, AMD promueve el soporte de hardware para la aceleración de la GPU en sus APU, que combinan una CPU tradicional y una GPU integrada de alto rendimiento en el mismo chip, como Arquitectura de sistema heterogéneo , aunque esto no ha visto mucha aceptación de la industria fuera de algunas aplicaciones especializadas.

bwDraco
fuente
1
Windows ya tiene una noción de 'Aplicaciones', 'Procesos en segundo plano' y 'Procesos de Windows'. Entonces, ¿esto no se extiende a un nivel de hardware?
Jamie
2
@Jamie Un proceso de "fondo" obtiene segmentos de tiempo más pequeños y es más probable que se interrumpa. Windows 10, en cierta medida, tiene en cuenta los sistemas HMP, aunque todavía no hay mucha información sobre cómo.
Bob
Así que creo que después de la edición @bwDraco me ha respondido. Si hubiera un procesador 'mixto', podría admitir fácilmente el mismo conjunto de instrucciones si se construyera de esa manera, por lo que necesitaríamos algún tipo de programador para elegir el núcleo correcto. Estoy pensando que realmente las aplicaciones que se benefician de ir a muchos núcleos pequeños probablemente se beneficiarían aún más de ir a muchos y muchos núcleos realmente pequeños. Por lo tanto, tenemos aceleración de GPU.
Jamie
3
Tenga en cuenta que el caso de GPU no está intercambiando 2 núcleos grandes por 10 núcleos pequeños y lentos, sino más bien el equivalente (muy aproximado) de intercambiar 2 núcleos grandes por 1024 núcleos pequeños y lentos. Masivamente paralelo, no solo un poco más paralelo.
Yakk
44
Intel probablemente podría obtener un núcleo Goldmont para ejecutar instrucciones AVX2 sin mucho silicio adicional (lentamente, decodificando en pares de operaciones de 128b). Knight's Landing (Xeon Phi) tiene núcleos basados ​​en Silvermont con AVX512, por lo que no es imposible modificar Silvermont. Pero KNL agrega ejecución fuera de orden para instrucciones vectoriales, mientras que Silver / Goldmont normal solo hace OOO para enteros, por lo que probablemente desearían diseñarlo más cerca de Goldmont que KNL. De todos modos, los conjuntos insn no son un problema real. El soporte del sistema operativo y el pequeño beneficio son los verdaderos obstáculos para gastar el área de troquel en un núcleo de baja potencia.
Peter Cordes
68

Lo que está preguntando es por qué los sistemas actuales usan multiprocesamiento simétrico en lugar de multiprocesamiento asimétrico .

El multiprocesamiento asimétrico se usaba en los viejos tiempos, cuando una computadora era enorme y se encontraba en varias unidades.

Las CPU modernas se lanzan como una unidad, en un dado, donde es mucho más simple no mezclar CPU de diferentes tipos, ya que todas comparten el mismo bus y RAM.

También existe la restricción del reloj que rige los ciclos de la CPU y el acceso a la RAM. Esto será imposible al mezclar CPU de diferentes velocidades. Las computadoras experimentales sin reloj existían e incluso eran bastante rápidas, pero las complejidades del hardware moderno impusieron una arquitectura más simple.

Por ejemplo, los núcleos Sandy Bridge e Ivy Bridge no pueden funcionar a diferentes velocidades al mismo tiempo, ya que el bus de caché L3 funciona a la misma velocidad de reloj que los núcleos, por lo que para evitar problemas de sincronización, todos tienen que funcionar a esa velocidad o estar estacionado / apagado (enlace: Arquitectura Sandy Bridge de Intel expuesta ). (También verificado en los comentarios a continuación para Skylake).

[EDITAR] Algunas personas han confundido mi respuesta con decir que mezclar CPU es imposible. Para su beneficio, afirmo: la combinación de diferentes CPU no está más allá de la tecnología actual, pero no se hace, "por qué no" es la pregunta. Como se respondió anteriormente, esto sería técnicamente complicado, por lo tanto, más costoso y con muy poco o ningún beneficio financiero, por lo que no interesa a los fabricantes.

Aquí hay respuestas a algunos comentarios a continuación:

Turbo boost cambia las velocidades de la CPU para que puedan cambiarse

Turbo boost se realiza acelerando el reloj y cambiando algunos multiplicadores, que es exactamente lo que hace la gente cuando hace overclocking, excepto que el hardware lo hace por nosotros. El reloj se comparte entre los núcleos en la misma CPU, por lo que esto acelera de manera uniforme toda la CPU y todos sus núcleos.

Algunos teléfonos tienen más de una CPU de diferentes velocidades.

Tales teléfonos suelen tener una pila de firmware y software personalizada asociada con cada CPU, más como dos CPU separadas (o como CPU y GPU), y carecen de una vista única de la memoria del sistema. Esta complejidad es difícil de programar y, por lo tanto, el multiprocesamiento asimétrico se dejó en el ámbito móvil, ya que requiere un desarrollo de software cercano al hardware de bajo nivel, que es rechazado por el sistema operativo de escritorio de uso general. Esta es la razón por la que tales configuraciones no se encuentran en la PC (a excepción de CPU / GPU si ampliamos lo suficiente la definición).

Mi servidor con 2x Xeon E5-2670 v3 (12 núcleos con HT) actualmente tiene núcleos a 1.3 GHz, 1.5 GHz, 1.6 GHz, 2.2 GHz, 2.5 GHz, 2.7 GHz, 2.8 GHz, 2.9 GHz y muchas otras velocidades.

Un núcleo está activo o inactivo. Todos los núcleos que están activos al mismo tiempo funcionan con la misma frecuencia. Lo que está viendo es solo un artefacto de tiempo o promedio. También he notado que Windows no estaciona un núcleo durante mucho tiempo, sino que aparca / desarma por separado todos los núcleos mucho más rápido que la frecuencia de actualización de Resource Monitor, pero no sé la razón de este comportamiento que probablemente está detrás El comentario anterior.

Los procesadores Intel Haswell tienen reguladores de voltaje integrados que permiten voltajes y frecuencias individuales para cada núcleo

Los reguladores de voltaje individuales difieren de la velocidad del reloj. No todos los núcleos son idénticos, algunos son más rápidos. Los núcleos más rápidos reciben un poco menos de potencia, lo que crea el margen para aumentar la potencia otorgada a los núcleos más débiles. Los reguladores de voltaje del núcleo se configurarán lo más bajo posible para mantener la velocidad actual del reloj. La unidad de control de energía en la CPU regula los voltajes y anulará las solicitudes del sistema operativo cuando sea necesario para los núcleos que difieren en calidad. Resumen: Los reguladores individuales son para hacer que todos los núcleos funcionen económicamente a la misma velocidad de reloj, no para establecer velocidades de núcleo individuales

harrymc
fuente
3
Ah más mshorter y al grano. +1
Hennes
66
@harrymc hay bloques sincronizadores que lo manejan perfectamente bien; DRAM funciona más lento que la velocidad del núcleo, y puede hacer que los núcleos de Intel se ejecuten dinámicamente a diferentes velocidades en el mismo chip.
pjc50
10
Los procesadores Intel Core-series funcionan a diferentes velocidades en el mismo dado todo el tiempo.
Nick T
99
La única existencia de arquitecturas big.LITTLE y el impulso de reloj independiente del núcleo demuestra que estás equivocado. El multiprocesamiento heterogéneo es la corriente principal. Se puede hacer, que se realiza en los teléfonos, pero por alguna razón no en los escritorios.
Agent_L
99
@Agent_L: La razón es la complejidad. Las CPU de escritorio ya son lo suficientemente costosas. Entonces repito: todo es posible, pero la pregunta real es por qué no se hace, no si se puede hacer. No me ataquen como si hubiera afirmado que esto es imposible; todo lo que digo es que es demasiado complicado y costoso y por muy poca ganancia para interesar a los fabricantes.
harrymc
46

¿Por qué no tenemos variantes con diferentes velocidades de reloj? es decir. 2 núcleos 'grandes' y muchos núcleos pequeños.

Es posible que el teléfono en su bolsillo tenga exactamente esa disposición: el ARM big.LITTLE funciona exactamente como lo describió. Ni siquiera es una diferencia de velocidad de reloj, pueden ser tipos de núcleo completamente diferentes, por lo general, los más lentos son incluso más "tontos" (sin ejecución fuera de orden y otras optimizaciones de CPU).

Es una buena idea esencialmente ahorrar batería, pero tiene sus propias deficiencias; la contabilidad para mover cosas entre diferentes CPU es más complicada, la comunicación con el resto de los periféricos es más complicada y, lo más importante, para usar dichos núcleos de manera efectiva, el programador de tareas debe ser extremadamente inteligente (y a menudo "acertar") .

La disposición ideal es ejecutar tareas en segundo plano que no sean críticas para el tiempo o tareas interactivas relativamente pequeñas en los núcleos "pequeños" y despertar a los "grandes" solo para cálculos grandes y largos (donde el tiempo extra dedicado a los núcleos pequeños termina comiendo más batería) o para tareas interactivas de tamaño mediano, donde el usuario siente lentitud en los pequeños núcleos.

Sin embargo, el programador tiene información limitada sobre el tipo de trabajo que puede ejecutar cada tarea, y tiene que recurrir a alguna información heurística (o externa, como forzar alguna máscara de afinidad en una tarea determinada) para decidir dónde programarlas. Si se equivoca, puede terminar perdiendo mucho tiempo / energía para ejecutar una tarea en un núcleo lento y dar una mala experiencia de usuario, o usar los núcleos "grandes" para tareas de baja prioridad, y así perder energía / robándolos de las tareas que los necesitarían.

Además, en un sistema de multiprocesamiento asimétrico, generalmente es más costoso migrar tareas a un núcleo diferente de lo que sería en un sistema SMP, por lo que el planificador generalmente tiene que hacer una buena suposición inicial en lugar de intentar ejecutar un núcleo libre aleatorio y moverse más tarde.


La elección de Intel aquí es tener un número menor de núcleos inteligentes y rápidos idénticos, pero con una escala de frecuencia muy agresiva. Cuando la CPU se ocupa, aumenta rápidamente a la velocidad máxima del reloj, hace el trabajo lo más rápido que puede y luego la reduce para volver al modo de consumo de energía más bajo. Esto no coloca una carga particular en el planificador y evita los malos escenarios descritos anteriormente. Por supuesto, incluso en el modo de reloj bajo, estos núcleos son "inteligentes", por lo que probablemente consumirán más que los núcleos "estúpidos" grandes de bajo reloj.

Matteo Italia
fuente
1
La heurística debería ser bastante simple. Cualquier cambio de tarea involuntario (uso de tiempo completo) es una indicación de que la CPU lenta es inapropiada para la tarea. La utilización muy baja y todos los cambios de tareas voluntarios indican que la tarea podría trasladarse a la CPU lenta.
R ..
3
Otro problema es que 4 núcleos estúpidos de 2 GHz pueden tomar más tamaño de matriz que 2 núcleos inteligentes de 4 GHz, o pueden ser más pequeños y tomar mucha menos energía que los núcleos de 4 GHz, pero también funcionan mucho más lentamente
Phuclv
2
@R .: en principio, estoy de acuerdo con usted, pero incluso habilitando un soporte básico para el planificador para esto, vi un ridículo empuje del núcleo en una placa ARM que utilicé, por lo que debe haber algo más. Además, la mayoría del software multiproceso "normal" está escrito con SMP en mente, por lo que no es atípico ver grupos de subprocesos tan grandes como el número total de núcleos, con trabajos arrastrando los núcleos lentos.
Matteo Italia
1
@Ramhound: una parte de 120 W de 10 núcleos tiene un presupuesto de potencia de 12 W por núcleo (excepto en el modo turbo de un solo núcleo). Esta es la razón por la cual los relojes de un solo núcleo más altos se encuentran en las partes de cuatro núcleos, donde, por ejemplo, el i7-6700k de Intel tiene un presupuesto de potencia de 91W para 4 núcleos: 22.75W por núcleo sostenido con todos los núcleos activos (a 4.0GHz incluso con un Carga de trabajo AVX2 + FMA como Prime95). Esta es también la razón por la que el espacio libre Turbo de un solo núcleo es solo 0.2GHz adicional, en comparación con un Broadwell E5-2699v4 de 22 núcleos con una base de 2.2GHz a 145W, 3.6GHz turbo.
Peter Cordes
@Ramhound: se agregó una respuesta que se expande en esto. Un Xeon de muchos núcleos parece ser exactamente lo que está buscando el OP: operar tantos núcleos de baja potencia o gastar mucha energía ejecutando un solo hilo rápido cuando sea posible (turbo).
Peter Cordes
14

El rendimiento en los juegos tiende a estar determinado por la velocidad de un solo núcleo,

En el pasado (juegos de la era DOS): Correcto.
En estos días, ya no es cierto. Muchos juegos modernos están enhebrados y se benefician de múltiples núcleos. Algunos juegos ya están bastante contentos con 4 núcleos y ese número parece aumentar con el tiempo.

mientras que las aplicaciones como la edición de video están determinadas por el número de núcleos.

Más o menos cierto.

Número de núcleos * veces la velocidad del núcleo * eficiencia.
Si compara un solo núcleo idéntico con un conjunto de núcleos idénticos, entonces está en su mayoría en lo correcto.

En términos de lo que está disponible en el mercado, todas las CPU parecen tener aproximadamente la misma velocidad, siendo las principales diferencias más hilos o más núcleos. Por ejemplo:

Intel Core i5 7600k, Frecuencia base 3.80 GHz, 4 núcleos Intel Core i7 7700k, Frecuencia base 4.20 GHz, 4 núcleos, 8 hilos AMD Ryzen 1600x, Frecuencia base 3.60 GHz, 6 núcleos, 12 hilos AMD Ryzen 1800x, Frecuencia base 3.60 GHz, 8 núcleos, 16 hilos

Comparar diferentes arquitecturas es peligroso, pero está bien ...

Entonces, ¿por qué vemos este patrón de núcleos crecientes con todos los núcleos que tienen la misma velocidad de reloj?

Parcialmente porque nos topamos con una barrera. Aumentar aún más la velocidad del reloj significa más energía necesaria y más calor generado. Más calor significaba aún más energía necesaria. Lo hemos intentado así, el resultado fue el horrible Pentium 4. Hambre de calor y energía. Difícil de enfriar. Y ni siquiera más rápido que el Pentium-M de diseño inteligente (un P4 a 3.0GHz era aproximadamente tan rápido como un P-mob a 1.7GHz).

Desde entonces, abandonamos la velocidad del reloj y, en su lugar, creamos soluciones más inteligentes. Parte de eso era usar múltiples núcleos sobre la velocidad de reloj sin procesar.

Por ejemplo, un solo núcleo de 4 GHz podría consumir tanta energía y generar tanto calor como tres núcleos de 2 GHz. Si su software puede usar múltiples núcleos, será mucho más rápido.

No todo el software podría hacer eso, pero el software moderno generalmente puede hacerlo.

Lo cual responde parcialmente por qué tenemos chips con múltiples núcleos y por qué vendemos chips con diferentes números de núcleos.

En cuanto a la velocidad del reloj, creo que puedo identificar tres puntos:

  • Las CPU de baja potencia tienen sentido para algunos casos en los que no se necesita velocidad bruta. Por ejemplo, controladores de dominio, configuraciones de NAS, ... Para estos, tenemos CPU de menor frecuencia. A veces, incluso con más núcleos (por ejemplo, 8x CPU de baja velocidad tienen sentido para un servidor web).
  • Por lo demás, generalmente estamos cerca de la frecuencia máxima que podemos hacer sin que nuestro diseño actual se caliente demasiado. (digamos 3 a 4 GHz con diseños actuales).
  • Y además de eso, hacemos binning. No todas las CPU se generan por igual. Algunas CPU tienen un puntaje malo o mal en parte de sus chips, tienen esas partes deshabilitadas y se venden como un producto diferente.

El ejemplo clásico de esto fue un chip AMD de 4 núcleos. Si un núcleo se rompió, se deshabilitó y se vendió como un chip de 3 núcleos. Cuando la demanda de estos 3 núcleos era alta, incluso se vendieron unos 4 núcleos como la versión de 3 núcleos, y con el hack de software adecuado, podría volver a habilitar el 4º núcleo.

Y esto no solo se hace con la cantidad de núcleos, sino que también afecta la velocidad. Algunos chips se calientan más que otros Demasiado caliente y venderlo como una CPU de menor velocidad (donde una frecuencia más baja también significa menos calor generado).

Y luego está la producción y el marketing y eso lo arruina aún más.

¿Por qué no tenemos variantes con diferentes velocidades de reloj? es decir. 2 núcleos 'grandes' y muchos núcleos pequeños.

Hacemos. En lugares donde tiene sentido (por ejemplo, teléfonos móviles), a menudo tenemos un SoC con una CPU de núcleo lento (baja potencia) y algunos núcleos más rápidos. Sin embargo, en la PC de escritorio típica, esto no se hace. Haría la configuración mucho más compleja, más costosa y no hay batería que agotar.

Hennes
fuente
1
Como señalé: "Hago esta pregunta como un punto general, no específicamente sobre los cpus que enumeré anteriormente", y hubo una razón por la que di dos ejemplos de cada arquitectura. Si tratamos los dos escenarios como 1. todos los núcleos grandes, y 2. dos grandes y dos pequeños, entonces creo que todos los puntos que menciona se aplican a ambos casos, es decir. una velocidad máxima teórica de un solo núcleo, agrupamiento de chips, downclocking cuando no está en uso.
Jamie
Sin embargo, un solo núcleo de velocidad máxima no es tan interesante cuando no se elige. Los programadores deberán actualizarse para preferir realmente los núcleos de alta velocidad.
Hennes
10

¿Por qué no tenemos variantes con diferentes velocidades de reloj? Por ejemplo, dos núcleos 'grandes' y muchos núcleos pequeños.

A menos que estemos extremadamente preocupados por el consumo de energía, no tendría sentido aceptar todos los costos asociados con un núcleo adicional y no obtener el mayor rendimiento posible de ese núcleo. La velocidad máxima del reloj está determinada en gran medida por el proceso de fabricación, y todo el chip se realiza por el mismo proceso. Entonces, ¿cuál sería la ventaja de hacer que algunos de los núcleos sean más lentos que el proceso de fabricación soportado?

Ya tenemos núcleos que pueden reducir la velocidad para ahorrar energía. ¿Cuál sería el punto de limitar su rendimiento máximo?

David Schwartz
fuente
2
Esto es lo que estaba pensando. ¿Por qué usar intencionalmente algunos componentes inferiores cuando todos podrían ser de élite? +1.
MPW
1
@MPW La elección no es entre crear un núcleo grande y luego neutralizarlo, es entre todos los grandes frente a unos pocos núcleos grandes y muchos pequeños. Debido a que tiene dos escenarios competitivos: rendimiento de subproceso único y rendimiento de subproceso múltiple, ¿por qué no maximizar ambos? ¿Sabemos que no puede fabricar un chip con algunos núcleos grandes y muchos pequeños?
Jamie
@Jamie Podrías fabricar un chip con algunos núcleos grandes y muchos pequeños. Pero los núcleos más pequeños no funcionarían a una velocidad de reloj más baja.
David Schwartz
Lo harían si estuvieran diseñados de esa manera ... La pregunta es por qué no están diseñados de esa manera desde cero, sin tomar un proceso de fabricación existente y neutralizarlo.
Jamie
@Jamie No entiendo lo que estás diciendo. Toda la CPU debe hacerse con el mismo proceso de fabricación, y la velocidad máxima del reloj es en gran medida una característica de los procesos de fabricación. Los núcleos que requieren una velocidad de reloj más baja en el mismo nivel de fabricación generalmente serían más complejos y ocuparían más espacio, de lo contrario, ¿por qué requerirían una velocidad de reloj más baja?
David Schwartz
9

¿Por qué no tenemos variantes con diferentes velocidades de reloj? Por ejemplo, dos núcleos 'grandes' y muchos núcleos pequeños.

Las velocidades nominales de reloj en realidad no significan demasiado para la mayoría de los procesadores más grandes hoy en día, ya que todas tienen la capacidad de sincronizarse. Estás preguntando si pueden o no registrar diferentes núcleos de forma independiente.

Estoy un poco sorprendido por muchas de las otras respuestas. Los procesadores modernos pueden y hacen esto. Puede probar esto, por ejemplo, abriendo CPU-Z en un teléfono inteligente: mi Google Pixel es perfectamente capaz de ejecutar diferentes núcleos a diferentes velocidades:

Es nominalmente 2.15 Ghz, pero dos núcleos están en 1.593 Ghz y dos están en 1.132 Ghz.

De hecho, desde 2009, las CPU Intel convencionales han tenido la lógica de aumentar los núcleos individuales a un nivel más alto al mismo tiempo que otros núcleos, lo que permite un mejor rendimiento de un solo núcleo mientras se mantiene dentro de un presupuesto TDP: http://www.anandtech.com/show/2832/4

Los procesadores Intel más nuevos con "Favored Core" (un término de marketing de Intel) tienen cada núcleo caracterizado en la fábrica, con los núcleos más rápidos capaces de aumentar la potencia extra: http://www.anandtech.com/show/11550/the-intel -skylakex-review-core-i9-7900x-i7-7820x-and-i7-7800x-probado / 7

Los chips Bulldozer de AMD tenían una versión primitiva de esto: http://www.anandtech.com/show/4955/the-bulldozer-review-amd-fx8150-tested/4

Los nuevos chips Ryzen de AMD probablemente también tengan esto, aunque no se menciona explícitamente aquí: http://www.anandtech.com/show/11170/the-amd-zen-and-ryzen-7-review-a-deep-dive -en-1800x-1700x-y-1700/11

Grant Wu
fuente
Estás respondiendo una pregunta diferente. La pregunta es sobre muchos núcleos grandes versus un par de núcleos grandes y muchos núcleos pequeños: los méritos de los dos escenarios. En ambas situaciones, puede subir y bajar dependiendo de la demanda, o impulsar un núcleo.
Jamie
3
Así no es como leo la pregunta. La pregunta no menciona núcleos arquitectónicamente diferentes, a pesar de usar las palabras "grande" y "pequeño". Se centra exclusivamente en la velocidad del reloj.
Grant Wu
8

En un sistema moderno que a menudo hacer que todos los núcleos que corren a diferentes velocidades. Reducir un núcleo que no se usa mucho reduce el consumo de energía y la salida térmica, lo cual es bueno, y características como "turbo boost" permiten que uno o dos núcleos funcionen significativamente más rápido siempre que los otros núcleos estén inactivos, y por lo tanto, el uso de energía y la producción de calor de todo el paquete no sube demasiado. En el caso de un chip con tal característica, la velocidad que ve en la lista es la velocidad más alta que puede obtener con todos los núcleos a la vez. ¿Y por qué todos los núcleos tienen la misma velocidad máxima? Bueno, todos tienen un diseño idéntico, en el mismo chip físico, establecido con el mismo proceso de semiconductores, entonces, ¿por qué deberían ser diferentes?

La razón por la que todos los núcleos son idénticos es porque hace que sea más fácil para un subproceso que se ejecuta en un núcleo en un punto comenzar a ejecutarse en un núcleo diferente en otro punto. Como se mencionó en otra parte, hay chips de uso común que no siguen este principio de núcleos idénticos, a saber, las CPU "big.LITTLE" de ARM. Aunque en mi opinión, la diferencia más importante entre los núcleos "grande" y "pequeño" no es la velocidad del reloj (los núcleos "grandes" tienden a ser núcleos más elegantes, más anchos y más especulativos que obtienen más instrucciones por reloj a un costo mayor) uso de energía, mientras que los núcleos "pequeños" se acercan más a las raíces de bajo problema, en orden y de baja potencia de ARM), ya que '

Y cada vez más en el ámbito de la informática heterogénea, también se está volviendo común ver núcleos de "CPU" y "GPU" integrados en el mismo chip. Estos tienen diseños completamente diferentes, ejecutan diferentes conjuntos de instrucciones, se abordan de manera diferente y, en general, también se sincronizarán de manera diferente.

hobbs
fuente
7

El rendimiento rápido de un solo subproceso y el alto rendimiento de subprocesos múltiples es exactamente lo que obtienes con una CPU como la Xeon E5-2699v4 de Intel .

Es un Broadwell de 22 núcleos. La velocidad de reloj sostenida es de 2.2 GHz con todos los núcleos activos (por ejemplo, codificación de video), pero el turbo máximo de un solo núcleo es de 3.6 GHz.

Entonces, mientras ejecuta una tarea paralela, usa su presupuesto de energía de 145W como 22 núcleos de 6.6W. Pero mientras ejecuta una tarea con solo unos pocos subprocesos, ese mismo presupuesto de energía permite que algunos núcleos turbo hasta 3.6GHz. ( Sin embargo, la memoria de un solo núcleo más baja y el ancho de banda de caché L3 en un gran Xeon significa que podría no funcionar tan rápido como un quad-core de escritorio a 3.6GHz. Sin embargo, un solo núcleo en una CPU Intel de escritorio puede usar mucho más ancho de banda total de memoria)

La velocidad de reloj nominal de 2.2GHz es tan baja debido a los límites térmicos. Cuantos más núcleos tenga una CPU, más lento tendrá que ejecutar cuando todos estén activos. Este efecto no es muy grande en las CPU de 4 y 8 núcleos que mencionas en la pregunta, porque 8 no tiene tantos núcleos y tienen presupuestos de energía muy altos. Incluso las CPU de escritorio entusiastas muestran notablemente este efecto: el Skylake-X i9-7900X de Intel es una parte de 10c20t con una base de 3.3GHz, turbo máximo de 4.5GHz . Eso es mucho más espacio libre turbo de un solo núcleo que i7-6700k (4.0GHz sostenido / 4.2GHz turbo sin overclocking).

La escala de frecuencia / voltaje (DVFS) permite que el mismo núcleo opere en un amplio rango de la curva de rendimiento / eficiencia. Consulte también esta presentación de IDF2015 sobre la administración de energía de Skylake , con muchos detalles interesantes sobre lo que las CPU pueden hacer de manera eficiente, y compensando el rendimiento frente a la eficiencia tanto estáticamente en el momento del diseño como sobre la marcha con DVFS.

En el otro extremo del espectro, las CPU Intel Core-M tienen una frecuencia sostenida muy baja, como 1.2GHz a 4.5W , pero pueden aumentar hasta 2.9GHz. Con múltiples núcleos activos, ejecutarán sus núcleos a una velocidad de reloj más eficiente, al igual que los gigantes Xeons.

No necesita una arquitectura heterogénea de estilo big.LITTLE para obtener el mayor beneficio. Los núcleos pequeños en ARM big.LITTLE son núcleos en orden bastante malos que no son buenos para el trabajo de cómputo. El punto es simplemente ejecutar una interfaz de usuario con muy poca potencia. Muchos de ellos no serían geniales para la codificación de video u otros ajustes serios de números. ( @ Lưu Vĩnh Phúc encontró algunas discusiones sobre por qué x86 no tiene big.LITTLE . Básicamente, gastar silicio adicional en un núcleo extra lento de muy baja potencia no valdría la pena para el uso típico de computadoras de escritorio / portátiles).


mientras que las aplicaciones como la edición de video están determinadas por el número de núcleos. [¿No sería mejor 2x 4.0 GHz + 4x 2.0 GHz en cargas de trabajo de subprocesos múltiples que 4x 4GHz?]

Este es tu malentendido clave. Parece que piensa que la misma cantidad total de tics de reloj por segundo es más útil si se distribuye en más núcleos. Ese nunca es el caso. Es mas como

cores * perf_per_core * (scaling efficiency)^cores

( perf_per_coreno es lo mismo que la velocidad del reloj, porque un Pentium4 de 3GHz tendrá mucho menos trabajo por ciclo de reloj que un Skylake de 3GHz).

Más importante aún, es muy raro que la eficiencia sea 1.0. Algunas tareas vergonzosamente paralelas se escalan casi linealmente (por ejemplo, compilar múltiples archivos fuente). Pero la codificación de video no es así. Para x264, el escalado es muy bueno hasta algunos núcleos, pero empeora con más núcleos. por ejemplo, pasar de 1 a 2 núcleos casi duplicará la velocidad, pero pasar de 32 a 64 núcleos ayudará mucho menos para una codificación típica de 1080p. El punto en el que las mesetas de velocidad dependen de la configuración. ( -preset veryslowrealiza más análisis en cada cuadro y puede mantener más núcleos ocupados que -preset fast).

Con muchos núcleos muy lentos, las partes de un solo hilo de x264 se convertirían en cuellos de botella. (por ejemplo, la codificación de flujo de bits CABAC final. Es el equivalente de h.264 de gzip, y no se paraleliza). Tener algunos núcleos rápidos resolvería eso, si el sistema operativo supiera programarlo (o si x264 fijó los hilos apropiados a núcleos rápidos).

x265 puede aprovechar más núcleos que x264, ya que tiene más análisis que hacer, y el diseño WPP de h.265 permite un mayor paralelismo de codificación y decodificación. Pero incluso para 1080p, te quedas sin paralelismo para explotar en algún momento.


Si tiene múltiples videos para codificar, hacer múltiples videos en escalas paralelas también, a excepción de la competencia por recursos compartidos como la capacidad de caché L3 y el ancho de banda, y el ancho de banda de la memoria. Menos núcleos más rápidos podrían obtener más beneficios de la misma cantidad de caché L3, ya que no tendrían que trabajar en tantas partes diferentes del problema a la vez.

Peter Cordes
fuente
4

Si bien es posible diseñar computadoras que tienen diferentes partes que se ejecutan a diferentes velocidades independientes, el arbitraje de los recursos a menudo requiere poder decidir rápidamente qué solicitud atender primero, lo que a su vez requiere saber si alguna otra solicitud pudo haber llegado lo suficientemente pronto para ganar prioridad . Decidir tales cosas, la mayoría de las veces , es bastante simple. Algo así como un circuito "zumbador de prueba" podría implementarse con tan solo dos transistores. El problema es que tomar decisiones rápidas que son confiablesinequívoco es difícil. La única forma práctica de hacerlo en muchos casos es usar una decisión llamada "sincronizador", que puede evitar ambigüedades pero introduce un retraso de dos ciclos. Se podría diseñar un controlador de almacenamiento en caché que arbitraría de manera confiable entre dos sistemas con relojes separados si estuviera dispuesto a tolerar un retraso de dos ciclos en cada operación para determinar quién ganó el arbitraje. Sin embargo, este enfoque sería menos que útil si uno quisiera que un caché responda inmediatamente a las solicitudes en ausencia de contención, ya que incluso las solicitudes no contestadas aún tendrían un retraso de dos ciclos.

Ejecutar todo fuera de un reloj común evita la necesidad de sincronización, lo que a su vez evita un retraso en las comunicaciones de dos ciclos cada vez que es necesario pasar información o controlar señales entre dominios de reloj.

Super gato
fuente
4

Las computadoras de escritorio ya hacen esto.

Tienen un (conjunto de) CPU (s), con 1-72 hilos activos a la vez, y un (conjunto de) GPU (s), con 16-7168 unidades de cómputo.

Los gráficos son un ejemplo de una tarea en la que hemos encontrado que el trabajo paralelo masivo es eficiente. La GPU está optimizada para hacer el tipo de operaciones que queremos hacer gráficos (pero no se limita a eso).

Esta es una computadora con algunos núcleos grandes y muchos núcleos pequeños.

En general, no vale la pena intercambiar un núcleo en X FLOPS por tres núcleos en X / 2 FLOPS; pero vale la pena intercambiar un núcleo en X FLOPS por cien núcleos en X / 5 FLOPS.

Al programar para esto, genera un código muy diferente para la CPU y para la GPU. Se realiza mucho trabajo para dividir la carga de trabajo, de modo que la GPU obtiene las tareas que se realizan mejor en la GPU, y la CPU obtiene las tareas que se realizan mejor en la CPU.

Podría decirse que es mucho más fácil escribir código para una CPU, porque el código paralelo masivo es más difícil de corregir. Entonces, solo cuando la recompensa es grande , vale la pena intercambiar el rendimiento de un solo núcleo para situaciones de múltiples núcleos. Las GPU dan una gran recompensa cuando se usan correctamente.

Ahora, los dispositivos móviles hacen esto por una razón diferente. Tienen núcleos de baja potencia que son significativamente más lentos, pero también usan significativamente menos energía por unidad de cálculo. Esto les permite alargar la duración de la batería mucho más cuando no realizan tareas intensivas de CPU. Aquí tenemos un tipo diferente de "gran recompensa"; no rendimiento, sino eficiencia energética. Todavía se necesita mucho trabajo por parte del sistema operativo y posiblemente del escritor de aplicaciones para que esto funcione correctamente; solo la gran recompensa hizo que valiera la pena.

Yakk
fuente
-1

La razón por la cual los sistemas comunes tienen núcleos a la misma velocidad es un simple problema matemático. Temporización de entrada y salida (con optimizaciones) basadas en un solo conjunto de constantes (que son escalables = multiplicables por varias unidades).

Y alguien aquí dijo que los dispositivos móviles tienen múltiples cpus con diferentes velocidades. Eso no es verdad. No es una unidad de procesamiento central si no es la unidad de procesamiento central; no importa lo que el fabricante diga que es o no es. en ese caso [no una CPU] es solo un "paquete de soporte".

Sistemas Hypersoft
fuente
-10

No creo que el OP entienda la electrónica básica. Todas las computadoras requieren una cosa para que funcionen: un reloj. Los ciclos de reloj generados por un reloj interno son el metrónomo para el movimiento de todos los datos. Para lograr la sincronicidad, todas las operaciones deben estar vinculadas a un reloj común. Esto es cierto tanto para la ejecución de datos internos en una computadora aislada como para redes enteras.

Si desea aislar los núcleos en una CPU ejecutándolos a diferentes frecuencias, ciertamente podría diseñar dicha plataforma. Sin embargo, requeriría diseñar una solución de placa base que vincule cada núcleo individual con su propio subconjunto aislado de características de la placa base. Tendrían 4 computadoras individuales en lugar de una computadora de cuatro núcleos.

Alternativamente, como señaló otra persona, puede agregar código a su núcleo que ajusta la frecuencia central de forma individual. Sin embargo, esto causará impactos en el rendimiento. Puede tener velocidad o eficiencia energética, pero no puede tener ambas.

RyRoUK
fuente
1
Yo no, de ahí mi pregunta. Al comparar un Intel i5 7600 con un i5 7600k, vemos que el reloj base es de 100 mhz para ambos y la diferencia es la relación de núcleo. Entonces, podría tener dos núcleos con el mismo reloj base de 100 mhz pero con diferentes proporciones de núcleo: ¿este escenario viola el requisito de sincronicidad?
Jamie
44
Sí, esto es simplificar demasiado; No es realmente cierto que todas las operaciones deben estar vinculadas al mismo reloj, hay muchos dominios de reloj y es perfectamente posible ejecutar diferentes núcleos a la misma velocidad. El reloj del bus no es lo mismo que el reloj interno, etc.
pjc50
11
Los chips modernos ya tienen múltiples dominios de reloj (incluso el RTC de un microcontrolador barato y tonto generalmente se ejecuta en un dominio separado de 32.7kHz). Solo tiene que sincronizar entre dominios de reloj. Incluso con un reloj común, podría dividirlo entre 2, 4, 8, etc.
Michael
1
Todo cierto. Pero todavía reduce la eficiencia de la operación. Y ese es siempre el objetivo en lo que respecta al rendimiento. Ese fue mi punto. Seguro que puedes hacerlo. Pero te afectará el rendimiento.
RyRoUK
"Reduce el rendimiento", ¿en comparación con qué? Está asumiendo un estado base donde tiene n procesadores ejecutándose con el mismo reloj. Ese no tiene que ser el caso. Procesador X + procesador Y es una solución más potente / flexible que el procesador X solo, sin importar exactamente qué procesador es.
hmijail