Está en la página 1de 4

PRCTICA DLXV-1: INTRODUCCIN A COMPUTADORES VECTORIALES

Paso 2
Qu cambio se ha producido en el diagrama del cauce? Que las unidades de suma y de multiplicacin han pasado de estar divididas en distintas etapas a formar un nico bloque. Qu consecuencias puede tener este cambio, a la hora de ejecutar un programa? Al estar segmentada la unidad de suma y de multiplicacin, puede empezar a realizar otro producto o suma antes de acabar el anterior; es decir, disminuye la latencia de emisin. Al no estar segmentada, cada operacin deber esperar a que acabe la anterior, aumentando la latencia de emisin y el nmero de ciclos del programa.

Ejercicio 3: Cargar, estudiar y ejecutar un programa escalar


main: addi r1,r0,x ;Sumamos el contenido del registro r0 con el valor de x, que es la direccin de memoria de comienzo del vector. R0 vale 0, por lo que realmente copiamos el valor de x a r1. addi r2,r0,y ;Por el mismo motivo de antes, copiamos la direccin de comienzo del vector y a r2. addi r3,r0,z ;Copiamos la direccin de comienzo del vector z a r3

ld f0,a(r0) ;Accedemos a la direccin de memoria resultante de sumar la direccin de la etiqeta a al registro r0. Es decir, estamos recuperando el valor de a y asignndolo a f0. F0 toma el valor 1. addi r4,r1,512 ;Sumamos a la direccin de comienzo del primer vector 512 (64 valores * 8 bytes cada uno). loop: ld f2,0(r1) ; Cargamos en el registro f2 el contenido de la direccin r1+0, es decir, el primer valor del vector x (en cada iteracin iremos accediendo al siguiente elemento). multd f2,f0,f2 ;Multiplicamos el registro f2 por f0 (que tiene el valor1) y lo guardamos en f2. ld f4,0(r2) ;Cargamos en el registro f4 la primera posicin del vector y (igual que antes hacamos con el vector x).

addd f4,f2,f4 ;Sumamos los registros f2 y f4 y los guardamos en f4. sd 0(r3),f4 ;Guardamos el resultado de la operacin anterior en la direccin apuntada por r3 (la primera posicin del vector z para la primera iteracin). addi r1,r1,8 ;Incrementamos el valor del registro r1 en 8. De esta forma apuntar al siguiente elemento del vector x. addi r2,r2,8 ;Realizamos la misma operacin para el registro r2. Ahora r2 apunta al siguiente elemento del vector y. addi r3,r3,8 ; Realizamos la misma operacin para el registro r3. Ahora r3 apunta al siguiente elemento del vector z. sub r5,r4,r1 ;Guardamos en r5 el resultado de restar el registro r4 y r1. Sirve para saber si hemos llegado al final del vector. bnez r5,loop ;En el caso de que la resta valga 0, habremos llegado al final del vector, y continuaremos con el programa. En caso contrario, saltaremos a la etiqueta loop. nop trap 6 ;Hueco de retardo ;Fin del programa

Resumiendo: Qu hace el programa en cada iteracin del bucle? A cada iteracin, suma el valor de una posicin del vector x con su homlogo del vector y, y lo guarda en el vector z. Qu hace el programa completo? Suma los vectores x e y y los guarda en z.

Paso 3
Qu ocurre en este acceso a memoria, que sea diferente de lo que ocurra en el DLX escalar? No hay ninguna diferencia con respecto a la versin escalar, ya que aunque es un procesador vectorial, sigue teniendo una parte escalar, que es la que est ejecutando estas instrucciones.

Paso 4
Te llama la atencin alguna peculiaridad de este cronograma? No tiene ninguna peculiaridad. Anota las estadsticas: Ciclos Instrucciones completadas 1354 647

CPI Riesgos de datos

2.093 1088

Ejercicio 4: vectorial Paso 2

Cargar,

estudiar

ejecutar

un

programa

main: addi r1,r0,x ;Cargamos en r1 la direccin de comienzo del vector x. addi r2,r0,y ;Cargamos en r2 la direccin de comienzo del vector y addi r3,r0,z ;Cargamos en r3 la direccin de comienzo del vector z ld f0, a(r0) ;Cargamos en f0 el contenido de la direccin a, que es 1. addi r4,r0,64 ;Cargamos en r4 el valor 64, ya que es el nmero de elementos de los vectores. movi2s vlr,r4 ;Guardamos en el vlr el valor del registro r4. Estamos indicando que las operaciones las realizaremos sobre 64 elementos. lv v0,0(r1) ;Cargamos en el registro v0 el contenido completo del vector x, los 64 elementos. multsv v1,f0,v0 ;Multiplicamos todos los elementos por el valor de f0, que es 1, y lo guardamos en el vector v1. lv v2,0(r2) ; Cargamos en el registro v2 el contenido completo del vector y, los 64 elementos. addv v3,v1,v2 ;Sumamos los valores de los dos vectores, y los guardamos en el registro v3. sv 0(r3),v3 ;Guardamos todos los valores de la operacin anterior a partir de la primera posicin del vector r3. trap 6 Qu diferencias fundamentales encuentras con el programa del ejercicio anterior? Que no hace falta un bucle, ya que no se opera con los datos individuales, sino que operamos con el conjunto de datos.

Paso 3
Qu ocurre en este acceso a memoria, que sea diferente de lo que ocurra en el DLX escalar? Que se cargan los 64 datos a la vez, en lugar de uno solo. Adems, cuenta con una etapa adicional, lv, que es un buffer en el que se almacenan las instrucciones siguientes y se valora si pueden ejecutarse.

Paso 5
Te llama la atencin alguna peculiaridad de este cronograma?

Que las instrucciones vectoriales provocan muchos riesgos RAW, ya que las siguientes instrucciones deben esperar a que acabe la instruccin vectorial antes de poder operar con los datos. A cambio, se reducen mucho el nmero de instrucciones, ya que nos ahorramos los bucles. Ciclos Instrucciones completadas CPI Riesgos de datos 315 12 26.250 227

Te resulta raro el nuevo CPI? Hemos estudiado que un CPI alto corresponde normalmente a un mal rendimiento, as que era de esperar que el CPI bajase al mejorarlo. Por qu es tan grande el CPI en este ejemplo? El CPI es tan grande porque usamos instrucciones vectoriales, y consumen muchos ciclos, ya que operan con muchos datos. Tenemos pocas instrucciones que trabajan con 64 datos cada una, eso da una medida del CPI alta. Comenta a qu se debe la mejora del rendimiento. El rendimiento mejora porque al no tener bucles, no se producen saltos, y no se rompe el cauce. Los saltos es lo que ms penaliza el rendimiento. A la vista del crees que el alguna forma programa? No se me ocurre cronograma y de los parones que se han producido, rendimiento sigue siendo mejorable? Se te ocurre de disminuir el tiempo de ejecucin modificando el ninguna mejora.

También podría gustarte