TEMA 3: DISEÑO DE JUEGOS DE INSTRUCCIONES.

Documentos relacionados
Introducción a la Computación. Capítulo 10 Repertorio de instrucciones: Características y Funciones

Organización de Computadoras. Principios de Conjuntos de Intrucciones

Tema 2: Lenguaje máquina. La interfaz entre el hardware y el software

Modelo de von Neumann

Estructura de Computadores 2 [08/09] Entrada/Salida en procesadores MIPS

1. Motivación. 2. Procesadores superescalares. 3. Procesadores VLIW. 4. Procesadores supersegmentados.

Arquitectura del MIPS: Introducción

Arquitectura de Computadoras

Organización del Computador 1. CPU (ISA) Conjunto de Instrucciones de la Arquitectura 2017

Repaso concepto de programa

Tema 2. Diseño del repertorio de instrucciones

Tema 3 (III) Fundamentos de la programación en ensamblador

El nivel ISA (II)! Conjunto de Instrucciones

Organización del Computador I Verano. MIPS (2 de 2) Basado en el capítulo 2 del libro de Patterson y Hennessy

Procesador MIPS - Registros

Arquitectura de Computadores II Clase #3

GUIA 24: REPERTORIO DE INSTRUCCIONES

Arquitectura de Computadoras. Simulador WINMIPS64

TEMA VI DISEÑO DEL PROCESADOR

2. DISEÑO DEL REPERTORIO DE INSTRUCCIONES MÁQUINA

Introducción al lenguaje ensamblador DLX: instrucciones de enteros.

Fundamentos de los Computadores Grado en Ingeniería Informática (hasta final del diseño monociclo)

El repertorio de instrucciones

Arquitectura de Computadoras

Ejercicios del Tema 3. Fundamentos de la programación en ensamblador

Arquitectura de Computadores

Unidad Nº II Capacidad de la unidad central. de procesamiento. Instituto Universitario Politécnico. Santiago Mariño

Plataformas de soporte computacional: arquitecturas avanzadas,

3. Instrucciones: lenguaje de la máquina

Fundamentos y Arquitectura de Computadores (ITTSE UV)

Fundamentos y Arquitectura de Computadores (ITTSE UV)

Unidad 5 Unidad central de proceso

COMPUTADORES SEGMENTADOS (DLX)

Ejercicios del Tema 3. Fundamentos de la programación en ensamblador

Fecha de Introducción. Velocidad de reloj. Anchura del bus. Número de transistores. (microns) Memoria direccionable.

El Diseño de un Lenguaje Máquina

INTRUCCIONES: LENGUAJE MAQUINA

Organización procesador MIPS

ISA (Instruction Set Architecture) Arquitectura del conjunto de instrucciones

Formato de instrucciones

Arquitectura de Computadores Problemas (hoja 2). Curso

Estructura de Computadores

Guía práctica lenguaje ensamblador

Organización de Computadoras. Clase 7

UNIDAD TEM ATICA 3: ACELERACI ON DEL ACCESO A MEMORIA.

TEMA 5 JUEGO DE INSTRUCCIONES DE UN COMPUTADOR

2. ARQUITECTURA BÁSICA DE MIPS 64

Tema 1: PROCESADORES SEGMENTADOS

DISEÑO DEL PROCESADOR

Arquitecturas RISC. Arquitectura de Computadoras y Técnicas Digitales - Mag. Marcelo Tosini Facultad de Ciencias Exactas - UNCPBA

Conceptos de Arquitectura de Computadoras Curso 2015

Capitulo 1 Fundamentos de Computadores - I.T.Telecomunicación - Segundo cuatrimestre. INTRODUCCION A LOS FUNDAMENTOS DE COMPUTADORES

Instrucciones de máquina y tipos de software

3. SEGMENTACIÓN DEL CAUCE

Repaso Registros internos Z80 1/37

Tema 5. Segmentación: conceptos básicos

Estructura y Tecnología de Computadores. Módulo C. Arquitectura del procesador. Tema 4. Modos de direccionamiento y tipos de datos

Programación de IA-32 Modo Real

Tema 5 Diseño del Set de Instrucciones (ISA) Arquitectura de Computadoras

Estructura y Tecnología de Computadores II (Gestión y Sistemas)

Tema 1: PROCESADORES SEGMENTADOS

PROGRAMACIÓN EN ASSEMBLER SIMULADOR MSX88

Práctica 3 - Arquitectura del CPU

Unidad 3. Facultad de Ciencias Departamento de Electrónica

Bloques del programa de la asignatura

UNIVERSIDAD CARLOS III DE MADRID DEPARTAMENTO DE INFORMÁTICA GRADO EN INGENIERÍA INFORMÁTICA. ESTRUCTURA DE COMPUTADORES

FUNCIONAMIENTO DE LA UNIDAD DE CONTROL DEL PROCESADOR

El Conjunto de Instrucciones de la Arquitectura Lagarto I

