Tutorial Winmips
Tutorial Winmips
Tutorial Winmips
Pipeline
Code
Esta ventana muestra una representacin esquemtica de las cinco etapas del pipeline del procesador MIPS64 y de las unidades para operaciones de punto flotante (adicin/sustraccin, multiplicacin y divisin). En ella se indica visualmente que instruccin est en cada una de las etapas. Esta ventana muestra el contenido de la memoria de cdigo mediante una representacin en tres columnas. La de la izquierda muestra la direccin correspondiente en la memoria. La del centro muestra la representacin en cdigo de mquina de 32 bits de la instruccin contenida en dicha direccin. Finalmente, la de la derecha muestra la instruccin en lenguaje assembly. Haciendo doble clic sobre alguna de las instrucciones de esta ventana establece o quita un punto de parada (breakpoint).
Page 1
Ingeniera en Computacin - UNLP Esta ventana muestra el contenido de la memoria de datos. Si bien la memoria puede ser direccionada de a bytes, el contenido es mostrado en porciones de 64 bits, ya que resulta ms apropiado para un procesador de 64 bits. Haciendo doble clic es posible editar el valor entero contenido en esa direccin de memoria. Para editar un valor en punto flotante, es necesario hacer doble clic con el botn derecho. Esta ventana muestra los valores almacenados en cada registro del procesador. Si el registro est mostrado en gris es porque se encuentra en proceso de ser escrito por alguna instruccin. Si se muestra con algn color, dicho color indica la etapa de la segmentacin para cul el valor del registro est disponible para hacer forwarding. Esta ventana permite cambiar el contenido de los registros enteros y de punto flotante siempre que no se encuentren en proceso de ser escritos o de forwarding. Para hacerlo, basta con hacer doble clic sobre el registro que se desea cambiar, tras lo cual aparecer una ventana preguntando el nuevo valor. Esta ventana muestra el comportamiento temporal del pipeline. Registra la historia de las instrucciones a medida que entran y salen de l. Una instruccin que causa un parn (stall) es remarcada en color azul mientras que una instruccin que debe ser demorada como resultado de un parn es mostrada en color gris. Esta ventana provee estadsticas sobre el nmero de ciclos simulados, cantidad de instrucciones procesadas, el promedio de Ciclos Por Instruccin (CPI), el tipo de parones, el nmero de saltos condicionales y la cantidad de instrucciones de carga (Load) y almacenamiento (Store). Esta ventana simula ser una terminal de entrada/salida que adems de procesar texto, posee algunas capacidades grficas limitadas. La barra de estado ubicada en la parte inferior de la ventana principal normalmente muestra el texto "Ready" pero durante la ejecucin de un programa, muestra informacin til respecto de la simulacin.
Register
Statistics
Al iniciar, uno puede asegurarse que la simulacin se encuentre en un estado inicial conocido haciendo clic en la opcin del men FileReset MIPS64. WinMIPS64 puede ser configurado de muchas formas. Se puede cambiar la estructura y los requerimientos de tiempo del pipeline de punto flotante y el tamao de la memoria de cdigo y de datos. Para ver o cambiar la configuracin por defecto, es necesario acceder al men ConfigureArchitecture. La siguiente ventana aparecer:
Page 2
Utilizando WinMIPS64
Puede cambiarse la configuracin editando los valores de los campos apropiados. Cualquier cambio en las demoras de punto flotante ser reflejado en la ventana Pipeline. La opcin Code Address Bus se refiere al nmero de cables conectados al bus de direcciones. De esa manera, un valor de 10 significa que 2 10 = 1024 bytes de memoria de cdigo van a estar disponibles y van a ser mostrados en la ventana Code. Algo similar ocurre con la opcin Data Address Bus, solo que referida a la memoria de datos. Tres opciones ms pueden ser elegidas en el men Configuration: Multi-Step, Enable Forwarding, Enable Branch Target Buffer y Enable Delay Slot. Para los siguientes ejemplos de todas ellas debera estar marcada solamente Enable Forwarding y el resto debern estar desmarcadas. Es posible cambiar el tamao y/o posicin de las ventanas contenidas en la ventana principal al igual que minimizar o maximizar cada una de ellas.
A: B: C:
Page 3
Utilizando WinMIPS64
3. Simulacin
3.1 Simulacin Ciclo-por-Ciclo. En cualquier momento se puede presionar la tecla F10 para reiniciar la simulacin desde el comienzo. Al iniciar la simulacin, se puede observar que la primera lnea en la ventana Code, correspondiente a la direccin 0000h se encuentra remarcada con color amarillo. La etapa IF en la ventana Pipeline tambin se encontrar coloreada en amarillo y contendr el nombre de la primera instruccin de assembly del programa. Luego de hacer esto, observe la ventana Code y vea la primera instruccin ld r4,A(r0). Observe la ventana Data y encuentre la variable etiquetada como A. Clock 1: Haciendo clic en ExecuteSingle Cycle (o simplemente presionando F7) se avanza la simulacin un paso en el tiempo o, lo que es lo mismo, un pulso de reloj. En la ventana Code, el color de la primera instruccin cambiar a color azul y la segunda instruccin se marcar ahora en amarillo. Estos colores indican la etapa del pipeline en la que cada instruccin se encuentra (amarillo para IF, azul para ID, rojo para EX, verde para MEM y prpura para WB). Si se observa la etapa IF en la ventana Pipeline, se ver que la segunda instruccin ld r5, B(r0) se encuentra en la etapa IF y la primer instruccin ld r4,A(r0) ha avanzado a la segunda etapa ID. Clock 2: Presionando F7 de nuevo, se van a reacomodar los colores en la ventana Code, mostrando por primera vez el color rojo correspondiente a la tercera etapa, EX. La instruccin dadd r3,r4,r5 ingresar al pipeline. Ntese que el color de la instruccin indica en que etapa del pipeline la instruccin va a ser completada cuando ocurra el siguiente pulso del reloj. Clock 3: Presionando F7 de nuevo, se van reacomodar nuevamente los colores en la ventana Code, mostrando por primera vez el color verde correspondiente a la etapa MEM. La instruccin sd r3,C(r0) va a ingresar al pipeline. Observe el diagrama en la ventana Cycle, el cual muestra la secuencia en que cada una de las instrucciones fue pasando por cada etapa en cada pulso de reloj. Clock 4: Al presionar nuevamente F7, cada etapa del pipeline estar activada con una instruccin. El valor que va a ir a parar al registro r4 ha sido ledo desde la memoria pero an no se ha escrito en r4. Sin embargo, est disponible para forwarding desde la etapa MEM. Observar que en la ventana Registers r4 est mostrado en verde (el color correspondiente a MEM). Puede explicar el valor que contiene r4? Note que la ltima instruccin halt ha entrado en el pipeline. Clock 5: Presione F7 nuevamente. Algo interesante ha ocurrido. El valor destinado para el registro r5 pasa a estar disponible para hacer forwarding. Sin embargo, el valor para r5 no estaba disponible en el momento que la instruccin dadd r3,r4,r5 se ejecutaba en la etapa EX. Por lo tanto, se mantiene demorada en EX. La barra de estado muestra "RAW stall in EX (R5)", que indica donde ha ocurrido el parn, cual fue el motivo y que registro, al no estar disponible, fue el responsable de causarlo.
Page 4
Utilizando WinMIPS64
El diagrama en la ventana Cycle y la imagen en la ventana Pipeline muestran claramente que la instruccin dadd se encuentra demorada en la etapa EX y que las dems instrucciones detrs de ella tampoco pueden continuar. En la ventana Cycle, la instruccin dadd se encuentra remarcada en azul y las instrucciones detrs de ella se muestran en gris. Clock 6: Presione F7. La instruccin dadd r3,r4,r5 se ejecuta y su salida, destinada al registro r3, queda disponible para hacer forwarding. El valor de salida es 12h, que resulta ser la suma de 10+8 = 18 en decimal. Esta es nuestra respuesta. Clock 7: Presione F7. La instruccin halt que entra en la etapa IF tiene el efecto de congelar el pipeline, de manera que no se acepte ninguna instruccin nueva. Clock 8: Presione F7. Si se examina la ventana Data, se observar que la variable C ahora contiene el valor 12h. La instruccin sd r3,C(r0) lo ha escrito en la memoria en la etapa MEM del pipeline, usando el valor recibido mediante forwarding del registro r3. Clock 9: Presione F7. Clock 10: Presione F7. El programa ha terminado Al mirar en la ventana Statistics, se observa que se han contado 2 cargas (loads), 1 almacenamiento (store) y un parn (stall) RAW. Se necesitaron 10 ciclos de reloj para ejecutar 5 instrucciones as que el CPI=2. Esto es altamente artificial debido al tiempo que se necesit en llenar el pipeline. La ventana Statistics es extremadamente til para comparar los efectos que traen los cambios en la configuracin. Para examinar los efectos de utilizar forwarding, que hasta ahora estaba habilitando, sera interesante conocer el tiempo de ejecucin del programa de ejemplo sin contar con esta caracterstica activada. Para lograrlo, se debe hacer clic en Configure y desmarcar la opcin Enable Forwarding. Tras repetir la ejecucin ciclo-por-ciclo, si se vuelve a examinar la ventana Statistics, se podrn comparar los resultados. Note que hay ms parones debido a que las instrucciones son retenidas en la etapa ID esperando por un registro y por tanto, esperando a que una instruccin anterior complete la etapa WB. Las ventajas de utilizar forwarding deberan ser ms que obvias. 3.2 Otros modos de ejecucin. Antes de comenzar, es necesario hacer clic en FileReset MIPS64. Debe notarse que esto borrar la memoria de datos, por lo que ser necesario repetir el procedimiento para cargar el programa. Sin embargo, haciendo clic en FileReload o presionando F10 se conseguir el mismo efecto para reiniciar la simulacin de una forma ms rpida. Para este caso, usa la segunda opcin. Es posible correr la simulacin por un nmero especificado de ciclos. Utilice la opcin ExecuteMulti cycle para ello. El nmero de ciclos que se van a ejecutar se especifica a travs de la opcin ConfigureMulti-step. Conceptos de Arquitectura de Computadoras Page 5
Utilizando WinMIPS64
Tambin, es posible ejecutar el programa completo presionando la tecla F4 o haciendo clic en ExecuteRun to. Por ltimo, existe la posibilidad de establecer puntos de parada (breakpoints). Para establecer un nuevo punto de parada, basta con hacer doble clic en la ventana Code sobre la instruccin en la que uno quiere que se detenga la ejecucin. Por ejemplo, si luego de presionar F10 para reiniciar la simulacin, se pone un punto de parada haciendo doble clic sobre la instruccin dadd r3,r4,r5 y se presiona F4, el programa va a detenerse cuando esta instruccin entre la etapa IF. Para quitar un punto de parada, se debe hacer nuevamente doble clic sobre la misma instruccin. 3.3 Salida de la Terminal El simulador soporta un dispositivo de entrada/salida bsico, que trabaja como una pantalla de terminal simple, con soporte para algunas operaciones grficas. La salida de un programa puede aparecer en esta pantalla de esta terminal. Para mostrar la salida del programa anterior, es necesario modificarlo de la siguiente manera: A: B: C: CR: DR: main: ld r4,A(r0) ld r5,B(r0) dadd r3,r4,r5 sd r3,C(r0) lwu r1,CR(r0) lwu r2,DR(r0) daddi r10,r0,1 sd r3,(r2) sd r10,(r1) halt Despus de que este programa sea ejecutado, se podr ver el resultado de la suma impreso en decimal en la ventana Terminal. Para ver una demostracin ms completa de las capacidades de entrada/salida de la terminal, vea los programas de ejemplo testio.s y hail.s que trae el simulador. ;Registro Control ;Registro Data ;Enviar r3... ;... a la pantalla .data .word 10 .word 8 .word 0 .word32 0x10000 .word32 0x10008 .text
Page 6
Utilizando WinMIPS64 El conjunto de instrucciones. Son reconocidas las siguientes directivas para el ensamblador: .text .code .data .org .space .ascii .asciiz .word .byte .word32 .word16 .double
comienzo del cdigo comienzo del cdigo (igual que .text) comienzo de los datos direccin de inicio deja n bytes vacos almacena una cadena ASCII almacena una cadena ASCII terminada en 0. almacena nmero(s) de 64-bits almacena byte(s) almacena nmero(s) de 32 bits almacena nmero(s) de 16 bits almacena nmero(s) en punto flotante
donde <n> denota un nmero como 24, <s> denota una cadena como "fred" y <n1>,<n2> denota nmeros separados por coma. Los registros enteros pueden ser referidos como r0-r31 o R0-R31 o $0-$31 o usando pseudonimos MIPS estandar como $zero para r0, $t0 para r8, etc. Es importante notar que el tamao de un valor inmediato est limitado a 16 bits. Adems, el valor inmediato para una instruccin de desplazamiento de registro est acotado a 5 bits, por lo tanto, un desplazamiento mayor a 31 bits no est permito. Los registros de punto flotante pueden ser referidos como f0-f31 o F0-F31. Las siguientes instrucciones son soportadas (*): ld - load 64-bit double-word sd - store 64-bit double-word l.d - load 64-bit floating-point s.d - store 64-bit floating-point halt - stops the program daddi - add immediate andi - logical and immediate ori - logical or immediate xori - exclusive or immediate slti - set if less than or equal immediate beq - branch if pair of registers are equal bne - branch if pair of registers are not equal beqz - branch if register is equal to zero bnez - branch if register is not equal to zero j - jump to address jr - jump to address in register jal - jump and link to address (call subroutine) jalr - jump and link to address in register (call subroutine) dsll - shift left logical dsrl - shift right logical dsra - shift right arithmetic dsllv - shift left logical by variable amount on register dsrlv - shift right logical by variable amount on register dsrav - shift right arithmetic by variable amount on register nop - no operation and - logical and or - logical or xor - logical xor slt - set if less than dadd - add integers dsub - subtract integers Conceptos de Arquitectura de Computadoras Page 7
Utilizando WinMIPS64 dmul ddiv add.d sub.d mul.d div.d mov.d cvt.d.l cvt.l.d mtc1 mfc1 -
signed integer multiplication signed integer division add floating-point subtract floating-point multiply floating-point divide floating-point move floating-point convert 64-bit integer to a double floating-point convert double floating-point to a 64-bit integer move data from integer register to floating-point move data from floating-point register to integer
(*) el simulador soporta mas instrucciones que las mencionadas. rea de Entrada/Salida ubicada en la memoria. Las direcciones de los registros CONTROL y DATA son: CONTROL: .word32 0x10000 DATA: .word32 0x10008 Set Set Set Set Set CONTROL CONTROL CONTROL CONTROL CONTROL = = = = = 1, 2, 3, 4, 5, Set DATA to Unsigned Integer to be output Set DATA to Signed Integer to be output Set DATA to Floating Point to be output Set DATA to address of string to be output Set DATA+5 to x coordinate, DATA+4 to y coordinate, and DATA to RGB colour to be output Clears the terminal screen Clears the graphics screen read the DATA (either an integer or a floating-point) from the keyboard read one byte from DATA, no character echo.
El programa no posee un instalador. Es su computadora, descomprima el archivo del simulador en cualquier lugar conveniente y cree un acceso directo que apunte a l para facilitar el uso del mismo. Deber saber que el programa WinMIPS64 va a escribir dos archivos de configuracin en el directorio donde se encuentra, uno llamado winmips64.ini que almacena detalles de la arquitectura y otro, llamado winmips64.las, que recuerda el ltimo archivo .s accedido.
Page 8