Sei sulla pagina 1di 16

Problemas

1. Si le dicen que un procesador alcanza 16 MIPS, ¿puede estar seguro que ejecutará
cualquier programa de 16000 instrucciones en un milisegundo?

Solución
Los MIPS se definen como el número de instrucciones que puede ejecutar un procesador (en
millones) divididos por el tiempo que tardan en ejecutarse:

NI
MIPS
TCPU  106

Los MIPS suelen utilizarse como medida de las prestaciones de un procesador, pero realmente, sólo
permiten una estimación la velocidad pico del procesador, que ni siquiera permite realizar una
comparación fiable entre procesadores, dado que:

 No se tiene en cuenta las características del repertorio de instrucciones de


procesador. Se da el mismo valor a una instrucción que realice una operación
compleja que a una instrucción sencilla.

 Pueden tener valores inversamente proporcionales a la velocidad del procesador. Si


un procesador tiene un repertorio de instrucciones de tipo CISC que permite
codificar un algoritmo con, por ejemplo, 1000 instrucciones, y otro con un repertorio
de tipo RISC lo codifica con 2000, si el primero tarda 1 microsegundo y el segundo
1.5 microsegundos, tendremos que el primer procesador tiene 1000 MIPS y el
segundo 1333 MIPS. Por tanto, si nos fijamos en los MIPS, el segundo procesador
será mejor que el primero, aún habiendo tardado un 50% más de tiempo que el
primero en resolver el mismo problema.

De ahí que incluso se haya dicho que MIPS significa Meaningless Information of Processor Speed
(información sin sentido de la velocidad del procesador).

En relación a la pregunta que se plantea, la respuesta puede tener en cuenta dos aspectos:

 El número de instrucciones que constituyen un programa (número estático de


instrucciones) puede ser distinto del número de instrucciones que ejecuta el
procesador finalmente (número dinámico de instrucciones), ya que puede haber
instrucciones de salto, bucles, etc. que hacen que ciertas instrucciones del código se
ejecuten más de una vez, y otras no se ejecuten nunca. Si la pregunta, al hacer
referencia al número de instrucciones, se refiere al número estático, la respuesta es
que NO se puede estar seguro puesto que puede que al final no se ejecuten 16000
instrucciones.

 Si el repertorio de instrucciones contiene instrucciones que tardan en ejecutarse


tiempos diferentes, para que el programa tardase el mismo tiempo es preciso que se
ejecutase el mismo número de instrucciones y del mismo tipo (en cuanto a tiempo de
ejecución de cada una). En este caso, también, la respuesta es NO.

2. Un programa tarda 94 segundos en ejecutarse en un computador. Teniendo en cuenta los


valores de la Tabla 1, calcule el valor de los MFLOPS normalizados y sin normalizar del
programa.
INSTRUCCIÓN PESO APARICIONES
ADDD 1 25 999 440
SUBD 1 18 266 439
MULTD 1 33 880 810
DIVD 4 15 682 333
COMPARED 1 9 745 930
NEGD 4 2 617 846
ABSD 4 2 195 930
CONVERTD 4 1 581 450

Tabla 1. Valor de normalización y número de apariciones de cada operación en coma flotante del
programa.

Solución
Teniendo en cuenta la definición del número de MFLOPS sin normalizar, y sustituyendo el número
de instrucciones en coma flotante del programa, se tiene:

Número
deinstruccionesFP 109970178

MFLOPS 6
  1.17
TCPU  10 94 106

Si se tienen en cuenta los valores de coste relativo de las instrucciones en coma flotante, los
MFLOPS normalizados se obtienen a partir de la siguiente expresión:

 w  Númerodeinstrucci
i onesFP i

norm 
i 1
MFLOPS
TCPU  106

donde wi es la constante de normalización para cada instrucción FP i, es decir:

4  NDIVD  NNEGD  NABSD  NCONVERTD  1  NADDD  NSUBD NMULTD  NCOMPARED


norm 
MFLOPS
TCPU  106

Sustituyendo los valores correspondientes tenemos:

176202855
norm 
MFLOPS  1.87
94 106

3. ¿Qué es mejor, un procesador superescalar que, en promedio, es capaz de emitir dos


instrucciones cada dos ciclos, o un procesador vectorial cuyo repertorio de instrucciones
puede codificar seis operaciones por instrucción y emite una instrucción cada ciclo?

Solución
Para resolver este problema se utilizan las expresiones del tiempo de CPU generalizadas para
recoger la posibilidad de diversos tipos de arquitecturas de procesador implementando distintos
tipos de paralelismo. Dicha expresión tiene la forma:

 CPE 
TCPU  Noper    Tciclo
 IPE OPI

donde CPE es el número de ciclos entre emisiones, IPE es el número de instrucciones promedio que
se emiten, y OPI es el número de operaciones que codifican las instrucciones del repertorio
máquina.
Así, para el procesador superescalar se tiene que CPE = 2, IPE = 2 y OPI = 1, mientras que para el
vectorial tenemos que CPE = 1, IPE = 1 y OPI = 6, por lo que según la expresión anterior, para el
procesador superescalar se tiene que:

 2 
TCPU superescal
ar  Noperacione
s    Tciclo  Noperacione
s  Tciclo
 2 1

y para el vectorial se tiene:

 1  s  Tciclo
Noperacione
TCPU superescal
ar  Noperacione
s    Tciclo 
 1 6 6

