Preguntas: Moisés E. Ramírez G. | UTM |

Acelerar el caso común

Quizá el principio más importante y generalizado del diseño de computadoras sea acelerar el caso común: al realizar un diseño, favorecer el caso frecuente sobre el infrecuente.

Este principio también se aplica cuando se determina cómo emplear recursos, ya que el impacto de hacer alguna ocurrencia más rápida es mucho mayor si la ocurrencia es frecuente. Mejorar el evento frecuente en lugar del evento raro, evidentemente, también ayudará a aumentar el rendimiento. Además, el caso frecuente es, a menudo, más simple y puede realizarse de forma más rápida que el caso infrecuente.

Por ejemplo, cuando sumamos dos números en la CPU, podemos esperar que el desbordamiento sea una circunstancia infrecuente y, por tanto, podemos mejorar el rendimiento optimizando el caso más común de ausencia de desbordamiento. Este hecho puede ralentizar la situación en la que se presente un desbordamiento, pero si este caso es infrecuente, el rendimiento global mejorará al optimizar el caso normal.

Al aplicar este sencillo principio, hemos de decidir cuál es el caso frecuente y cómo se puede mejorar el rendimiento haciendo este caso más rápido. Una ley fundamental, denominada Ley de Amdahl, puede utilizarse para cuantificar este principio.


Ley de Amdahl

El aumento de rendimiento que puede obtenerse al mejorar alguna parte de una computadora puede calcularse utilizando la Ley de Amdahl.
La Ley de Amdahl establece que la mejora obtenida en el rendimiento al utilizar algún modo de ejecución más rápido está limitada por la fracción de tiempo que se pueda utilizar ese modo más rápido.
La Ley de Amdahl define la ganancia de rendimiento o aceleración (speedup) que puede lograrse al utilizar una característica particular.
Supongamos que podemos hacer una mejora en una máquina que cuando se utilice aumente su rendimiento. La aceleración es la relación:

Alternativamente

La aceleración nos indica la rapidez con que se realizará una tarea utilizando una máquina con la mejora con respecto a la máquina original. La Ley de Amdahl nos da una forma rápida de calcular la aceleración, que depende de dos factores:

  1. La fracción del tiempo de cálculo de la máquina original que pueda utilizarse para aprovechar la mejora. Por el ejemplo, si 20 segundos del tiempo de ejecución puede utilizar la mejora de un programa que toma 60 segundos en total, la fracción es 20 /60. Este valor, que se llama Fracción mejorada, es siempre menor o igual que 1.
  2. La optimización lograda por el modo de ejecución mejorado; es decir, cuánto más rápido con la que se ejecutaría la tarea si solamente se utilizase el modo mejorado. Este valor es el tiempo del modo original con respecto al tiempo del modo mejorado. Si el modo mejorado toma 2 segundos para alguna porción de programa que puede usar el modo completamente mientras que el modo original tomaba 5 segundos para la misma porción de programa, la mejora es 5/2. Este valor es siempre mayor que 1 y se llama Aceleración mejorada.
El tiempo de ejecución utilizando la máquina original con el modo mejorado será el tiempo empleado utilizando la parte no mejorada de la máquina más el tiempo empleado utilizando la parte mejorada.

Ejemplo
Suponer que estamos considerando una mejora que corra diez veces más rápida que la máquina original, pero sólo es utilizable el 40% del tiempo. ¿Cuál es la aceleración global lograda al incorporar la mejora?

Respuesta
Fracción mejorada = 0.4
Aceleración mejorada = 10
Aceleración global = 1/( 0.6 + 0.4/10) = 1.5625

La Ley de Amdahl expresa la ley de rendimientos decrecientes: la mejora incrementar en la aceleración conseguida por una mejora adicional en el rendimiento de una parte del cálculo disminuye tal como se van añadiendo mejoras. Un corolario importante de la Ley de Amdahl es que si una mejora sólo es utilizable por una fracción de una tarea, no podemos aumentar la velocidad de la tarea más que el recíproco de 1 menos esa fracción.
Un error común al aplicar la Ley de Amdahl es confundir «fracción de tiempo convertido para utilizar una mejora» y «fracción de tiempo después de que se utiliza la mejora». Si, en lugar de medir el tiempo que podría utilizar la mejora en un cálculo, midiésemos el tiempo después que se ha utilizado la mejora, los resultados serían incorrectos.
La Ley de Amdahl puede servir como guía para ver cómo una mejora aumenta el rendimiento y cómo distribuir los recursos para mejorar la relación costo/rendimiento. El objetivo, claramente, es emplear recursos de forma proporcional al tiempo que se requiere en cada parte.

