¿Cómo calculo la velocidad del reloj en procesadores multi-core?

23

¿Es correcto decir, por ejemplo, que un procesador con cuatro núcleos cada uno funcionando a 3GHz es de hecho un procesador funcionando a 12GHz?

Una vez me metí en un argumento de "Mac vs. PC" (que por cierto NO es el tema central de este tema ... que estaba en la escuela secundaria) con un conocido que insistió en que Macs solo se anunciaba como máquinas de 1Ghz porque eran G4 de doble procesador cada uno funcionando a 500MHz.

En ese momento, sabía que esto era una tontería por razones que creo que son evidentes para la mayoría de las personas, pero acabo de ver un comentario en este sitio web en el sentido de "6 núcleos x 0.2GHz = 1.2Ghz" y eso me hizo pensar nuevamente si Hay una respuesta real a esto.

Entonces, esta es una pregunta técnica más o menos filosófica / profunda sobre la semántica del cálculo de la velocidad del reloj. Veo dos posibilidades:

  1. De hecho, cada núcleo está haciendo x cálculos por segundo, por lo tanto, el número total de cálculos es x (núcleos).
  2. La velocidad del reloj es más bien un recuento del número de ciclos que atraviesa el procesador en el espacio de un segundo, por lo que siempre y cuando todos los núcleos estén funcionando a la misma velocidad, la velocidad de cada ciclo de reloj permanece igual sin importar cuántos núcleos existan . En otras palabras, Hz = (core1Hz + core2Hz + ...) / núcleos.
NReilingh
fuente
Muchas de las respuestas aquí hacen un buen trabajo al explicar por qué, por ejemplo, un procesador quad-core de 2 GHz no es necesariamente igual a un procesador de 8 GHz de un solo núcleo. Sin embargo, estoy teniendo dificultades para adivinar cómo se deben tener en cuenta las velocidades del procesador multinúcleo al decidir la idoneidad de un sistema para una aplicación que enumera una velocidad específica y un número de núcleos en sus requisitos. (por ejemplo: Borderlands 2 requiere un procesador de doble núcleo de 2.4 GHz. ¿Deberíamos esperar que un núcleo cuádruple de baja velocidad o un núcleo único de mayor velocidad funcionen igual de bien?) ¿Es eso (o podría ser) respondido aquí, o debería ser una pregunta separada?
Iszi
@Iszi Esa debería ser otra pregunta, pero es probable que Borderlands esté optimizado para más de un hilo si incluyen "dual core" en sus requisitos. En ese caso, no se recomendaría un procesador de un solo núcleo, pero no está claro si puede aprovechar> 2 núcleos.
NReilingh
Es importante recordar que la velocidad del reloj y el número de núcleos no solo determinan la "velocidad" del procesador. Por ejemplo, los tamaños y la velocidad de la memoria caché afectarán el tiempo que el procesador pasa esperando instrucciones y datos. Además, las instrucciones por ciclo (en cierto modo, 'eficiencia', aunque distintas y relacionadas con la eficiencia energética) también afectarán la velocidad de los cálculos. Los diferentes procesadores tardarán diferentes tiempos en ejecutar la misma instrucción.
Bob

Respuestas:

35

La razón principal por la que un procesador de cuatro núcleos a 3 GHz nunca es tan rápido como un solo núcleo a 12 GHz es la forma en que funciona la tarea que se ejecuta en ese procesador, es decir, un solo subproceso o varios subprocesos. La Ley de Amdahl es importante al considerar los tipos de tareas que está ejecutando.

Si tiene una tarea que es inherentemente lineal y tiene que hacerse con precisión paso a paso como (un programa extremadamente simple)

10: a = a + 1
20: goto 10