TEMA III: OPERACIONES CON LOS DATOS

Arquitectura de Computadores II Clase #4

Arquitectura de Computadores II Clase #4

Grupo de Arquitectura y Tecnología de Computadores (ARCOS)

Arquitectura de Computadores Problemas (hoja 4). Curso

Ejercicios del tema 4. El procesador

El procesador. Datapath para las instrucciones de brinco

Introducción a la arquitectura de computadores

Programación en ensamblador Ejercicios propuestos

Modos de Direccionamiento+ Diseño de ISA. Organización del Computador 1 Verano 2016

TEMA 4 ESTRUCTURA VON-NEUMANN DEL COMPUTADOR DIGITAL

Organización y Arquitectura

Arquitectura de Computadores II Clase #3

Diseño del procesador MIPS R2000

Tema 2: Arquitectura del repertorio de instrucciones. Visión del computador que tiene el programador en bajo nivel.

Sistemas de Computadoras

Representación de datos y aritmética básica en sistemas digitales

Sistema electrónico digital (binario) que procesa datos siguiendo unas instrucciones almacenadas en su memoria

Un. VIII. Generación de Código Objeto

Estructura de Computadores. Problemas de Instrucciones y Direccionamientos

Conceptos básicos de procesadores

Tema 2. Diseño del repertorio de instrucciones

TEMA 1: Conceptos generales. 1.- Representa los primeros 16 números decimales (del 0 al 15) usando codificación binaria y hexadecimal.

Clasificación de las Arquitecturas

8.4. El software en los μprocesadores

TIPOS DE DIRECCIONAMIENTO POSIBLES

Representación de datos y aritmética básica en sistemas digitales

Tema 7: Procesadores superescalares

Transcripción:

TEMA 3: DISEÑO DE JUEGOS DE INSTRUCCIONES. 1. Evolución de la arquitectura del juego de instrucciones. 2. Propiedades de los juegos de instrucciones desde la perspectiva del escritor de compiladores. 3. Clasificación de los repertorios de instrucciones. 4. Direccionamiento de la memoria. 5. Tipo y tamaño de los operandos. 6. Operaciones del repertorio de instrucciones. 7. Instrucciones multimedia. 8. Instrucciones de control. 9. Organización de los registros. 10. Ejemplos de juegos de instrucciones. Bibliografía: C. Rodríguez et al. Microprocesadores RISC: Evolución y Tendencias, Rama, 1999. J.L. Hennessy & D. A. Patterson. Computer Architecture: A Quantitative Approach 3 a ed., Morgan Kauffman Publishers, 2002. A. S. Tanenbaum. Structured Computer Organization 4 a ed., Prentice-Hall, 1999. Departamento de Informática de Sistemas y Computadores (DISCA) Facultad de Informática de Valencia 3-1

1 EVOLUCIÓN DEL JUEGO DE INSTRUCCIONES 1. Evolución de la arquitectura del juego de instrucciones. Los primeros computadores eran simples: tenían pocas instrucciones y sólo uno o dos modos de direccionamiento que se ejecutaban directamente sobre el hardware. 1964: IBM lanza la familia 360, con microprogramación: hardware relativamente simple. juego de instrucciones potente gracias a los microprogramas. A partir de ese momento, casi todos los fabricantes incorporan la microprogramación en sus diseños. Por qué se introduce la microprogramación? 1. Diferencia de velocidad entre CPU y memoria. Primeros computadores: CPU y memoria de velocidad. 2 a y 3 a generación: CPU (semiconductores) vs. memoria (ferrita) La CPU es 10 veces más rápida que la memoria! Idea para reducir el tiempo de ejecución de los programas: Diseñar un juego de instrucciones más potente los programas tendrán menos instrucciones menos accesos a memoria. Las instrucciones no son ejecutadas directamente por el hardware. Cada instrucción se interpreta por medio de un microprograma, cuyas acciones se ejecutan en el hardware. 2. Reducción del desnivel semántico. Desnivel semántico: Diferencia entre el poder descriptivo de los lenguajes de alto nivel y las instrucciones máquina. Solución: Aumentar nivel de las instrucciones máquina, para: Facilitar el desarrollo de los compiladores. Aliviar la crisis del software (el coste del software aumentó muchísimo). Mejorar la calidad de la arquitectura (parámetros S y M). 3-2