Según estos resultados, el procesador vectorial ofrece los tiempos de ejecución más rápidos.

4. Se pretende escoger entre dos posibles alternativas para implementar los saltos
condicionales en un procesador sin segmentación de cauce:

 ALT1: Una instrucción COMPARE actualiza un código de condición y es


seguida por una instrucción BRANCH que comprueba esa condición.

 ALT2: Una sola instrucción incluye la funcionalidad de las instrucciones


COMPARE y BRANCH.

Hay que tener en cuenta que hay un 20% de saltos condicionales en los programas con la
primera alternativa (ALT1); que las instrucciones BRANCH (de ALT1) y
COMPARE+BRANCH (de ALT2) necesitan 4 ciclos mientras que todas las demás necesitan
sólo 3; y que el ciclo de reloj de ALT1 es un 25% menor que el de ALT2, dado que en éste
caso la mayor funcionalidad de la instrucción COMPARE+BRANCH ocasiona una mayor
complejidad en el procesador.

a) Determine cuál de las dos alternativas es mejor.

b) ¿Qué ocurriría si el ciclo de reloj fuese únicamente un 10% mayor para ALT2?

Solución
Para responder a la primera cuestión, nos basaremos en la siguiente ecuación, que estima el tiempo
de ejecución de un programa en un procesador:

TCPU  CPI NI Tciclo

donde CPI es el número medio de ciclos por instrucción, NI es el número de instrucciones, y Tciclo el
tiempo de ciclo del procesador.

INSTRUCCIÓN PROPORCIÓ CPI


N
COMPARE 0.20 × NIALT1 4
BRANCH 0.20 × NIALT1 3
RESTO 0.60 × NIALT1 3
TOTAL NIALT1 3.2

Tabla 2. Número de apariciones y CPI de cada instrucción para la alternativa ALT1.

La Tabla 2 muestra la proporción de apariciones y el CPI de cada tipo de instrucción para la


alternativa ALT1. Como para cada salto hay que hacer una comparación previa, y hay un 20% de
saltos en los programas, necesariamente debe haber otro 20% de comparaciones. El valor de CPI
medio se obtiene mediante la siguiente media ponderada:
 proporción CPI 4  0.20 NI   3  0.20 NI   3  0.60 NI 
i i

CPIALT1  i
 ALT1
 3.2
ALT1 ALT1

 proporción
i
i
NI ALT1

Por tanto, el tiempo de ejecución de la alternativa ALT1 es:

TCPUALT1  3.2 NIALT1  TcicloALT1

Para la alternativa ALT2 hay que tener en cuenta que se reduce el número de instrucciones del
programa, ya que para cada salto se ejecutará una sola instrucción (COMPARE+BRANCH) en vez
de dos (una comparación seguida de un salto). Por tanto, el número de instrucciones del programa
para la alternativa ALT2 es

NIALT2   0.2 NIALT1   0.6 NIALT1

INSTRUCCIÓN PROPORCIÓN CPI


COMPARE + BRANCH 0.20 × NIALT1 4
RESTO 0.60 × NIALT1 3

TOTAL 0.80 × NIALT1 3.25

Tabla 3. Número de apariciones y CPI de cada instrucción para la alternativa ALT2.

La Tabla 3 muestra un resumen del porcentaje de apariciones de cada instrucción así como de su
CPI. El valor medio de CPI para la alternativa ALT2 se obtiene con la siguiente expresión:

4  0.20 NIALT1  3  0.60 NIALT1


CPIALT2   3.25
0.80 NIALT1

Además, se tiene que el ciclo de reloj de la alternativa ALT2 es mas largo que el de la alternativa
ALT1. Concretamente, se dice que el ciclo de la alternativa ALT1 es un 25% menor que el de la
alternativa ALT2, lo que implica que:

TcicloALT1  0.75 TcicloALT2

es decir, que

TcicloALT2  1.33 TcicloALT1

Por tanto, tenemos que el tiempo de ejecución para la alternativa ALT2 es de:

 
TCPUALT2  3.25 NIALT2  TcicloALT2  3.25  0.8 NIALT1  1.33 TcicloALT1  3.458 NIALT1  TcicloALT1

Estos resultados permiten concluir que la alternativa ALT2 no mejora a la alternativa ALT1. Es
decir, aunque un repertorio con instrucciones más complejas puede reducir el número de
instrucciones de los programas, reduciendo el número de instrucciones a ejecutar, esto no tiene que
suponer una mejora de prestaciones si al implementar esta opción la mayor complejidad del
procesador lo hace algo más lento.

En la segunda parte de este problema se nos plantea la posibilidad de que las diferencias entre los
tiempos de ciclo de las dos alterativas no sean tan diferentes. Concretamente, ahora el tiempo de
ciclo de la alternativa ALT2 es un 10% mayor que el de la alternativa ALT1. Por tanto, se cumple
que:

TcicloALT2  1.10 TcicloALT1

Sustituyendo esta nueva expresión en la ecuación del cálculo del tempo de ejecución tenemos que:
 
TCPUALT2  3.25 NIALT2  TcicloALT2  3.25  0.8 NIALT1  1.10 TcicloALT1  2.86 NIALT1  TcicloALT1

Por lo tanto, ahora la segunda alternativa sí que es mejor que la primera. Con el mismo
planteamiento que antes no mejoraba la situación de partida ahora sí conseguimos una mejora. Tan
sólo ha sido necesario que el aumento del ciclo de reloj que se produce al hacer un diseño más
complejo del procesador sea algo menor.

