UNIVERSIDAD DE EL SALVADOR
FACULTAD DE INGENIERIA Y ARQUITECTURA
ESCUELA DE INGENIERIA DE SISTEMAS INFORMATICOS
ARQUITECTURA DE COMPUTADORAS.
Ejercicios
La computadoras están construidas utilizando un reloj que marca intervalos de tiempo
constantes, que son utilizados para determinar cuando ocurren ciertos eventos dentro
del hardware. A estos intervalos discretos se les llama ciclo de reloj, periodo de reloj,
ticks o simplemente ciclos.
La longitud del ciclo del reloj es el tiempo en que se ejecuta cada ciclo del reloj, por
ejemplo: 2 ns. La velocidad de reloj se define como el número de ciclos por segundo,
usualmente expresado en MHz. La velocidad de reloj se puede expresar como el
inverso del ciclo de reloj.
Ej. Si tengo un procesador cuyo ciclo de reloj es 2ns. Determinar cuál es la velocidad
del reloj.
1/(2x10-9) = 500 x 106 = 500 MHz
Cuál es el periodo del reloj de un procesador cuya velocidad es 800 MHz?
1/(800x106) = 1.25 ns
Cuál es el periodo del reloj de un procesador cuya velocidad es 2.2 GHz?
1/(2.2x109) = .4545 ns
Si un procesador tiene un ciclo de reloj de .8333 ns, cual es la velocidad del reloj?
1/(.8333x10-9) = 1.2 GHz
CPI, se define como el promedio de ciclos de reloj por instrucción, este valor depende
tanto de la implementación del hardware que estamos utilizando, como de la mezcla
de instrucciones que se ejecutan sobre un fragmento de código. Cuando nos referimos
a instrucciones nos referimos a instrucciones de bajo nivel y no a simple recuento de
líneas de código en C++ o cualquier otro lenguaje de programación.
CPI = ∑ (número de veces que aparece el tipo de instrucción) x (ciclo del tipo de instrucción)
(# Total de instrucciones)
Suponga que el procesador XX Ver. 1.0 tienen las peculiaridades siguientes:
Puede ejecutar 3 tipos de instrucciones:
Aritméticas: (=,+,-,*,/) tardan 4 ciclos de reloj
Condicionales: (if) toman 3 ciclos
Entrada/Salida: toman 25 ciclos
Considere el siguiente fragmento de código:
Codigo Tipo Ciclos
cin > num1; Entrada/Salida 1x25
cin > num2; Entrada/Salida 1x25
num3 = num1 + num2; Aritméticas 2x4
if (num3 > 10) Condicional 1x3
cout << "yes"; Entrada/Salida 1x25
else Condicional 0 por ser parte del “if”
cout << "no"; Entrada/Salida 0 solo se ejecuta 1 de las
dos, en el salto del “if”
Cuantos ciclos de reloj toma ejecutar este código?
86 ciclos del reloj.
*Para este segmento de código cual es promedio de ciclos por instrucción (CPI)?
86/6 = 14.333 ciclos por instrucción
El fabricante del procesador XX, acaba de anunciar la Ver. 2.0 de su procesador, cuyas
únicas diferencias con su predecesor son: La velocidad del reloj es 4 veces mas rápida,
las instrucciones de aritméticas ahora solo toman 2 ciclos y las instrucciones de
entrada/salida toman 18 ciclos.
Cuantos ciclos de reloj toma ejecutar este código?
Ahora toma menos ciclos de reloj, pero que la velocidad del reloj es 4 veces más rápida afecta el tiempo
y no el número de ciclos. 3x18 + 2x2 + 1x3 = 61 ciclos de reloj.
*Cual es promedio de ciclos por instrucción (CPI)?
61/6 = 10.6667 ciclos por instrucción.
La ley de Amdahl, especifica que cuando se realiza una mejora, especifica la posible
mejora en rendimiento total se ve limitada por la cantidad o veces en que se usa la
mejora especifica.
Utilizando los procesadores (XX Ver. 1.0 & Ver. 2.0) del ejercicio anterior, calcular la
mejora en rendimiento en %, para un programa cuyo tiempo de ejecución está
compuesto de 50ns de instrucciones Aritméticas, 30ns de instrucciones condicionales y
20ns de instrucciones Entrada/Salida.
Mejora en instrucciones aritméticas:
(4-2)/4 = .5 (una mejora del 50%)
Mejora en instrucciones de entrada/salida:
(25-18)/25 = .28 (una mejora del 28%)
Mejoras de rendimiento total:
*Según la ley de Amdahl el tiempo de ejecución de las instrucciones condicionales no se ve afectado por
las mejoras hechas sobre los otros dos tipos de instrucciones.
Tiempo después de las mejoras = 50ns*(1-.5) + 30ns + 20ns*(1-.28) = 69.4ns
La maquina 1 y maquina 2 ambas tiene procesadores que trabajan a 500 MHz, los
procesadores de ambas utilizan arquitecturas diferentes y al compilar un programa
para cada una de ellas se generan programas cuya longitud en instrucciones es
diferente y quedan de la siguiente manera:
Tiempo de ejecución = CPI x No. De instrucciones x ciclo de reloj
Maquina 1: El programa P requiere 100x10 6 instrucciones, esta máquina tiene un CPI
de 2.5
Maquina 1: El programa P requiere 80x10 6 instrucciones, esta máquina tiene un CPI de
3.0
Cuál de estas maquinas es mas rápida? y por cuánto tiempo es mas rápida?
Maquina 1:
100*106 x 2.5 = 2.5*108 ciclos de reloj
2.5*108 ciclos de reloj x 2 ns = .5 segundos
Maquina 2:
80*106 x 3 = 2.4*108 ciclos de reloj
2.4*108 ciclos de reloj x 2 ns = .48 segundos
La maquina 2 es más rápida por 0.02segundos
Ejercicios:
1.0 Se quiere ejecutar un programa de 7.5X10 9 instrucciones en una maquina de 5 Ghz
con un CPI de 0.08, se pide:
a)
Cual es el tiempo de la CPU
b)
Cuando se ejecuta el programa, este tarda 3 segundos en acabar, ¿cual es el
tiempo(%) tomado por la CPU para ejecutar el programa.
2.0 Se dispone de los siguientes datos respecto a dos potentes procesadores y una
determinada tarea de aplicaciones:
Powerd PC a 1.80 Ghz y 700 MIPS de potencia
Pentium 4 de 1.60 GHz de fecuencia y 850 MIPS
Calcular el CPI de cada procesador
3.0 se dispone de un computador dotado del Powerd PC a 1.80 Ghz y otro con el
Pentium 4 de 1.60 Ghz. Se sabe que la CPI del primero es de 5.50 y el del Segundo
es 7 para un determinado porgrama escrito en lenguaje de alto nivel. El programa
que traduce dicho programa a instrucciones maquinas del Powerd PC lo convierte
en 9 millones de dichas instrucciones, mientras que el Pentium 4 lo convierte en
7.2X105 instrucciones. ¿ Cual de los computadores ejecutara mas rápidamente las
tareas?
MIPS
Millones de instrucciones por segundo, una métrica sencilla donde un valor más alto está asociado a un
mayor rendimiento. Como esta medida es inversa al tiempo de ejecución - maquinas más veloces tienen
MIPS más altos. Una observación importante es que no puedo comparar MIPS entre dos maquinas cuya
arquitectura de instrucciones es diferente. El valor de MIPS es muy dependiente del fragmento de
código que se está ejecutando – por lo que podemos tener diferentes MIPS para una misma máquina al
ejecutar dos programas distintos.
MIPS = (Total de Instrucciones) / (Tiempo de ejecución)
MIPS = (Ciclos por segundo) / (Ciclos por instrucción)
1. Un programa con 100 x 10 6 instrucciones se ejecuta en 0.4 segundos, calcular el MIPS para esta
máquina.
MIPS = 100 x 106 / 0.4 = 250 MIPS
2. Un programa tiene un CPI de 2, si la maquina tiene una velocidad de reloj de 500 MHz, se le
pide calcular el valor de MIPS para esta máquina.
MIPS = 500 x 106 / 2 = 250 MIPS
MFLOPS
Una métrica muy similar al MIPS pero mucho más específica, ya que mide solamente las operaciones de
punto flotante. Es muy utilizada para medir el rendimiento de las maquinas en el cálculo para
aplicaciones científicas. Un MFLOPS equivale a 106 FLOPS.
La métrica de MFLOPS al medir únicamente las operaciones de punto flotante, nos permite poder
comparar rendimientos entre maquinas con arquitecturas diferentes.
4. Utilizando la tabla siguiente se le pide calcular los FLOPS para cada uno de los procesadores.
PS2 PIII - 600 P4 - 3200
Reloj (MHz) 300 600 3200
Ops. De punto
flotante por ciclo de 20 2 2
reloj
MFLOPS 300 x 106 x 20 600 x 106 x 2 3200 x 106 x 2
MFLOPS 6000 1200 6400
Es de hacerse notar que los valores de MFLOPS obtenidos en este ejercicio son los máximos
teóricos, que pueden alcanzarse en cada procesador y que para alcanzarlos se requiere que un
programa ejecute solamente operaciones de punto flotante (lo cual dejaría de fuera la lógica de
control, bucles y otras instrucciones necesarias para manejar el flujo del programa).
5. Cierto programa de CAD está compuesto en su mayoría por operaciones sobre matrices para
calcular la ubicación de puntos en 3D (el 99.99% son operaciones de punto flotante). Si el CPI es
2.7 y la velocidad del procesador es de 667MHz, cual es la métrica de FLOPS de esta máquina?
MFLOPS = 667 x 106 / 2.7 = 247.037 MFLOPS
Transferencias de datos utilizando un BUS
La transferencia de datos a través de los buses síncronos en una computadora depende mucho de la
frecuencia del reloj que gobierna el bus y también de la cantidad de líneas que tenemos disponibles para
la transmisión de datos (Usualmente se transfieren un bit por línea).
Tasa de transferencia máxima = Frecuencia de reloj * líneas de datos
6. Ud. acaba de comprar un DIM de 2GB de memoria DDR2, la memoria indica que puede trabajar
con un reloj de bus de 200 MHz. Cuanto tiempo tardaría escribir 800 MB de datos desde el
procesador hacia la memoria? Por favor tome en cuenta que la memoria DDR y DDR2 pueden
realizar transferencias tanto en el cambio ascendente como en el descendiente del reloj; la
memoria está conectada al bus utilizando 64 líneas de datos.
Tasa Transferencia = 200 MHz x 64 líneas de datos x 2 por ser DDR = 25600 Mbps
Para pasar de Megabits a Megabytes : 25600 Mbps / 8 bits = 3200 MBps
800 MB / 3200 MBps = .25 segundos
7. Determinar cuál de estos dos buses podrá soportar la transferencias de datos de un dispositivo
de captura que necesita lo menos una conexión de 13.5 MBps.
Reloj Líneas de datos
Bus paralelo A 10 MHz 16
Bus serial B 120 MHz 1
Bus A: 10 MHz x 16 bits = 160 Mbps/8 bits por byte = 20 MBps
Bus B: 120MHz x 1 bit = 120 Mbps /8 bits por byte = 15 MBps
En este caso ambos buses soportan la tasa de transferencia requerida.
Los buses seriales deben tener una mayor frecuencia para compensar que los buses paralelos tienen
más líneas de datos.