1 EVOLUCIÓN DEL JUEGO DE INSTRUCCIONES 1. Tecnología. El cambio (años 70) Memorias RAM de semiconductores. Memorias cache o antememorias. la velocidad de la CPU es similar a la de la memoria. 2. Problemática de la microprogramación: Difícil depuración y mantenimiento de los microprogramas (bajo nivel de las microinstrucciones, espacio de la memoria de control limitado,... ). 3. Medidas sobre la ejecución de programas reales. Estadísticas sobre el código fuente de los programas. Procedimientos Sentencia % N o term. := % Var. loc. % Parámetros % := 47 0 22 0 41 If 23 1 80 1 17 1 19 Call 15 2 15 2 20 2 15 Bucle 6 3 3 3 14 3 9 Goto 3 4 2 4 8 4 7 Otros 7 5 0 5 20 5 8 Aunque potencialmente se pueden escribir programas muy complejos, en la práctica no ocurre así. Estadísticas sobre el código generado por los compiladores. Los compiladores utilizan un subconjunto del juego de instrucciones. Las instrucciones complejas o demasiado específicas raramente se utilizan. El resultado: Tambaleo de las hipótesis de partida Un lenguaje máquina de mayor nivel (más instrucciones y más complejas) implica una implementación global más lenta hay que pasar por un intérprete (el microprograma) Las instrucciones complejas raramente se utilizan. surge una nueva filosofía... 3-3

1 EVOLUCIÓN DEL JUEGO DE INSTRUCCIONES Máquinas RISC. RISC: Reduced Instruction Set Computers frente a las CISC Complex Instruction Set Computers existentes en el momento. 1. Instrucciones simples (que son las más empleadas) ejecutadas directamente en hardware. al eliminar el intérprete (microprograma) se mejora mucho las prestaciones. 2. Compilador optimizante para cubrir el desnivel semántico. La tecnología de compiladores debe ser capaz de generar código para una máquina con instrucciones simples tan eficiente o más que el que se genera a mano. Principios de diseño RISC. 1. Analizar las aplicaciones reales y delimitar las operaciones clave. 2. Diseñar la ruta de datos óptima para esas operaciones clave. 3. Diseñar el juego de instrucciones incluyendo sólo las que implementan las operaciones clave en la ruta de datos. 4. Añadir nuevas instrucciones, sólo si no ralentizan la máquina. 5. Repetir el proceso para los demás recursos del computador. Enfoque cuantitativo: hay que medir las prestaciones para valorar la influencia de las decisiones de diseño! 3-4

2 LA PERSPECTIVA DEL ESCRITOR DE COMPILADORES 2. Propiedades de los juegos de instrucciones desde la perspectiva del escritor de compiladores Quién es el usuario primario de la máquina? el compilador. Qué solicitan los escritores de compiladores de un juego de instrucciones? 1. Principio básico: Caso frecuente: eficiente; caso raro: correcto. 2. Regularidad/Ortogonalidad. Siempre que tenga sentido, las operaciones, modos de direccionamiento y tipos de datos deben ser independientes. Simplifica la generación de código, sobre todo si la decisión se toma en dos fases distintas. 3. Proporcionar primitivas, en lugar de soluciones. No hay que dar soporte directo a construcciones de alto nivel. Sólo funcionaran con un lenguaje, al ser muy específicas. Tienen más o menos funcionalidad de la necesaria. 4. Incorporar instrucciones que operen con constantes para las cantidades conocidas en tiempo de compilación. Interpretarlo en tiempo de ejecución es ineficiente. 5. Principio uno o todo. Hay una sola forma de hacer una determinada cosa, o todas las formas son posibles. Simplificar el coste del cálculo de cada alternativa. 3-5

3 CLASIFICACIÓN DE LOS REPERTORIOS DE INSTRUCCIONES 3. Clasificación de los repertorios de instrucciones Formatos de instrucción Las instrucciones se almacenan en la memoria de acuerdo con un formato, el cual indica la operación a realizar (código de operación) y los operandos. Tipos de formatos de instrucción: N o Fijo. Todas las instrucciones se codifican utilizando el mismo número de bits. Facilita la búsqueda de instrucciones y su decodificación. A veces, derrocha bits en el formato, ya que no todas las instrucciones requieren el mismo espacio para codificarse. Variable. El número de bits requerido para codificar la instrucción varía según el tipo de instrucción. Optimiza espacio ocupado por las instrucciones, y, por lo tanto, por los programas. Complica la búsqueda de instrucciones y su decodificación. de bits del formato. El número de bits destinado al formato impone un limite al espacio destinado a cada uno de los campos, el cual limita el n o de variantes del mismo: n o de instrucciones (códigos de operación), n o de registros, espacio de memoria direccionable, etc. 3-6

3 CLASIFICACIÓN DE LOS REPERTORIOS DE INSTRUCCIONES N o de formatos de instrucción. Cómo se asignan los bits del formato a los campos requeridos por las instrucciones? Formato único. La correspondencia entre los bits del formato y los campos es siempre la misma. Facilita la decodificación de la instrucción. A veces, derrocha bits en el formato, ya que no todas las instrucciones requieren todos los campos previstos. Múltiples formatos. Cada formato puede tener campos distintos y define una correspondencia entre éstos y los bits del formato. Permite ajustar mejor los bits ocupados por la instrucción y los campos requeridos. 3-7