La situación reflejada en este problema pone de manifiesto la necesidad de estudiar la arquitectura


del computador desde un enfoque cuantitativo, y no sólo teniendo en cuenta razonamientos que
pueden ser correctos, pero que pueden llevar a resultados finales distintos según el valor de las
magnitudes implicadas.

5. Considere un procesador no segmentado con una arquitectura de tipo LOAD/STORE en la


que las operaciones sólo utilizan como operandos registros de la CPU. Para un conjunto de
programas representativos de su actividad se tiene que el 43% de las instrucciones son
operaciones con la ALU (3 CPI), el 21% son LOAD (4 CPI), el 12% son STORE (4 CPI) y el
24% son BRANCH (4 CPI).

Además, un 25% de las operaciones con la ALU utilizan operandos en registros, que no se
vuelven a utilizar. ¿Se mejorarían las prestaciones si, para sustituir ese 25% de
operaciones se añaden instrucciones con un dato en un registro y otro en memoria,
teniendo en cuenta que para ellas el valor de CPI es 4 y que ocasionarían un incremento
de un ciclo en el CPI de los las instrucciones BRANCH, pero que no afectan al ciclo de
reloj?

Solución
En primer lugar se calcula el tiempo de CPU para la situación inicial. Para ello, se tiene que:

CPIINI  3 0.43 4  0.21 0.12 0.24  3.57

y, por tanto:

TCPUINI  CPIINI  NIINI  Tciclo  3.57 NIINI  Tciclo

En la nueva situación se tiene la distribución de instrucciones y ciclos que indica la Tabla 4, en la


que se muestra que, al introducir las nuevas instrucciones de operación con la ALU con uno de los
operandos en memoria:

 Se reduce el 25% de las 0.43 × NIINI instrucciones de operación con la ALU y


operandos en registros a las que las nuevas instrucciones sustituyen.

 Se reduce en 0.25 × 0.43 × NIINI el número de instrucciones LOAD, ya que


según se indica en el enunciado, esas instrucciones sólo están en el programa
para cargar uno de los operandos de las operaciones con la ALU, que no se
vuelven a utilizar nunca más.

 Hay que contabilizar las 0.25 × 0.43 × NIINI nuevas instrucciones de operación
con la ALU que se introducen en el repertorio (y que sustituyen a las
operaciones con la ALU y operandos en registros).
INSTRUCCIÓ PROPORCIÓN CPI
N
ALU r-r (0.43 – 0.25 × 0.43) × 3
NIINI
LOAD (0.21 – 0.25 × 0.43) × 4
NIINI
ALU r-m 0.25 × 0.43 × NIINI 4
STORE 0.12 × NIINI 4
BRANCH 0.24 × NIINI 5
TOTAL 0.8925 × NIINI 3.908

Tabla 4. Número de apariciones y CPI de cada instrucción en el caso de añadir las nuevas
instrucciones de operación con la ALU.

Como resultado, al sumar todas las instrucciones que se tienen en la nueva situación, el número
total de instrucciones se reduce (lógicamente, ya que se han ahorrado instrucciones LOAD), siendo
igual a 0.8925 × NIINI.

Teniendo en cuenta la nueva distribución de instrucciones y sus nuevos CPI, se tiene que:

3  0.43 0.25 0.43  4  0.21 0.25 0.43  4 0.25 0.43 4 0.12 5 0.24
CPIALT   3.908
0.8925

Como el tiempo de ciclo no varía se tiene que:

TCPUALT  CPIALT  NIALT  Tciclo  3.908 0.8925


 NIINI  Tciclo  3.488 NIINI  Tciclo

Como se puede ver, en este caso, el tiempo de ejecución en el procesador modificado es menor, por
lo que se mejoran las prestaciones. Sin embargo, si el porcentaje de instrucciones sustituidas fuese
un 20% en lugar de un 25%, se puede ver que

CPIALT2  3.9302

NIALT2  0.914 NIINI

y, por tanto:

TCPUALT  CPIALT 2  NIALT2  Tciclo  3.9302


 0.914 NIINI  Tciclo  3.59 NIINI  Tciclo
2

Ahora, en cambio, la segunda opción no mejora la original. Como conclusión, se puede indicar que
una determinada decisión de diseño puede suponer una mejora en el rendimiento del computador
correspondiente según sean las características de las distribuciones de instrucciones en los
programas que constituyen la carga de trabajo característica del computador. Por tanto, queda
clara también la importancia que tiene el proceso de definición de conjuntos de benchmarks para
evaluar las prestaciones de los computadores, y las dificultades que pueden surgir para que los
fabricantes se pongan de acuerdo en aceptar un conjunto de benchmarks estándar.

6. Se ha diseñado un compilador para la máquina LOAD/STORE del problema anterior. Ese


compilador puede reducir en un 50% el número de operaciones con la ALU, pero no
reduce el número de instrucciones LOAD, STORE, y BRANCH. Suponiendo que la
frecuencia de reloj es de 50 MHz, ¿Cuál es el número de MIPS y el tiempo de ejecución
que se consigue con el código optimizado? Compárelos con los correspondientes del
código no optimizado.
Solución
En la situación inicial del problema anterior se tenía que

TCPUINI  CPIINI  NIINI  Tciclo  3.57 NIINI  Tciclo

y, por lo tanto

NIINI NIINI F 50MHz