Entonces, la tarea depende en gran medida del resultado del pase anterior y no puede ejecutar varias copias de sí mismo sin corromper el valor de, 'a'ya que cada copia obtendría el valor 'a'en diferentes momentos y la volvería a escribir de manera diferente. Esto restringe la tarea a un solo subproceso y, por lo tanto, la tarea solo se puede ejecutar en un solo núcleo en un momento dado, si se ejecutara en múltiples núcleos, la corrupción de sincronización ocurriría. Esto lo limita a la mitad de la potencia de la CPU de un sistema de doble núcleo, o 1/4 en un sistema de cuatro núcleos.

Ahora tome una tarea como:

10: a = a + 1
20: b = b + 1
30: c = c + 1
40: d = d + 1
50: goto 10

Todas estas líneas son independientes y podrían dividirse en 4 programas separados como el primero y ejecutarse al mismo tiempo, cada uno capaz de hacer un uso efectivo de la potencia total de uno de los núcleos sin ningún problema de sincronización, aquí es donde está la Ley de Amdahl entra en ello.

Entonces, si tiene una aplicación de un solo subproceso que realiza cálculos de fuerza bruta, el único procesador de 12 GHz ganaría fácilmente, si de alguna manera puede hacer que la tarea se divida en partes separadas y multiproceso, entonces los 4 núcleos podrían acercarse, pero no llegar del todo, El mismo rendimiento, según la Ley de Amdahl.

Lo principal que le da un sistema de CPU múltiple es la capacidad de respuesta. En una máquina de un solo núcleo que está trabajando duro, el sistema puede parecer lento ya que la mayor parte del tiempo podría ser utilizado por una tarea y las otras tareas solo se ejecutan en ráfagas cortas entre la tarea más grande, lo que resulta en un sistema que parece lento o difícil. . En un sistema multinúcleo, la tarea pesada obtiene un núcleo y todas las demás tareas juegan en los otros núcleos, haciendo su trabajo de manera rápida y eficiente.

El argumento de "6 núcleos x 0.2GHz = 1.2Ghz" es basura en todas las situaciones, excepto donde las tareas son perfectamente paralelas e independientes. Hay una buena cantidad de tareas que son altamente paralelas, pero aún requieren alguna forma de sincronización. Freno de mano es una trancoder vídeo que es muy bueno en el uso de todas las CPU disponibles pero sí requiere un proceso central para mantener a los otros hilos llenos de datos y recoger los datos que se hacen con.

  1. De hecho, cada núcleo está haciendo x cálculos por segundo, por lo tanto, el número total de cálculos es x (núcleos).

Cada núcleo es capaz de hacer x cálculos por segundo, suponiendo que la carga de trabajo sea paralela adecuada, en un programa lineal todo lo que tiene es 1 núcleo.

  1. La velocidad del reloj es más bien un recuento del número de ciclos que atraviesa el procesador en el espacio de un segundo, por lo que siempre y cuando todos los núcleos estén funcionando a la misma velocidad, la velocidad de cada ciclo de reloj permanece igual sin importar cuántos núcleos existan . En otras palabras, Hz = (core1Hz + core2Hz + ...) / núcleos.

Creo que es una falacia pensar que 4 x 3GHz = 12GHz, dado que las matemáticas funcionan, pero estás comparando manzanas con naranjas y las sumas simplemente no son correctas, GHz no puede simplemente sumarse para cada situación. Lo cambiaría a 4 x 3GHz = 4 x 3GHz.

Mokubai
fuente
Bonita publicación .. No se pudo votar más de 1+ :-(
Gopalakrishnan Subramani
Pero la ley de amdahl es un problema de programación, causado por el bloqueo, no un problema de hardware. Si no necesita sincronizar, cada núcleo podría ejecutar instrucciones lo más rápido posible. Se podría diseñar un programa paralelo (simple) que se dividiría perfectamente entre núcleos. ¿Los fabricantes de hardware no anunciarían este valor bruto?
Justin Meiners
Para aclarar, entiendo por qué esto responde a la pregunta de por qué 4 núcleos a 3 ghz no son tan rápidos, en la práctica como a 12 ghz, pero no es la parte de cómo se calcula la velocidad del reloj para múltiples núcleos.
Justin Meiners
La velocidad de reloj de @JustinMeiners por núcleo es simplemente la velocidad de reloj a la que se ejecuta el núcleo. No existe un cálculo mágico que iguale un solo núcleo a multinúcleo. Múltiples núcleos solo significa que puede ejecutar más tareas separadas simultáneamente. La ley de Amdahls se aplica debido al software, la sincronización y el bloqueo necesarios evitarán que una tarea sea "perfecta" en el hardware tanto como el software. Las memorias caché y la memoria compartida provocan conflictos y bloqueos.
Mokubai
@Mokubai Solo para aclarar, cuando un fabricante enumera la velocidad del reloj, cada núcleo individual funciona a la velocidad, ¿correcto?
Justin Meiners
6

Otros hicieron un buen argumento desde el punto de vista técnico. En cambio, haré un par de analogías simples que espero expliquen por qué 4 * 3GHz no es equivalente a 1 * 12GHz.

Por ejemplo, una mujer puede fabricar un bebé en nueve meses. ¿Podrán nueve mujeres fabricar un bebé en un mes? No, porque la gestación no puede ser paralela (bueno, al menos a este nivel tecnológico).

Aquí hay otro: en una planta hidroeléctrica que visité recientemente, uno de los generadores estaba siendo actualizado. Tuvieron que transportar el estator del generador por barco. Un sexto del estator podía ser transportado en camión, pero necesitaban transportar todo el estator; así que tuvieron que usar un barco, no seis camiones.

Otro caso podría ser el momento preciso de los eventos. A veces, los procesadores de computadora se usan como temporizadores precisos (aunque la práctica ya no se recomienda, debido al reloj variable en la mayoría de los procesadores. En su lugar, se debe usar un temporizador de eventos de alta precisión). Si suponemos que tenemos un procesador con un reloj de 12 GHz relativamente estable, podemos usarlo para medir el tiempo en una resolución mucho más alta que en un procesador con reloj de 3GHz. No importa cuántos núcleos de 3GHz tengamos, no podremos alcanzar la resolución del núcleo de 12GHz. Es como tener 4 relojes con pantallas de 7 segmentos donde cada reloj muestra la hora correcta en horas. No importa cuán correctamente muestren las horas, no puede usarlas para medir intervalos de tiempo en un intervalo de un segundo.

AndrejaKo
fuente
Respuesta útil para los menos técnicos. Además, me gustan las analogías :)
aff
3

No soy un experto en el tema, pero sí tengo un título en Ingeniería Informática. En teoría (esta es una respuesta muy conceptual), un procesador de cuatro núcleos a 3 GHz puede ser equivalente a un procesador de 12 GHz si, por ejemplo, se necesitan cuatro conjuntos de cálculos para un único resultado final. Eso es lo que se llama procesamiento paralelo.

Para simplificar la lógica, digamos que estamos hablando de un procesador de doble núcleo. Si un conjunto de cálculos fuera, diga:

a = b + 1;

c = d + 1;

entonces, esos dos cálculos podrían ejecutarse en núcleos separados, y un procesador xGHz sería equivalente a un procesador de un solo núcleo 2 * xGHz. Esto se debe a que los dos cálculos, aunque se realizan a velocidad x, se procesarían al mismo tiempo. Mientras que el procesador de un solo núcleo podría hacerlos a 2 * x velocidad, pero uno tras otro. Si las dos CPU ejecutaran este código al mismo tiempo, terminarían al mismo tiempo. Sin embargo, si el código fuera:

a = b + 1;

c = a + 1;

entonces, el procesador de doble núcleo tardaría dos veces más que el procesador de un solo núcleo porque en la segunda instrucción, el valor de a depende de la primera instrucción y, por lo tanto, no puede ejecutarse en paralelo. Así es como algunos programas pueden aprovechar los procesadores de subprocesos múltiples.