3 CLASIFICACIÓN DE LOS REPERTORIOS DE INSTRUCCIONES Criterio clásico: Almacenamiento de los operandos en la CPU: Las instrucciones operan sobre unos datos y generan un resultado. Los datos y resultados se almacenan en la memoria y en la CPU. Tres paradigmas: Pila (Ej.: HP 3000). Los datos y resultados se almacenan en una pila. Los operandos están implícitamente en la cima de la pila, y el resultado se deposita en la cima de la pila. Formato de menos bits. Acumulador (Ej.: PDP-8, M6809). Hay un registro acumulador que almacena implícitamente uno de los operandos y sobre el cual se deposita el resultado. Registros de propósito general (Ej.: PDP-11). Los datos y resultados se almacenan en una pequeña memoria RAM: el banco de registros. Todos los operandos deben nombrarse explícitamente. Formato de más bits. Ejemplo: Código para efectuar C := A + B Pila Acumulador Registros de propósito general. PUSH A LOAD A LOAD R1,A LOAD R1,A MOVE C,A PUSH B ADD B ADD R1,B LOAD R2,B ADD C,B ADD STORE C STORE C,R1 ADD R3,R1,R2 POP C STORE C,R3 Desde hace algunos años, casi todos los computadores utilizan registros de propósito general, ya que facilitan la generación de código por parte del compilador. 3-8

3 CLASIFICACIÓN DE LOS REPERTORIOS DE INSTRUCCIONES Clasificación de las máquinas con registros de propósito general Dos parámetros significativos: 1. Número n de operandos en una instrucción UAL típica (2 o 3). Si n = 2, uno de los operandos es a la vez fuente y destino. Si n = 3, hay dos operandos y un destino. 2. Número m n de direcciones a memoria en una instrucción UAL. Casos: Si m = 0, máquinas registro registro o load/store (típico m = 0, n = 3). Todas las instrucciones UAL operan sobre datos en registros, y depositan su resultado en un registro. Las únicas instrucciones que permiten acceder a la memoria son las de carga (load) y almacenamiento (store). Si m < n, máquinas registro memoria (típico m = 1, n = 2). Si m = n, máquinas memoria memoria (típico m = 3, n = 3). Formato Tamaño del código CPI load/store Fijo: El más grande El menor fácil decodificación Homogéneo: Segmentación pero derroche de bits eficiente T I CP I......... mem mem Variable: Complica El más pequeño El mayor decodificación Muy variable: Complica la segmentación T I CP I Las máquinas load/store dominan el mercado desde 1980 debido a: n = 3 simplifica la generación de código por parte del compilador. Los compiladores asignan variables en registros reducción del número de accesos a memoria reducción del tiempo de ejecución. Minimizan el tiempo de ejecución T ej = I CP I T 3-9

3 CLASIFICACIÓN DE LOS REPERTORIOS DE INSTRUCCIONES 3-10

4 DIRECCIONAMIENTO DE MEMORIA 4. Direccionamiento de memoria Interpretación de las direcciones Memorias direccionables por byte, pero se suele acceder a palabras (32 bits). Las palabras se acceden mediante la dirección del menor de sus bytes. Convenios para numerar los bytes de una palabra: 1. Little Endian: Byte de menor dirección en la posición de menor peso. Ejemplos: DEC PDP y VAX, Intel, Power PC. Direcciones Direcciones de palabra de byte 0 3 2 1 0 4 7 6 5 4 Las tiras de caracteres aparecen al revés : Direcciones Direcciones de palabra de byte 0 A L O H 4 2. Big Endian: Byte de mayor dirección en la posición de menor peso. Ejemplos: IBM 360/370, MIPS, Motorola, SPARC, Power PC (por defecto). Direcciones Direcciones de palabra de byte 0 0 1 2 3 4 4 5 6 7 El problema aparece al intercambiar datos entre dos computadores con diferente byte ordering. 3-11

4 DIRECCIONAMIENTO DE MEMORIA Alineamiento Un acceso a un objeto de tamaño s bytes ubicado en la dirección A está alineado si A mód s = 0 (A es múltiplo de s). Con formato fijo, las instrucciones están siempre alineadas, pero hay que soportar el acceso a datos no alineados? Ventaja: Mayor flexibilidad en la ubicación de datos en memoria. Inconveniente: Hardware más complejo CP I y/o T. Retardo introducido por el hardware extra. A veces son necesarios dos accesos a memoria para formar una palabra. 3-12

4 DIRECCIONAMIENTO DE MEMORIA Acceso a objetos de tamaño menor que una palabra Ventaja: Reducción del número de instrucciones del programa I Inconveniente: Hardware más complejo (hay que colocar selectores del fragmento de palabra deseado) CP I y/o T. Ejemplo: Con acceso a bytes Sin acceso a bytes LOADB R,A LOAD R,A EXTRACT n,r STOREB R,A LOAD R,A INSERT n,r,r STORE R,A donde A =A and FFFC y n=a and 3 3-13

