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.
Respuestas:
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.
fuente
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 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.
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).
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 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
fuente
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.
fuente
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.
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.
Comparar diferentes arquitecturas es peligroso, pero está bien ...
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:
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.
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.
fuente
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?
fuente
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
fuente
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.
fuente
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).
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
(
perf_per_core
no 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 veryslow
realiza 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.
fuente
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.
fuente
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.
fuente
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".
fuente
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.
fuente