[HACK] Microprocessors, pipelines and clock speeds

Jesus Cea jcea at argo.es
Sun Jun 5 19:28:30 CEST 2005


David A. Pérez wrote:
> Supongamos que las otras 4 etapas tardan 2ns, y ahora hemos conseguido
> segmentar la ALU en otras 3 etapas. Tenemos 7 etapas, 6 de las cuales
> son de 2ns y otra de 1ns. Tendriamos que la velocidad maxima serian
> 500 MHz (1/2ns). Lo cual no implica que las instrucciones se ejecuten
> mas rapido porque a pesar de que el reloj va mas rapido, tenemos mas
> etapas (no estoy teniendo en cuenta los registros entre etapas para
> simplificar).

Cada instrucción individual tarda lo mismo, pero usando "pipelining" se 
tienen varias instrucciones simultaneas en ejecución.

> Si no me equivoco, lo ideal seria que todas las etapas duraran lo
> mismo, asi que segumimos segmentando y las 6 etapas de 2ns las
> convertimos en 12 etapas de 1ns, mas la otra que teniamos tenemos 13
> etapas de 1ns. Velocidad? 1 Ghz (otra vez, teoricamente, soy
> consciente de que no estamos teniendo en cuenta muchos otros
> factores).

Correcto. En un mundo ideal, es así.

En la práctica influjen muchos otros factores, como el consumo de 
energía, la "sobrecarga" que implica la segmentación, las ineficiencias 
debido a los saltos en la ejecución de código y en la velocidad de 
acceso a la memoria, interdependencia entre instrucciones, etc.

En teoría, se podrían usar infinitos segmentos, pero dado que cada 
segmento impone una sobrecarga, y que los lenguajes de programación 
actuales no exponen suficiente paralelismo para llenar una "pipeline" 
"larga", una "pipeline" excesivamente larga es contraproducente.

> Segun tu ejemplo, partiamos de 5 etapas, la ALU necesitaba 5 ns, las
> otras 2ns (mi ejemplo), total 5ns+(4x2ns) = 13ns. Ahora tenemos 13
> etapas de 1ns, seguimos necesitando 13 ns para ejecutar la
> instruccion. Y no estoy afirmando... pregunto, es correcto elo
> planteamiento?

Teóricamente sí. En la práctica, tener 13 etapas no supondría 1 ns por 
etapa sino, debido a la sobrecarga, digamos que 1.2 ns por etapa. 
Además, el consumo de energía se multiplica casi por tres (al igual que 
el rendimiento). Por último, si la operación en un segmento invalida los 
anteriores (por ejemplo, hay un cambio de flujo), en vez de perder el 
trabajo de 4 etapas, perdemos el de 12, por ejemplo.

> Lo cual puede producir una perdida de rendimiento si el branch
> prediction unit se equivoca no?

En las CPUs actuales, y con los lenguajes de programación "normales", la 
predicción de saltos tiene una importancia crítica. Y cuantas más 
"pipelines" haya, más importante es, porque el trabajo "perdido" en una 
equivocación es mucho mayor.

Por eso un Pentium 4 tiene un predictor de saltos mucho más avanzado que 
un PowerPC. No porque en Intel sean más listos, sino que PowerPC no 
necesita invertir recursos en esa area de su CPU para obtener unos 
resultados "comparables".

-- 
Jesus Cea Avion                         _/_/      _/_/_/        _/_/_/
jcea at argo.es http://www.argo.es/~jcea/ _/_/    _/_/  _/_/    _/_/  _/_/
                                       _/_/    _/_/          _/_/_/_/_/
PGP Key Available at KeyServ   _/_/  _/_/    _/_/          _/_/  _/_/
"Things are not so easy"      _/_/  _/_/    _/_/  _/_/    _/_/  _/_/
"My name is Dump, Core Dump"   _/_/_/        _/_/_/      _/_/  _/_/
"El amor es poner tu felicidad en la felicidad de otro" - Leibniz





More information about the hacking mailing list