4 DIRECCIONAMIENTO DE MEMORIA Modos de direccionamiento Cómo se especifican los operandos de las instrucciones? Selección de modos de direccionamiento empleados en distintas arquitecturas: Modo Ejemplo Significado Directo a registro ADD R1,R2,R3 Regs[R1] Regs[R2]+Regs[R3] Inmediato ADD R1,R2,#1 Regs[R1] Regs[R2]+1 Directo o Absoluto LW R1,(1000) Regs[R1] Mem[1000] Registro indirecto LW R1,(R2) Regs[R1] Mem[Regs[R2]] Desplazamiento LW R1,100(R2) Regs[R1] Mem[100+Regs[R2]] Indexado LW R1,(R2+R3) Regs[R1] Mem[Regs[R2]+Regs[R3]] Indirecto a memoria LW R1,@(R2) Regs[R1] Mem[Mem[Regs[R2]]] Autoincremento LW R1,(R2)+ Regs[R1] Mem[Regs[R2]] Regs[R2] Regs[R2]+d Autodecremento LW R1,-(R2) Regs[R2] Regs[R2]-d Regs[R1] Mem[Regs[R2]] Escalado LW R1,100(R2)(R3) Regs[R1] Mem[100+Regs[R2]+Regs[R3]*d d es el tamaño del operando (ej.: 1 palabra=4 bytes). 3-14

4 DIRECCIONAMIENTO DE MEMORIA Modos más utilizados Hay que soportar modos de direccionamiento sofisticados? Ventaja: Reducción del número de instrucciones de los programas I Inconveniente: Hardware más complejo CP I y/o T. Hay que medir la frecuencia de utilización de los modos en los programas: Modos más frecuentemente soportados: Inmediato, Desplazamiento, Indexado, Autoincrementativo, Absoluto. En DSP s, además: Autoincrementativo circular, para accesos a buffer circular. 3-15

4 DIRECCIONAMIENTO DE MEMORIA Modo de direccionamiento Desplazamiento Cual es el rango del desplazamiento? Debe ser una solución de compromiso entre disponer de desplazamientos grandes y el número de bits ocupados en el formato. Lo habitual es reservar 16 bits para el desplazamiento. Modo de direccionamiento Inmediato Con qué frecuencia se emplea? 21 % de instrucciones en programas enteros 16 % de instrucciones en programas con coma flotante. Qué tipos de instrucciones necesitan el modo inmediato? Comparaciones, aritméticas y asignaciones. Cual es el rango de los valores inmediatos? Debe ser una solución de compromiso entre disponer de constantes grandes y el número de bits ocupados en el formato. Muchas comparaciones se hacen con cero algunas arquitecturas reservan un registro para contener siempre el valor 0 (i.e., el R0 vale siempre 0). Lo habitual es reservar 16 bits para los valores inmediatos. También se incluyen instrucciones específicas para trabajar con valores inmediatos más grandes. Por ejemplo, LUI R1,#valor carga el valor valor en la parte alta del registro R1: Regs[R1] valor << 16 3-16

5 TIPO Y TAMAÑO DE LOS OPERANDOS 5. Tipo y tamaño de los operandos Cómo codificar el tipo de un operando? Lo más habitual es que esté implícito en el código de operación, aunque algunas máquinas antiguas utilizaban una etiqueta que acompañaba al operando, la cual representaba el tipo. Tipos generalmente soportados: carácter (8 bits ASCII), enteros (8-byte, 16-half-word, 32-word y 64 bits-double word, todos ellos en complemento a 2), coma flotante (simple precisión-32 bits y doble precisión-64 bits, en el estándar IEEE 754). En ocasiones: tiras de caracteres, BCD (binary coded decimal), coma flotante de cuádruple precisión (128 bits). Para aplicaciones multimedia: vertex (3 coordenadas+color), pixels (R+G+B+A). En DSP s, coma fija. 3-17

6 OPERACIONES DEL JUEGO DE INSTRUCCIONES 6. Operaciones del juego de instrucciones Tipos Aritmética entera, lógica binaria. Transferencia: Load/store o move. Control: Bifurcaciones y saltos, llamada/retorno de subprograma. Sistema: Llamada al S.O, gestión de memoria virtual. Coma flotante: aritmética y conversiones real-entero. Decimal: aritmética y conversiones decimal-carácter. String: transferencia, comparación, búsqueda. Multimedia: Operaciones con vertex y pixels, compresión/descompresión. Cuántas instrucciones hay? 3-18

6 OPERACIONES DEL JUEGO DE INSTRUCCIONES Instrucciones más utilizadas Las instrucciones que se ejecutan con más frecuencia son las que realizan las operaciones más sencillas del juego de instrucciones. Ejemplo: las 10 instrucciones más empleadas en el 80x86: 1 load 22 % 2 salto condicional 20 % 3 compare 16 % 4 store 12 % 5 add 8 % 6 and 6 % 7 sub 5 % 8 move reg reg 4 % 9 call 1 % 10 return 1 % 3-19