MIPSINI  6
 6
   14.005
TCPUINI  10 CPIINI  NIINI  Tciclo 10 CPIINI 3.57

En el caso de la mejora que se propone en el problema, se tiene la distribución de instrucciones y


ciclos que indica la Tabla 5, en la que se muestra que se reduce el número de operaciones con la
ALU a la mitad, y que, por tanto, también se reduce el número total de instrucciones a ejecutar:

NIALT  0.785 NIINI

Teniendo en cuenta la nueva distribución de instrucciones y sus nuevos CPI, se tiene que:

3  0.43 0.43/ 2  4  0.21 0.12 0.24


CPIALT   3.72
0.785

INSTRUCCIÓ PROPORCIÓN CPI


N
ALU (0.43 / 2) × NIINI 3
LOAD 0.21 × NIINI 4
STORE 0.12 × NIINI 4
BRANCH 0.24 × NIINI 4
TOTAL 0.785 × NIINI 3.72

Tabla 5. Número de apariciones y CPI de cada instrucción en el caso de añadir las nuevas
instrucciones de operación con la ALU.

Como el tiempo de ciclo no varía se tiene que:

TCPUALT  CPIALT  NIALT  Tciclo  3.72 0.785 NIINI  Tciclo  2.92 NIINI  Tciclo

El número de MIPS para este caso es:

NIALT NIALT F 50MHz


MIPSALT  6
 6
   13.44
TCPUALT  10 CPIALT  NIALT  Tciclo 10 CPIALT 3.72

Como se puede ver, con el nuevo compilador se consigue una reducción de tiempo de ejecución (es
un 21% menor), pero sin embargo, el número de MIPS es menor. Se tiene aquí un claro ejemplo de
que los MIPS dan una información inversamente proporcional a las prestaciones. La razón de esta
situación, en este caso, es que se ha reducido el número de las instrucciones que tenían un menor
valor de CPI. Así, se incrementan las proporciones de las instrucciones más lentas en el segundo
caso (por eso crece el valor de CPI), y claro, el valor de los MIPS se reduce. No obstante, hay que
tener en cuenta que aunque las instrucciones que se ejecutan son más lentas, hay que ejecutar un
número mucho menor de instrucciones, y al final, el tiempo de ejecución se reduce.

7. Una determinada empresa dedicada al desarrollo de microprocesadores ha recibido dos


propuestas de proyectos viables de sus equipos de ingenieros, pero sólo tiene presupuesto
para invertir en uno de ellos. El primero tiene un coste de un millón de euros y se basa en
la mejora de su unidad de procesamiento de números en coma flotantes para reducir el
CPI de dichas operaciones a la mitad, mientras que el segundo consiste en la aplicación de
nuevas técnicas de optimización de código para conseguir que el compilador que genera
código ejecutable para su familia de microprocesadores reduzca el número de
instrucciones de los programas en un 15%. Este último proyecto tiene un coste de
quinientos mil euros. ¿Qué proyecto debería seleccionar?

NOTA: La familia de procesadores de esta empresa tiene una arquitectura de tipo LOAD/STORE
en las que las operaciones sólo utilizan como operandos registros de la CPU. Para un
conjunto de programas representativos de su actividad se tiene que el 25% de las
instrucciones son operaciones con la ALU (3 CPI), el 18% son operaciones con números en
coma flotante (8 CPI), el 21% son LOAD (4 CPI), el 12% son STORE (4 CPI) y el 24% son
BRANCH (4 CPI).

Solución
El primer paso será calcular el tiempo de ejecución promedio de los programas en la arquitectura
actual para luego ver cómo afecta cada una de las mejoras propuestas. La ecuación que determina
el tiempo de ejecución de un programa es la siguiente:

TCPU  CPI NI Tciclo

A partir de los CPI de cada tipo de instrucción determinamos el CPI medio como:

CPI=0.25  8+ 0.21


 3+0.18 +0.12   4=4.47
+0.24

Con lo que el tiempo de ejecución promedio para los programas será de:

TCPU  4.47 NI Tciclo

El primero de los proyectos propone reducir el CPI de las instrucciones en coma flotante a la mitad,
así que el CPI medio de los programas sería:

CPI1 =0.25  4+ 0.21


 3+0.18 +0.12   4=3.75
+0.24

El tiempo de ejecución de los programas será de:

TCPU1  3.75 NI Tciclo

Por lo que la ganancia obtenida sería de:

4.47 NI Tciclo


S1   1.192
3.75 NI Tciclo

La segunda alternativa consiste en mejorar el compilador para que se reduzca el tamaño de los
programas un 10%, así que el tiempo promedio de ejecución sería ahora de:

TCPU2  4.47 0.85 NI Tciclo  3.7995


 NI Tciclo

En este caso la ganancia obtenida sería de:

4.47 NI Tciclo


S2   1.176
3.7995 NI Tciclo

Como vemos, la ganancia que se obtiene es similar con las dos alternativas, siendo sensiblemente
mejor la primera de ellas, pero además de las prestaciones obtenidas, un factor determinante en la
toma de decisiones es el coste que tendrá cada una de las mejoras. La relación prestaciones/coste
de la primera alternativa es de:
S1 1.192
R1    1.192 106
coste
1 1 106

Mientras que para la segunda alternativa tenemos:

S2 1.176
R2    2.352 106
coste
2 0.5 106