Por lo tanto, en teoría, un procesador de un solo núcleo de 12 GHz siempre puede funcionar tan rápido (o más rápido) que un procesador de cuatro núcleos de 3 GHz, pero no al revés.

Destruye la pared con explosivos
fuente
Tenga en cuenta que esos cálculos solo serán más rápidos si están mal pensados, e incluso entonces hay una ligera sobrecarga. Pero sí, si bien es posible hacer un procesador de un solo núcleo que pueda hacer tantos cálculos, simplemente no es plausible debido al calor y demás.
Phoshi
Esta respuesta es engañosa por dos razones. Primero, los núcleos modernos hacen más de una cosa a la vez. En segundo lugar, la respuesta supone que la velocidad central es la misma que la velocidad a la que se realiza el trabajo. Un procesador de un solo núcleo de 12 GHz no funcionará tan rápido como un procesador de cuatro núcleos de 3GHz si el procesador de un solo núcleo necesita significativamente más ciclos de reloj para realizar el mismo trabajo. (Lo que sería porque un procesador de 12 GHz necesitaría tuberías mucho más largas).
David Schwartz
2

Esta es una pregunta complicada de responder, pero la respuesta corta es: No

En aplicaciones del mundo real, cuatro procesadores de 3 GHz no serán tan rápidos como un solo procesador de 12 GHz debido a las ineficiencias. Pueden estar muy cerca, pero NO serán iguales a un solo procesador en términos de potencia de procesamiento.

La razón de esto radica en las pequeñas ineficiencias cuando se trata de programas que pueden ejecutarse en más de un procesador. Suponiendo que el programa en cuestión puede ejecutarse en paralelo, aún tendremos problemas con diferentes núcleos que compiten entre sí por otros recursos como RAM o incluso problemas de sincronización de caché y subprocesos. Además, siempre hay partes de programas que no se pueden paralelizar y necesitan ejecutarse en un solo núcleo por sí mismo.

Echa un vistazo a este artículo: http://en.wikipedia.org/wiki/Amdahl%27s_law

Falso
fuente
Tienes razón y estás equivocado. Es probable que cuatro procesadores de 3 ghz sean MÁS RÁPIDOS que un solo procesador de 12 ghz en aplicaciones del "mundo real". En la actualidad, cada vez más programas utilizan subprocesos múltiples, el enlace que proporcionó se refiere a una aplicación teórica de subproceso único. Un único procesador a 12 ghz solo tiene un subproceso, por lo que se perderían los beneficios de subprocesamiento múltiple que ofrece un programa del "mundo real". La industria no está yendo hacia núcleos más lentos en lugar de menos núcleos más rápidos solo porque, los beneficios de la tecnología multinúcleo superan con creces los beneficios de la tecnología rápida de un solo núcleo.
ubiquibacon
3
@typoknig: Eso no es del todo cierto. Un procesador de un solo núcleo de 6 GHz ejecutaría una aplicación multiproceso a aproximadamente la misma velocidad que un procesador de doble núcleo de 3 GHz, suponiendo que la aplicación esté aprovechando al máximo cada hilo (lo que probablemente no esté haciendo si es un "real aplicación mundial ", pero ese es un argumento separado). No vemos procesadores de 12 GHz porque es demasiado difícil con la tecnología actual, no porque sea más lento.
Sasha Chedygov
44
@typoknig: he programado algunos programas multiproceso y créanme, si tuviera un solo procesador de 12Ghz, lo usaría en su lugar. La programación de subprocesos simples es 10 veces más fácil y mucho más eficiente que la programación de subprocesos múltiples. La verdadera razón por la cual la industria está moviendo los procesadores de palabras clave no es porque son más rápidos, ¡es porque no podemos hacer que las CPU individuales funcionen más rápido! Esto se describió con la tecnología netburst de Intel en los días p4. Estimaron procesadores de 10 Ghz, al menos, hasta que la física cuántica los abofeteó y dijo "¡no, noob!"
Faken
2
@typokning: El F22 usa una variedad de procesadores powerPC para lograr 10 mil millones de instrucciones por segundo, ¡muy diferente de ser 10Ghz! Es como decir que su Radion HD5970 funciona a 4600Ghz. Es capaz de 4.6 TFLOPS pero solo porque es altamente paralelo.
Faken
1
@typoknig: Claramente no entiendes la diferencia entre la frecuencia de la CPU y el IPS (instrucciones por segundo), no son lo mismo. Lea: en.wikipedia.org/wiki/Instructions_per_second
Faken
2