7 INSTRUCCIONES MULTIMEDIA 7. Instrucciones multimedia No suele ser necesario trabajar con datos de mucha precisión utilizar un operador de 64 bits para operar con enteros de 8 bits sería poco eficiente. Instrucciones SIMD: Single Instruction Multiple Data. Una sola instrucción opera sobre varios datos. Ejemplos: partitioned operations: Dados registros de 64 bits, se puede hacer 8 sumas de bytes, ó 4 sumas de half-words, ó 2 sumas de words. paired-single operations: 2 operaciones de coma flotante en simple precisión en una sola instruccion flotante. Aritmética con saturación. Si el resultado es demasiado grande, se sustituye por el número mayor que se puede representar. Otras instrucciones: Multiplicación y suma en una sola instrucción, cálculo del máximo/mínimo, barajado. Crítica: son más bien soluciones en lugar de primitivas (ver página 5) 3-20

8 INSTRUCCIONES DE CONTROL 8. Instrucciones de control Tipos de cambios del control de flujo: Saltos condicionales (branch), Saltos incondicionales (jump), Llamadas/retorno a/de procedimiento (call/return) Con qué frecuencia se salta? Saltos incondicionales, call y return representan 1, y saltan siempre. 3 Saltos condicionales. Otro 1 corresponde con bucles (efectivos casi en el 3 100 %). El resto ( 1 ) son efectivos en un 50 %. 3 5 6 son efectivos (saltan) y 1 6 son no efectivos (no saltan). 3-21

8 INSTRUCCIONES DE CONTROL Absoluto Indexado Relativo al PC Salto con enlace. Modos de direccionamiento soportados: 3-22

8 INSTRUCCIONES DE CONTROL Modo relativo al PC El destino suele estar cerca de la instrucción actual las direcciones relativas consumen pocos bits. Facilita la generación de código relocalizable. Cuantos bits hacen falta para el desplazamiento? Debe ser una solución de compromiso entre disponer de desplazamientos grandes y el número de bits ocupados en el formato. Lo habitual es reservar al menos 8 bits para el desplazamiento. Valores típicos son 16 20 bits en saltos condicionales y 26 bits en incondicionales. Salto con enlace (jump and link) Es un salto con modo relativo al PC o indexado que, además, guarda la dirección de la siguiente instrucción en un registro del procesador. Se utiliza para realizar llamadas a subrutinas (call). El retorno de la subrutina (return) se realiza mediante un salto con modo indexado, utilizando el registro que se empleó para almacenar el valor de retorno. Ejemplo (MIPS): ; Programa principal... jal rut1 ; por defecto almacena ; la dir. retorno en R31 <siguiente instr>... rut1: ; subrutina... jr r31 3-23

8 INSTRUCCIONES DE CONTROL Saltos condicionales Cómo especificar la condición de salto? Varias alternativas: 1. Códigos de condición (80x86, PowerPC, SPARC). El juego de instrucciones define un estado que se modifica de acuerdo con el resultado de la última operación aritmética efectuada. Habitualmente hay unos códigos de condición o flags: C (acarreo), Z (cero), N (negativo), etc. Además, hay instrucciones específicas para modificar explícitamente los códigos de condición según si sus operandos cumplen determinada condición. La instrucción de salto sólo tiene que comprobar la condición correspondiente. Ejemplo: add r1, r2, r3 ; r1 = r2 - r3 cmp r1,#0 beq zero ; si el divisor es cero... div r5,r4,r1 ; r5 = r4 / r1... zero:... Ventaja: Si la comprobación de la condición va detrás de la instrucción que modifica los códigos de condición, podemos ahorrarnos las instrucciones de comparación (1 6 % de casos): Inconvenientes: add r1, r2, r3 ; r1 = r2 - r3 beq zero ; si el divisor es cero... div r5,r4,r1 ; r5 = r4 / r1 La generación de los códigos de condición no es trivial y además requiere espacio para ello en el chip. El hecho de que todas las instrucciones modifiquen los códigos de condición plantea problemas cuando se pretende reordenar el código o se lanzan múltiples instrucciones aritméticas simultáneamente. 3-24

8 INSTRUCCIONES DE CONTROL 2. Comprobación explícita. El resultado de las operaciones se comprueba explícitamente por medio de instrucciones específicas. No hay códigos de condición. Hay dos posibilidades: Instrucción de comparación más instrucción de salto condicional (Alpha, MIPS). Una instrucción de comparación evalúa la condición y deposita el resultado (true o false) en un registro de uso general. La instrucción de salto tiene como uno de sus operandos un registro de uso general. Ejemplo: add r1, r2, r3 ; r1 = r2 - r3 seq r10,r1,#0 ; si (r=0) ent r10="true" bt r10, zero ; si "true"... div r5,r4,r1 ; r5 = r4 / r1 Ventaja: Regularidad del juego de instrucciones. Inconveniente: Consumo de un registro. Instrucción única de comparación y salto condicional (PA-RISC). 3. Instrucción de repetición. Una única instrucción realiza la comparación, evalúa la condición y realiza el salto, en su caso. Ejemplo: add r1, r2, r3 ; r1 = r2 - r3 cmp&beq r1,#0,zero ; si div. cero... div r5,r4,r1 ; r5 = r4 / r1 Ventaja: Reducción del número de instrucciones ejecutadas. Inconveniente: Puede ser demasiado trabajo para una sola instrucción, aumentando los CPI o el ciclo de reloj. Suele emplearse con condiciones sencillas: comparaciones =0. Permite repetir una instrucción o un bloque de instrucciones un cierto número de veces. Útil en DSPs. 3-25

9 ORGANIZACIÓN DE LOS REGISTROS 9. Organización de los registros Optimización del código Compilación = Traducción + Optimización. La optimización tiene una gran influencia en la velocidad del código generado. Optimización más importante: Ubicación de variables en registros. Número de registros Debe ser una solución de compromiso entre: Requisitos del compilador: cuántas variables de los programas se alojan en registros? Número de bits disponibles en el formato de instrucción. Tiempo de acceso al banco de registros. Espacio disponible en el chip para el banco de registros. Los computadores actuales suelen incorporar unos 32 registros enteros más otros 32 registros de coma flotante. Ventanas de registros La familia de computadores SPARC utiliza una estructura alternativa del banco de registros que pretende: Disponer de un elevado número de registros sin utilizar muchos bits en el formato de instrucción. Utilizar eficientemente ese gran número de registros: algunos estudios muestran que, una vez las variables más frecuentemente accedidas se alojan en registros, alojar más no reporta mayores beneficios. Sin embargo, disponer de un gran número de registros permite... Reducir el número de instrucciones de acceso a memoria empleadas para salvar los registros en las llamadas/retornos de procedimiento. 3-26

9 ORGANIZACIÓN DE LOS REGISTROS Si las variables globales, parámetros, o variables locales exceden del número especificado, se utiliza la memoria principal. 3-27

9 ORGANIZACIÓN DE LOS REGISTROS Dos registros: Gestión de las ventanas CWP (Current Window Pointer): Indica la ventana actual. N o de ventanas: Depende del modelo. Máximo: 32 (CWP de 5 bits) WIM (Window Invalid Mask): Vector de bits (ventana más antigua). Llamadas a procedimiento: CWP := CWP - 1; SI WIM[CWP]=1 ENT Salvar ventana CWP en memoria; Rotación a derecha (WIM): CWP WIM 7 10000000 call 6 10000000......... call 0 10000000 call 7 01000000 Retornos de procedimiento: SI WIM[CWP]=1 ENT Restaurar ventana CWP+1 desde memoria; Rotación a izquierda (WIM); CWP := CWP + 1; CWP WIM 7 01000000 ret 0 01000000......... ret 6 01000000 ret 7 10000000 Peligro! Aunque las ventanas de registros reducen el número de instrucciones ejecutadas, complican la organización, pudiendo aumentar los CPI y/o el periodo de reloj. 3-28

10 EJEMPLOS DE JUEGOS DE INSTRUCCIONES: MIPS64 10. Ejemplos de juegos de instrucciones: MIPS64 Características Arquitectura de 64 bits. Carga/almacenamiento con registros de propósito general Juego de instucciones simple. Buen soporte al compilador. Registros 32 registros de uso general de 64 bits (R0 a R31). R0 es siempre 0. 32 registros de coma flotante (F0 a F31), en simple o en doble precisión. Tipos de datos Enteros: 8 bits (byte), 16 bits (halfword), 32 bits (word) y 64 bits (double word). Coma flotante: 32 bits (simple precisión), 64 bits (doble precisión) Las operaciones se realizan sobre enteros de 64 bits y flotantes de 32 o 64 bits. Los enteros de 8, 16 y 32 bits se cargan en los registros de uso general poniendo 0 en los bits de mayor peso o extendiendo el signo, y posteriormente se tratan como enteros de 64 bits. Direccionable al byte Organización de la memoria Convenio Big Endian o Little Endian Direcciones de 64 bits. Acceso a byte, halfword, word, double word, coma flotante en simple y en doble precisión. Accesos siempre alineados. Accesible únicamente por medio de instrucciones load/store. 3-29

10 EJEMPLOS DE JUEGOS DE INSTRUCCIONES: MIPS64 Cargas/almacenamientos. Juego de instrucciones: Sobre cualquier registro de uso general (excepto R0) o coma flotante. Modo de direccionamiento desplazamiento (16 bits). Registro indirecto se obtiene con desplazamiento =0 y absoluto con registro base = R0. Acceso a byte (LB), halfword (LH), y word (LW), double word (LD), coma flotante en simple (L.S) y en doble precisión (L.D), con y sin extensión de signo. Algunos ejemplos: 3-30