Como vemos, R2 es prácticamente el doble que R1, ya que el coste de la segunda alternativa es la
mitad que el de la primera. Por tanto, se debería escoger el segundo proyecto, ya que obtiene una
mejora en prestaciones similar a la del primero y cuesta solo la mitad.

8. Deduzca la ley de Amdahl para la mejora de la velocidad de un procesador suponiendo que


hay una probabilidad f de no utilizar un recurso del procesador cuya velocidad se
incrementa en un factor p.

a) ¿Es cierto que para una determinada mejora realizada en un recurso, al


aumentar el factor de mejora, llega un momento en que se satura el
incremento de velocidad que se consigue para el conjunto de programas que
constituyen la carga de trabajo del computador?

b) ¿Es cierto que la cota para el incremento de velocidad que establece la ley de
Amdahl crece a medida que aumenta el valor del factor de mejora aplicado al
recurso?

Solución
Suponiendo que el tiempo medio de ejecución de los programas en el procesador sin la mejora es T,
y que por término medio hay una fracción f del tiempo de ejecución T en el que no se utiliza el
recurso mejorado, se tendrá que el tiempo de ejecución con la mejora es:

Tmejora f  T 
 1 f   T
p

Es decir el tiempo será mayor que la fracción de tiempo f × T en la que no se puede aplicar la
mejora más el tiempo (1 – f ) × T en el que se puede aplicar la mejora (que es igual a p), y que por
lo tanto se habrá reducido en un factor igual a esa mejora (es decir, p).

De esta forma, la expresión de la ganancia de velocidad que se obtiene corresponde a la ley de


Amdahl:

T T p p
S   
Tmejora f T 
 1 f   T p f  1 f 1 f  p 1
p

Una vez que hemos deducido la ley de Amdahl, pasamos a contestar la primera de las cuestiones.
Como se puede ver a partir de la expresión de la ley de Amdahl, cuando p tiende a infinito, la cota
para la ganancia de la velocidad tiende a 1 / f. Por lo tanto, cuanto menor es la fracción de tiempo
en la que no se aprovecha la mejora realizada, mayor será el incremento de velocidad máximo que
se podría conseguir:

p 1
limS  lim 
p p 1 f  p 1 f

Para contestar a la segunda cuestión, se calcula la derivada de S con respecto a p, para un valor de
f constante:

S 1 f
 0
p  1 f  p 1  2
Como la derivada es positiva (como f es menor o igual que 1 el numerador es positivo, y el
denominador es positivo) se tiene que al crecer p, crece el valor de de la ganancia, aunque ese
crecimiento es menor a medida que crece p (p está en el denominador y por tanto al crecer p la
derivada tiende a 0), y como se ha visto en la respuesta a la cuestión anterior tiende a 1 / f.

9. Un empresario está pensando en actualizar el servidor Web de su empresa. El problema es


que no está seguro de si debería cambiar el procesador por uno que funciones a más
frecuencia, o bien comprar un disco duro más rápido. Si el servidor está accediendo a
ficheros almacenados en el disco duro el 50% del tiempo de ejecución, el 15% del tiempo
está procesando datos y el resto del tiempo está realizando otro tipo de operaciones de
E/S y memoria, ¿debería comprar un disco duro un 60% más rápido o bien cambiar el
procesador de 1 GHz por uno de 3 GHz? Utilice la ley de Amdahl para ayudarle a escoger
la mejor alternativa.

Solución
La primera alternativa que se nos propone es evaluar cuánto se mejoraría si se cambia el disco
duro del servidor. Atendiendo al enunciado, tendríamos un factor de mejora p1 = 1.6 y un
porcentaje de uso de tiempo de ejecución en el que se usa el disco duro del 50%, con lo que f1 (que
sería la fracción de tiempo en la que no se usa el recurso) será f1 = 0.5. Por tanto, el límite para la
ganancia que se puede obtener con esta mejora será:

p1 1.6
S1    1.23
1 f1 p1  1 1 0.5 1.6 1

Otra alternativa podría ser cambiar el procesador del servidor. En este caso, el factor de mejora
sería de p2 = 3 y el porcentaje de tiempo en el que no se usa el procesador sería f2 = 0.85. En este
caso, la mejora máxima estaría acotada por:

p2 3
S2    1.11
1 f2  p2  1 1 0.85 3 1

Teniendo en cuenta los resultados, se debería cambiar el disco duro del servidor.

10. Suponga que, en los programas que constituyen la carga de trabajo habitual de un
procesador, las operaciones de coma flotante consumen un promedio del 10% del tiempo
de ejecución de los programas y las de enteros un 20%. Las operaciones de coma flotante
se hacen en una unidad funcional con un retardo de 6 ciclos y las de enteros en otra
unidad con un retardo de 2 ciclos. ¿Qué es mejor reducir un ciclo el retardo de la unidad
de enteros o 4 ciclos el de la de coma flotante? ¿Cuál es la máxima ganancia de velocidad
que se puede obtener por mejoras en la unidad de enteros? ¿Y por mejoras en la de coma
flotante?

Solución
En el caso de que se mejore la unidad de ejecución de operaciones con enteros tenemos que:

fent  1 0.2  0.8


pent  2/  2  1  2

mientras que si se mejora la unidad de ejecución de operaciones en coma flotante:

fFP  1 0.1  0.9


pFP  6/  6  4  3
Para ver qué mejora es más conveniente, simplemente debemos aplicar la ley de Amdahl. Si se
mejorara la unidad de enteros, la ganancia sería de:

2
Sent   1.1
1 0.8 2  1

Por el contrario, si se mejorara la unidad de coma flotante, se obtendría una ganancia de:

3
SFP   1.07
1 0.9 3 1

Con lo que, teniendo en cuenta las cargas de trabajo habituales ejecutadas, conviene más realizar
la mejora a la unidad de enteros.

Si la mejora que se realiza en las unidades de ejecución fuese máxima, es decir, p → ∞, la ganancia
máxima que se podría obtener sería:

1 1
Smaxent    1.25
fent 0.8
1 1
SmaxFP    1.11
fFP 0.9

11. Ha aparecido en el mercado una nueva versión de un procesador en la que la única mejora
con respecto a la versión anterior es una unidad de coma flotante mejorada que permite
reducir el tiempo de las instrucciones de coma flotante a tres cuartas partes del tiempo
que consumían antes. Si las instrucciones de coma flotante consumen un promedio del
13% del tiempo en los programas que constituyen la carga de trabajo habitual del
procesador antiguo:

a) ¿Cuál es la máxima ganancia de velocidad que puede esperarse en los


programas si se sustituye el procesador de la versión antigua por el nuevo?

b) ¿Cuál es la máxima ganancia de velocidad que, en promedio, puede esperarse


en los programas debido a mejoras en la velocidad de las operaciones en
coma flotante?

c) ¿Cuál debería ser el porcentaje de tiempo de cálculo con datos en coma


flotante (en la versión antigua del procesador) en sus programas para esperar
una ganancia máxima de 4?

d) En la situación anterior, ¿cuánto debería reducirse el tiempo de las


operaciones en coma flotante con respecto a la situación inicial para que la
ganancia máxima sea 2?

Solución
Teniendo en cuenta que el tiempo de las instrucciones de coma flotante se reduce tres cuartas
partes y que el porcentaje de instrucciones de coma flotante es el 13%, podemos calcular la mejora
de velocidad p = 4/3 (la inversa de la reducción del tiempo), y f = 0.87 (fracción del tiempo original
en que no se aplica el recurso mejorado). Sustituyendo estos dos valores en la ecuación de la ley de
Amdahl podemos obtener la ganancia máxima que se podría alcanzar con el nuevo procesador:

p 43
S   1.034
1 f  p 1 1 0.87 4 3  1

La ganancia máxima que se podría obtener debida a cambios en la unidad de coma flotante se
obtiene cuando la mejora del recurso tiende a infinito:
p 1 1
Smax  lim    1.14
p  1 f  p 1 f 0.87

Si quisiéramos alcanzar una ganancia máxima (cuando p → ∞) igual a 4, tendría que cambiar el
porcentaje de tiempo invertido en procesar operaciones en coma flotante de nuestros programas
(1 – f ). El valor de f se obtiene despejándola de la siguiente expresión:

1
Smax  4
f

De donde se obtiene que f = ¼ = 0.25, o lo que es lo mismo, que el porcentaje de tiempo invertido
en procesar instrucciones en coma flotante en el procesador original debería ser del 75% para que
se pudiera alcanzar una ganancia máxima de 4 debida a mejoras en la unidad de coma flotante.

Por último, si con el valor de f recién calculado se deseara obtener una ganancia máxima de 2 en
los programas, el factor de mejora que se debería aplicar a la unidad de coma flotante se obtendría
despejando p de la siguiente expresión:

Si, al utilizar el valor de f anterior se deseara obtener una mejora de velocidad de 2 en los
programas, la mejora de velocidad en las instrucciones de coma flotante (es decir p) se obtiene a
partir de la ley de Amdahl:

p
S 2
1 0.25 p 1

De donde se obtiene que p = 3, es decir, que el procesamiento de las instrucciones en cama flotante
la instrucción de coma flotante debería hacerse tres veces más rápido.

12. En un procesador no segmentado, que funciona a 300 MHz, hay un 20% de instrucciones
LOAD que necesitan 4 ciclos, un 10% de instrucciones STORE que necesitan 3 ciclos, un
25% de instrucciones con operaciones de enteros que necesitan 6 ciclos, un 15% de
instrucciones con operandos en coma flotante que necesitan 8 ciclos, y un 30% de
instrucciones de salto que necesitan 3 ciclos. Las operaciones con enteros se realizan en
una ALU con un retardo de 3 ciclos, y las de coma flotante en una unidad con un retardo
de 5 ciclos. Utilice la ley de Amdahl para determinar:

a) ¿cuál es la máxima ganancia que se puede obtener por reducción en el tiempo


de las operaciones con enteros en la ALU?

b) ¿cuál es la máxima ganancia que se puede obtener por reducción en el tiempo


de las operaciones en coma flotante?

Solución
La ganancia en velocidad se obtiene como el cociente entre los tiempos de ejecución sin y con la
mejora, así que el primer paso que tomaremos para resolver este problema es calcular el tiempo de
ejecución promedio de los programas en el procesador propuesto en el enunciado. Este tiempo se
obtiene mediante la siguiente expresión:

TCPU  CPI NI Tciclo

donde NI indica el número de instrucciones del programa, CPI los ciclos promedio por instrucción y
Tciclo el tiempo de ciclo del reloj del procesador.

El valor de CPI se obtiene como:


CPI 4 0.2 3 0.1 6 0.25 8 0.15 3 0.3  4.7
LOAD STORE ALU FP BRANCH