Rendimiento del CPU

La mayoría de las computadoras se construyen utilizando un reloj que funciona a una frecuencia constante.
Estos eventos discretos de tiempo se denominan pulsos, pulsos de reloj, períodos de reloj, ciclos o ciclos de reloj.
Los diseñadores de computadoras referencian el tiempo de un período de reloj por su duración (por ejemplo, 10 ns) o por su frecuencia (por ejemplo, 100 MHz).
El tiempo de CPU para un programa puede expresarse entonces de dos formas:

Tiempo de CPU = Ciclos de reloj de CPU para un programa x Duración del ciclo de reloj

o de otra forma:

Además del número de ciclos de reloj para ejecutar un programa, también podemos contar el número de instrucciones ejecutadas - la longitud del camino de instrucciones o el recuento de instrucciones (IC, instruction count). Si conocemos el número de ciclos de reloj y el recuento de instrucciones podemos calcular el número medio de ciclos de reloj por instrucción (CPI):

Esta medida del rendimiento del CPU proporciona una nueva percepción en diferentes estilos de repertorios de instrucciones e implementaciones.
Al transponer el IC en la fórmula anterior, los ciclos de reloj pueden definirse como ICCPI. Esto nos permite utilizar el CPI en la fórmula del tiempo de ejecución:

Tiempo de CPU = IC x CPI x Duración del ciclo de reloj

o también :

Como demuestra esta fórmula, el rendimiento del CPU depende de tres características: ciclo de reloj (o frecuencia), ciclos de reloj por instrucción (CPI), y recuento de instrucciones (IC). No se puede cambiar ninguna de ellas sin tener en cuenta las demás, ya que las tecnologías básicas involucradas al cambiar una característica también son interdependientes:

Frecuencia de reloj - Tecnología hardware y organización
CPI - Organización y arquitectura a nivel lenguaje máquina
IC - Arquitectura del nivel lenguaje máquina y tecnología de compiladores.

A veces es útil, al diseñar el CPU, calcular el número total de ciclos de reloj de la CPU como:

donde ICi representa el número de veces que se ejecuta la instrucción i en un programa y CPIi representa el número medio de ciclos de reloj para la instrucción i.

Esta forma puede utilizarse para expresar el tiempo de CPU como:

y el CPI global como:

La última forma del cálculo de CPI multiplica cada CPI i individual por la fracción de ocurrencias en un programa. CPI i debe medirse, y no calcularse a partir de una tabla al final del manual de referencia, ya que debe incluir fallos de cache y demás ineficiencias del sistema de memoria.

Ejemplo:
Suponga hemos hecho las siguientes medidas:
Frecuencia de operaciones de punto flotante = 25%
Promedio de operaciones de CPI relativamente de operaciones de punto flotante = 4.0
Promedio de operaciones de CPI relativamente de todas otras operaciones = 1.33
Frecuencia de las operaciones FPSQR = 2%
CPI de FPSQR = 20

Suponer que estamos considerando dos alternativas:
una reduce el CPI de FPSQR a 2;
otra reduce el promedio de CPI de todos las operaciones de punto flotante a 2.
Comparar estas dos alternativas de diseño.

Respuesta

Primero, observamos que solo el CPI cambia, la frecuencia de reloj y el recuento de instrucciones quedan sin cambio. Empezamos con encuentro del CPI original sin ninguna mejora:



Podemos calcular el CPI para FPSQR con mejora:
CPInew FPSQR = CPIoriginal - 0.02 x (CPIold FPSQR - CPIof new FPSQR ) =
= 2.0- 0.02 x (20-2.0) = 1.64

Podemos calcular el CPI con mejora de todas las instrucciones de punto flotante:
CPInew FP = (2 x 0.25)+(1.33 x 0.75) =1.5 Puesto que el CPI con la mejora de todas las instrucciones de punto flotante tiene valor más bajo, entonces el rendimiento será mejor. La aceleración para el caso de mejora de todas las instrucciones de punto flotante es: