Depende de lo que quieres decir con "rendimiento". La canalización generalmente mejora el rendimiento, medido en términos de resultados por unidad de tiempo, pero aumenta la latencia, el tiempo que transcurre desde el principio hasta el final de cualquier cálculo en particular.
A veces lo último es más importante que lo anterior. En particular, si el código tiene muchas ramas condicionales con solo un pequeño número de otras instrucciones entre ellas, la latencia asociada con la decisión de la dirección de cada rama hace que sea imposible mantener la tubería llena de instrucciones útiles.
Por ejemplo, suponga que la conversión de una implementación de un solo ciclo a una canalización de cinco etapas le permite duplicar la velocidad del reloj, pero que una rama condicional requiere que limpie la tubería. Si el 20% de las instrucciones son ramas condicionales, la implementación segmentada ya se reduce al mismo rendimiento que la implementación original.
Una máquina de un solo ciclo usa cada ciclo de reloj, por lo que a 1 GHz, se necesitan 5 ns para ejecutar 5 instrucciones.
La máquina canalizada funciona a 2 GHz, por lo que descodifica las 5 instrucciones en 5 ciclos de reloj, o 2.5 ns. Pero se necesitan otros 5 ciclos (2.5 ns) hasta que se conozca el resultado de la rama, durante el cual no se pueden emitir otras instrucciones para la tubería. Solo después del décimo ciclo se puede descodificar la siguiente instrucción útil, lo que significa que esta máquina también tomó un total de 5 ns para ejecutar esas mismas instrucciones.