En el enunciado también nos piden que utilicemos la ley de Amdahl para obtener la ganancia
máxima, que viene dada por:

p
S
1 f  p 1

donde p es el factor de mejora aplicado al procesador y f es el porcentaje de tiempo que no se


utiliza dicha mejora.

Para obtener la máxima ganancia por la reducción del tiempo en las operaciones con enteros, la
mejora que se hace en la ALU debe ser máxima, es decir p   , y por tanto, la ganancia se
obtendría como:

p 1
Smax  lim 
p 1 f  p 1 f

Por tanto, lo único que nos queda es calcular el valor de f, es decir, el porcentaje de tiempo que no
se usa la ALU. Sabemos que la ALU se emplea en 3 de los 6 ciclos de las instrucciones ALU, dejando
los otros tres ciclos para el resto de las etapas del cauce, por tanto, la ALU se usará:

TALU   0.25
 3  NI Tciclo 0.75 NI Tciclo

y f se obtendrá como la fracción de tiempo en el que no se usa la ALU:

 4.7 0.75  NI Tciclo  0.84


f
4.7 NI Tciclo

Por tanto, la ganancia máxima sería:

1 1
Smax  limS    1.19
p f 0.84

En el segundo apartado se nos pide que se estime máxima ganancia por reducción del tiempo en
operaciones FP. Aunque se podría resolver este apartado de forma análoga al anterior, vamos a
resolverlo de otra forma para mostrar un par de formas diferentes de resolver este tipo de
problemas. Si la mejora en la unidad FP es máxima, las operaciones FP tardarían 0 ciclos, con lo
que las instrucciones FP tardarían sólo 3 ciclos, por tanto, la mejora obtenida en las instrucciones
FP sería de:

tiempo nesFPoriginal 3 5
instruccio 
p   2.6
tiempo nesFPmejoradas3 0
instruccio

Una vez que tenemos la mejora, tenemos que calcular f, es decir, la fracción de tiempo original en
que no se ejecutan instrucciones FP. El tiempo original de las instrucciones FP era de:

TFP   0.15 8  NI Tciclo 1.2 NI Tciclo

Por tanto, podemos calcular f como:

 4.7 1.2  NI Tciclo  0.745


f
4.7 NI Tciclo

Por tanto, la ganancia máxima sería:



p 2.6
S   1.19
1 f  p 1


1 0.7452.6  1 
13. En un programa, que se ejecuta en un procesador no segmentado que funciona a 100
MHz, hay un 20% de instrucciones LOAD que necesitan 4 ciclos, un 15% de instrucciones
STORE que necesitan 3 ciclos, un 40% de instrucciones con operaciones con la ALU que
necesitan 6 ciclos, y un 25% de instrucciones de salto que necesitan 3 ciclos. Si en las
instrucciones con la ALU, la operación de la ALU consume 3 ciclos determine cuál es la
máxima ganancia que se puede obtener si se mejora el diseño de la ALU de forma que se
reduce su tiempo de ejecución a la mitad de ciclos. ¿Para que porcentaje de instrucciones
con la ALU se alcanzaría una ganancia mayor que 1?5 con la mejora indicada?

Solución
El tiempo de CPU en el procesador original se obtiene a partir de la expresión:

TCPUORIG  (0.2 4  0.15 3 0.4 6 0.25 3) NI Tciclo 4.4 NI Tciclo

Con la mejora, el tiempo de las instrucciones de operación con la ALU pasa a ser igual a 4.5 ciclos
en lugar de 6 ya que los tres ciclos que se necesitaban para hacer la operación en la ALU se
reducen a la mitad (1.5 ciclos). Por tanto, el tiempo de CPU con la mejora es

TCPUMEJ  (0.2 4  0.15 3 0.4 4.5 0.25 3) NI Tciclo 3.8 NI Tciclo

y la ganancia de velocidad:

TCPUORIG 4.4 NI Tciclo


S   1.158
TCPUMEJ 3.8 NI Tciclo

Para determinar el porcentaje de instrucciones de ALU a partir del que se obtiene una ganancia
igual a 1.5 hacemos uso de la ley de Amdahl. El factor de mejora que se obtiene en el
procesamiento de instrucciones que usan la ALU es de:

ciclos
usados  ciclos
porla ALUoriginal usados delasetapas 3 3
porel resto
p   1.33
ciclos
usados
porla ALUmejorada ciclos
usados delasetapas 3  3
porel resto
2

y para obtener el valor de f, sólo hay que despejarla de la siguiente expresión:

p 1.33
S  1.5  
1 f  p 1 1 f  1.33 1

Como se obtiene un valor de f ≤ – 0.34, y por definición debería estar acotado entre 0 y 1,
concluimos que es imposible conseguir la ganancia de 1.5 con la mejora que nos indican en el
enunciado.

14. Suponga el siguiente fragmento de código:

ld f1, b ; cargar en f1 el valor de b


add r1, r0, a ; apuntar r1 donde empieza a[ ]
ld r2, N ; cargar en r2 el número de iteraciones
loop:ld f2, 0(r1) ; cargar f2 con a[i]
ld f3, 4(r1) ; cargar f3 con a[i+1]
addf f4, f3, f2 ; f4=a[i+1]+a[i]
mulf f4, f4, f1 ; f4=f4*b
sf 8(r1), f4 ; almacenar f4 en a[i+2]
add r1, r1, #4 ; apuntar a a[i+1]
sub r2, r2, #1 ; queda una iteración menos
bnez r2, loop
add r5, r0, b ; apuntar r5 donde empieza b[ ]
sf 0(r5), f4 ; almacenar f4 (a[N+1]) en b[0]
a) Si ha tardado 0.25 segundos en ejecutarse, ¿cuántos GFLOPS se han
alcanzado suponiendo que el producto y la suma en coma flotante tienen un
coste similar?