10 EJEMPLOS DE JUEGOS DE INSTRUCCIONES: MIPS64 Aritméticas. Instrucciones registro-registro, 3 direcciones. Operaciones aritméticas sencillas (DADD,...), lógicas (XOR,...), desplazamientos (DSLL,...). Multiplicación MUL, división DIV y multiplicación y suma combinadas MADD. También permite el modo inmediato para todas, de 16 bits. La instrucción LUI permite generar datos constantes de 32 bits. El registro R0 se emplea para obtener otras operaciones muy utilizadas: Asignar un valor a un registro: LI R1,#5 ADD R1,R0,#5 Transferir datos entre registros: MOV R1,R2 ADD R1,R0,R2 Algunos ejemplos: DSLL R1,R2,#5 3-31

10 EJEMPLOS DE JUEGOS DE INSTRUCCIONES: MIPS64 Control. Saltos incondicionales: Tradicionales: modos relativo al PC (26 bits) (J) e indirecto a registro (JR). Con enlace (guarda PC en el R31). Modos relativo al PC (JAL) e indirecto a registro (JALR). Saltos condicionales: Instrucción de comparación, sólo si < (SLT), depositando el resultado en un registro de uso general. Salto si un registro = 0 (BEQZ) y 0 (BNEZ). Comparación+salto: compara si dos registros son = (BEQ) y (BNE). Salto en función del bit de comparación del registro de estado de coma flotante: true (BC1T) y false (BC1F). Instrucciones de transferencia condicional entre registros: si negativo (MOVN) y si cero (MOVZ). Modo relativo al PC (16 bits) Algunos ejemplos: 3-32

10 EJEMPLOS DE JUEGOS DE INSTRUCCIONES: MIPS64 Coma flotante. Suma, resta, multiplicación y división, en simple (.S) y doble (.D) precisión y paired simple (.PS) Multiplicación y suma/resta combinadas (MADD, MSUB). Transferencia entre registros de coma flotante (MOV.S, MOV.D). Transferencia de un registro de coma flotante de simple precisión a uno entero (MFC1) y viceversa (MTC1). No hay conversión. Conversión entero flotante (CVT.x.y, convierte de tipo x a tipo y, donde x, y son L (entero de 64 bits), W (entero de 32 bits), D (flotante en doble precisión) o S (flotante en simple precisión)). Comparación de registros de coma flotante (C.x.S y C.x.D, donde x puede ser LT (<),LE ( ),GT (>),GE ( ),EQ (=),NE ( )). El resultado se almacena implícitamente en un bit ( bit de comparación ) del registro de estado de coma flotante. 3-33

10 EJEMPLOS DE JUEGOS DE INSTRUCCIONES: MIPS64 Subconjunto de las instrucciones MIPS64 BEQ,BNE MOVN, MOVZ Branch GPR equal/not equal; 16 bit offset from PC+4 Copy GPR to another GPR if third GPR is negative, zero 3-34

10 EJEMPLOS DE JUEGOS DE INSTRUCCIONES: MIPS64 Formato. Formato de instrucción fijo de 32 bits, alineadas. Hay tres formatos de instrucción: LOAD/STORE: LD rt,imm(rs) SD rt,imm(rs) ALU con constantes DADD rt,rs,imm Saltos condicionales BEQZ rs,imm(pc) BEQ rs,rt,imm(pc) Saltos incondicionales JR rs JALR rs ALU reg reg DADD rd,rs,rt func es una extension del Cod. op. Indica la operacion a realizar en la ALU Desplazamientos DSLL R1,R2,#shamt Transferencia entre regs. MOVN rd,rs,rt MFC0 rt,rd 3-35

10 EJEMPLOS DE JUEGOS DE INSTRUCCIONES: MIPS64 Ejercicio: Escribir el código MIPS para hacer la operación: Y = ax + Y, siendo: X e Y vectores de flotantes en simple precisión de 64 componentes, almacenados a partir de las direcciones dx,dy y a un flotante de simple precisión, almacenado en la dirección da. DADD R1,R0,#dX ; R1 contiene la direccion de X DADD R2,R0,#dY ; R2 contiene la direccion de Y DADD R4,R1,#256 ; 256 = 64 * 4 loop: L.S F0,da(R0) L.S F1,0(R1) MUL.S F2,F0,F1 L.S F3,0(R2) ADD.S F4,F3,F2 S.S F4,0(R2) DADD R1,R1,#4 DADD R2,R2,#4 SLT R20,R1,R4 BNEZ R20,loop O bien: DADD R1,R0,#dX ; R1 contiene la direccion de X DADD R2,R0,#dY ; R2 contiene la direccion de Y DADD R4,R1,#256 ; 256 = 64 * 4 loop: L.S F0,da(R0) L.S F1,0(R1) L.S F3,0(R2) MADD.S F4,F3,F0,F1 S.S F4,0(R2) DADD R1,R1,#4 DADD R2,R2,#4 BNE R1,R4,loop 3-36