Os explico el porque del "posible" y real mayor rendimiento de un procesador con 4 hilos/nucleos frente a uno de 8 hilos/nucleos. La explicación sencilla y "poco" ortodoxa, pero muy clarificativa, comparando 1 núcleo con varios es la siguiente:
------------------------------------------------------------------------
La programación tradicional utiliza algoritmos secuenciales, es decir:
Tiempo 1 - Paso 1 (núcleo 1)
Tiempo 2 - Paso 2 (nucleo 1)
Tiempo 3 - Paso 3 (núcleo 1)
Tiempo 4 - Paso 4 (núcleo 1)
------------------------------------------------------------------------
La programación concurrente (uso de varios hilos de forma simultanea) es un tema complicado para aplicaciones sencillas ya que debe hacer:
Tiempo 1 - Paso 1-2-3-4 (cada uno en un núcleo.
Esta sería la situación ideal, en la que cada paso puede hacerse de forma simultanea porque es independiente, cosa que habitualmente no es así... Algo mas realista podría ser:
Tiempo 1 - Paso 1 - Paso 3 (núcleos 1 y 2)
Tiempo 2 - Paso 2
Tiempo 3 - Paso 4
Esto podría realizarse siempre y cuando los resultados del paso 1 no intervengan en 3 y que ambos sean necesarios para 2 y 4 sucesivamente.
------------------------------------------------------------------------
Ahora bien, vamos a los 4 núcleos frente a 8 núcleos. Disponemos de un proceso de "8 pasos"
4 núcleos: En tiempo 1 ejecuta 4 pasos que son independientes y luego necesita 4 tiempos mas para cada uno de los otros pasos que dependen del resultado anterior. (POR EJEMPLO EH)
8 núcleos: Hace lo mismo que el 4 núcleos , en tiempo 4 cuatro pasos a la vez y luego necesita otros 4 para el resto.
En un caso así, bastante ocurrente, el rendimiento sería "el mismo". Pero nos falta por tener en cuenta que esos "tiempo" dependenden de la frecuencia del procesador y que un "paso" no se hace igual en cada procesador (lo que ahora se habla tanto de tener mayor o menor IPC).
------------------------------------------------------------------------
Veamos un ejemplo ilustrativo con las propiedades de la suma y la multiplicación:
(1+2)+(3+4)*(5+6)+(7+8)
Según las prioridades de los paréntesis y corchetes, las 4 sumas entre "()" son operaciones independientes entre si, por lo que pueden realizarse simultáneamente (cada una en un núcleo). --> Tiempo 1 (procesador 4/8 nucleos/hilos)
A continuación tiene prioridad la multiplicacion, por lo que la realizamos en un solo núcleo --> Tiempo 2
Por ultimo tenemos dos sumas y 3 sumandos, dos operaciones a realizar en tiempo 3 y 4 ya que hacemos la de la izquierda 1º y el resultado con la de la derecha (o al reves) --> Tiempos 3 y 4
------------------------------------------------------------------------
Total, que tanto con 4 como con 8 núcleos/hilos tardamos lo mismo en realizar una serie de sumas y multiplicaciones... operaciones de lo mas sencilla que puede hacer un procesador. Logicamente la mejora con respecto a 1 solo nucleo es que en el "Tiempo 1" realizamos 4 operaciones, por lo que ahorramos 3.
------------------------------------------------------------------------
------------------------------------------------------------------------
------------------------------------------------------------------------
Ahora intentare clarificar el tema de las IPC o Instrucciones por ciclo de una forma comprensible. Un procesador en su interior tiene circuiteria que permite realizar operaciones con numeros binarios. Como algo muy genérico y ejemplificador podriamos decir que: toma datos de la memoria (RAM) y los coloca en memoria interna del procesador (REGISTROS), opera con ellos y devuelve el resultado a memoria. Podemos ver 3 pasos:
1. RAM -> CPU
2. Operación
3. CPU -> RAM
¿3 paso = 3 ciclos de reloj?
Pero si en un mismo paso hace RAM -> CPU y opera con los datos, tenemos 2 instrucciones por ciclo y un "valor IPC" doble.
Esto no es esactamente así.... pero puede servir como ejemplo clarificador.
------------------------------------------------------------------------
------------------------------------------------------------------------
Por último, ya que pega con el resto, os comento en que consiste HyperTheading haciendo uso del ejemplo anterior:
Tenemos los 3 pasos:
1. RAM -> CPU
2. Operación
3. CPU -> RAM
Durante el paso 3, los registros del procesador donde pusimos los datos de la RAM ya no son usados, solo el registro donde esta el resultado ==> Podemos ir cargando nuevos datos para la siguiente operación!!!!!
De aquí que el rendimiento de un procesador 4 núcleos e HT sea inferior que un 8 núcleos con la misma arquitectura y sin HT; son 8 nucleos complemente distinto, no usar 1 para varias cosas a la vez.
------------------------------------------------------------------------
------------------------------------------------------------------------
Espero que esto sirva para clarificar este tema y desmitificar el "a mas MHz mejor!!!!"