b) Si sabe que el procesador que se está utilizando es de 2 GHz ¿Qué podría


decir respecto al tipo de procesador utilizado teniendo en cuenta el valor de
CPI?

NOTA: Suponga que N = 108, que a es un array de números en coma flotante, y que b es otro
número en coma flotante.

Solución
Para obtener los GFLOPS hay que tener en cuenta el número de operaciones en coma flotante que
se realizan (2, es decir una suma y un producto) en cada iteración y multiplicarlas por el número de
iteraciones (108). Puesto que se tardan 0.25 segundos en ejecutarlas se tiene que:

Número
deinstrucci
onesFP 2 108
GFLOPS   0.8
TCPU 109 0.25 109

Para ver el tipo de procesador a partir del valor del CPI hay que determinar primero el valor de
CPI. En la expresión

CPI NI
TCPU  CPI NI Tciclo 
F

conocemos que TCPU = 0.25 segundos, que F = 2 GHz, y que NI = 5 + 8 × 108, por tanto, despejando
se tiene que

TCPU F 0.25 2 109


CPI  1
NI 5 8 108

No hace falta hacer los cálculos para comprobar que CPI es menor que 1 y, por lo tanto, el
procesador termina más de una instrucción por ciclo (IPC = 1 / CPI). Según esto, el procesador
puede ser un procesador superescalar o VLIW.

15. Suponga el siguiente bucle:

for (i=0; i<N; i++) a[i+2]=(a[i+2]+a[i+1]+a[i])*b;


a) El programa debe completarse en menos de 0.25 segundos. ¿Cuántos
GFLOPS se necesitan como mínimo suponiendo que el producto y la suma en
coma flotante tienen un coste similar?

b) Suponga que el programa en ensamblador tiene 7N instrucciones, que se ha


ejecutado en un procesador a 2 GHz, y que no ha completado ninguna
instrucción (por razones de dependencias entre instrucciones y retardos de
memoria) en el 30% de los ciclos que ha consumido en los 0.25 segundos en
que ha estado ejecutándose. ¿Cual es el número medio de instrucciones que
el procesador tiene que poder completar por ciclo?

c) Considerando que ese número medio de instrucciones por ciclo es el que


puede completar el procesador como máximo, utilice la ley de Amdahl para
estimar la máxima ganancia de velocidad que se puede conseguir si se
incrementa en una instrucción por ciclo más ese número.
d) ¿Es mejor alternativa dejar el procesador tal y como está (sin incrementar la
instrucción por ciclo en el 70% de los ciclos) y, en cambio, reducir el número
de ciclos en los que no se terminan instrucciones (por mejoras mediante
optimizaciones de código que aprovechen más eficazmente la
microarquitectura del procesador) de forma que pase del 30% al 20% de los
ciclos iniciales?

NOTA: Suponga que N = 108, que a es un array de números en coma flotante, y que b es otro
número en coma flotante.

Solución
Para calcular el número de GFLOPS necesarios sólo hay que dividir el número de operaciones en
coma flotante entre el tiempo:

Número
deinstrucci
onesFP 3 108
GFLOPS   1.2
TCPU 109 0.25 109

Como nos dicen en el enunciado, de los 0.25 segundos que tarda el programa, el 30% del tiempo se
emplea en esperar a que se resuelvan riesgos de datos, estructurales, etc., por lo que realmente el
programa está ejecutándose sólo el 70% de este tiempo. Por tanto, si el procesador funciona a una
frecuencia de 2 GHz, el número de ciclos necesarios para completar el programa es:

Nciclosdeejecución TCPU  F  fejecución 0.25 2 109  0.7  3.5 108

Una vez que hemos calculado el número de ciclos que invierte el procesador en ejecutar el
programa, podemos obtener el número de instrucciones que el procesador debe ejecutar por ciclo:

NI 7 108
IPC  2
Nciclosdeejecución 3.5 108

Para calcular la ganancia máxima que se podría alcanzar si se ejecutaran tres instrucciones por
ciclo en vez de dos utilizaremos la ley de Amdahl. Para ello debemos obtener los valores de los
parámetros p y f. El factor de mejora p se calcula como:

3
p  1.5
2

El porcentaje de tiempo que no se usa la mejora es justo el porcentaje de tiempo que no se usa el
procesador, que como nos dicen en el enunciado es el 30% del tiempo, tenemos que f = 0.3. Una
vez determinados estos parámetros, la ganancia máxima se estime mediante:

p 1.5
S   1.3
1 f  p 1 1 0.3 1.5 1

Por último, se nos propone otra posible mejora, que consiste en dejar el procesador tal y como está
y optimizar el código para que esté ocioso sólo el 20% del tiempo en vez del 30%. En este caso, la
ganancia en velocidad se obtendría como:

Toriginal 70 30
S2    1.11
Toptimizado 70 20

Una vez estimada la ganancia, como S > S2, podemos concluir que nos interesa más la mejora
propuesta en primer lugar.

Potrebbero piacerti anche