Parece que no podemos decir que 4 núcleos a 3 GHz se pueden decir como 12 GHz.

Varias restricciones como la memoria compartida, la contención de caché y otros recursos también son comunes a todos los núcleos, por lo que ejecutar un fragmento de código paralelo en estos núcleos no será tan eficiente como ejecutarlo en procesadores de 12 Ghz (aunque es difícil construir un procesador de este tipo). )

También leí en alguna parte que si duplicamos los transistores integrados en el chip (CMP), la velocidad que obtendremos es solo del 40%. Esto proporciona una pista importante para este tema también.

Harmeet Singh
fuente
1

En lo que respecta a los ciclos de reloj ejecutados, sí, un procesador multinúcleo completa x * coresciclos de trabajo por segundo. Convencionalmente, las velocidades de reloj se enumeran por núcleo para una comparación más fácil (de lo contrario, ¿cómo compararía fácilmente un chip de doble núcleo de 4 GHz que funciona a 2 GHz / núcleo frente a un chip de cuatro núcleos de 4 GHz que funciona a 1 GHz / núcleo?).

Desafortunadamente, el problema se vuelve complejo cuando intentas comparar diferentes procesadores en aplicaciones del mundo real.

Primero, la mayoría de los procesadores multinúcleo comparten algunos recursos entre los núcleos (por ejemplo, caché de la CPU). Tienen que compartir el acceso a ese caché, por lo que no puede tener ambos núcleos almacenando o leyendo datos a toda velocidad. Esto a menudo se mitiga en CPU de muchos núcleos al tener múltiples cachés compartidos (por ejemplo, la mayoría de los chips de cuatro núcleos tienen 2 cachés, cada uno compartido por un par de núcleos), para dividir mejor las posibilidades de un cuello de botella en un recurso compartido.

En segundo lugar, y quizás menos conocido en el mundo no tecnológico, es que comparar velocidades de reloj a veces puede ser como comparar manzanas y naranjas. Diferentes CPU logran una cantidad diferente de trabajo en un solo ciclo de reloj, por lo que decir que tiene 1 GHz frente a 1.2 GHz suena muy bien, pero el chip de 1 GHz en realidad podría hacer más trabajo en un intervalo de tiempo determinado. El Pentium 4 condujo a este punto a casa, lo que llevó al Megahertz Myth (que no sabía que tenía un nombre acuñado hasta que escribí esta publicación).

Palanqueta
fuente
Las velocidades de reloj no se enumeran "por núcleo". Las velocidades nunca son "por" nada. Si un automóvil va a 50 millas por hora, la velocidad es de 50 millas por hora. Si dos autos van a 50 millas por hora, la velocidad sigue siendo de 50 millas por hora. La idea de una "velocidad por automóvil" no tiene sentido e incoherente.
David Schwartz
1

Dos autos que van 50 millas por hora no "suman" hasta 100 millas por hora. Es realmente así de simple. La velocidad del reloj de un procesador no es una medida de la velocidad a la que se realiza el trabajo, es una medida de la velocidad del reloj.

David Schwartz
fuente