OBJETIVOS ALGUNAS CONSIDERACIONES SOBRE WINDLX

Documentos relacionados
TEMA 2: PARALELISMO INTERNO EN SISTEMAS COMPUTADORES SEGMENTACION

COMPUTADORES SEGMENTADOS (DLX)

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

TEMA 3. PLANIFICACIÓN (SCHEDULING) DE INSTRUCCIONES Arquitectura de Sistemas Paralelos 1. pág 2. direcc MEM

Procesadores superescalares. Introducción

Práctica ENS:Ensamblar y depurar

Procesadores segmentados. El DLX.

Estructuras en LabVIEW.

Ingeniería Informática. Ampliación de Estructura de Computadores. Curso Introducción a la segmentación de Instrucciones.

PARTE II: Programación en ensamblador

PRÁCTICAS DE ARQUITECTURA DE COMPUTADORES

Ingeniería Informática. Ampliación de Estructura de Computadores. Curso

Conceptos de Arquitectura de Computadoras Curso 2015

Introducción a la arquitectura de computadores

Diseño de una calculadora

Autor: Longinos Recuero Bustos

Qué es Pipelining? Es una técnica de implementación en la que se superpone la ejecución de varias instrucciones.

Pipeline (Segmentación)

SISTEMAS PARALELOS Y DISTRIBUIDOS. 3º GIC. PRÁCTICA 3. PLANIFICACIÓN ESTÁTICA AVANZADA. TMS320C6713

TEMA 3 PLANIFICACIÓN O REORDENAMIENTO (SCHEDULING) DE INSTRUCCIONES ÍNDICE

Tema: Excel Formulas, Funciones y Macros

Fundamentos de Ordenadores. Depurar programas usando Nemiver

1. Objetivo y evolución de los procesadores ILP.

FUNDAMENTOS DE COMPUTADORES 18 de junio de Examen parcial del 2º cuatrimestre.

Computación II. Introducción a Visual Basic

Arquitectura de Computadores. Tema 11. Pipelining Avanzado

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

Paralelismo en monoprocesadores. Procesadores VLIW

CICLOS DEL PROCESADOR

Dpto. Lenguajes y Ciencias de la Computación E.T.S.I. Telecomunicación. Laboratorio de Programación Uso del depurador en Dev-C++

Funciones básicas del depurador

R. Instalación y descripción de la interfaz. Objetivos. Conocimiento previo. Contenido

FUNCIONAMIENTO DEL ORDENADOR

Tema: Microprocesadores

El nivel ISA (II)! Conjunto de Instrucciones

Pipelining o Segmentación de Instrucciones

APENDICE B Ensamblador IASM11/Simulador AVSIM11

Práctica 3: Monitoreo y Depuración de Programas

LABORATORIO Nº 8 FILTROS EN EXCEL

Instituto Tecnológico de Morelia

Centro Asociado Palma de Mallorca. Tutor: Antonio Rivero Cuesta

Definición de Memoria

Repasar las herramientas básicas para crear y animar una presentación de PowerPoint. Utilizar y crear plantillas automatizando tareas repetitivas.

Todo programa en 'C' consta de una o más funciones, una de las cuales se llama main.

Ampliación Ficha 1: Componentes de un ordenador.

Manual de Usuario. Aplicación de Autoevaluación de Centros

Procesadores Vectoriales

CONTROLES ELÉCTRICOS PRÁCTICA 6: PROGRAMACIÓN DE PLC UNIDAD 5 LIRA MARTÍNEZ MANUEL ALEJANDRO DOCENTE: PACHECO HIPÓLITO JAVIER

Sistema Operativo Linux

El lenguaje C. 1. Identificadores, constantes y variables

Circuitos Digitales II y Laboratorio Electrónica Digital II y Laboratorio

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

Office 365 Pro Plus ACTVACIÓN EN EQUIPOS COMPARTIDOS

Algoritmos. Medios de expresión de un algoritmo. Diagrama de flujo

Pipeline o Segmentación Encausada

Departamento de Ingeniería de Sistemas y Automática. STEP 7. Juego de instrucciones

Procesos Fin de Ejercicio Contabilidad

Qué es una tabla dinámica? Para qué sirve una tabla dinámica?

SEGUIMIENTO DE LOS ACUERDOS DE NIVEL DE SERVICIO DE INTERNET. Paloma Sánchez López Subdirección General de Informática TGSS

Tema 2 Introducción a la Programación en C.

Sesión No. 10. Contextualización INFORMÁTICA 1. Nombre: Gestor de Base de Datos (Access)

PROGRAMAS PARA LA CLASSPAD MANAGER.

Expresiones Aritméticas. Programación digital I Escuela de Sistemas Facultad de Ingeniería Gilberto Diaz

CPU MEMORIAS CACHE. Memorias caché. Memoria caché = memoria de tamaño pequeño y acceso rápido situada entre la CPU y la memoria principal.

2. EXPRESIONES 3. OPERADORES Y OPERANDOS 4. INDENTIFICADORES COMO LOCALIDADES DE MEMORIA

UNIDAD 12.- Estadística. Tablas y gráficos (tema12 del libro)

WinDLXV. Manual de usuario

Oliverio J. Santana Jaria. Sistemas Digitales Ingeniería Técnica en Informática de Sistemas Curso Los objetivos de este tema son:

Tablas en vista hoja de datos

Nombre de la asignatura: Programación Básica. Créditos: Objetivo de aprendizaje

Laboratorio de Arquitectura de Redes. Punteros en lenguaje C

Objetivos. Epígrafes 3-1. Francisco José García Álvarez

Microsoft Project 2013

Los valores obtenidos de speedup tienden a incrementarse hasta los ocho procesadores. al usar diez procesadores éste se mantiene igual o decrece. Esto

Pontifica Universidad Católica de Chile Departamento de Ingeniería Eléctrica

GUIAS ÚNICAS DE LABORATORIO ECUACIONES DE ESTADO AUTOR: ALBERTO CUERVO SANTIAGO DE CALI UNIVERSIDAD SANTIAGO DE CALI DEPARTAMENTO DE LABORATORIOS

Manual del Integrador Contable Premium Soft

Tema 3.- Predicados y sentencias condicionales

(1) Unidad 1. Sistemas Digitales Basados en Microprocesador SISTEMAS BASADOS EN MICROPROCESADORES. Grado en Ingeniería Informática EPS - UAM

Relación de prácticas de la asignatura METODOLOGÍA DE LA PROGRAMACIÓN Segundo Cuatrimestre Curso º Grado en Informática

Creación y Modificación de Blog

Tema 14: Sistemas Secuenciales

Relación de prácticas de la asignatura METODOLOGÍA DE LA PROGRAMACIÓN Segundo Cuatrimestre Curso º Grado en Informática

Encuesta sobre Equipamiento y Uso de Tecnologías de la Información y Comunicación (TIC) en los Hogares

Shell Script de instalación y configuración para el servicio DHCP en CentOS v5.x. Manual de instrucciones.

Programación Vectorial

INDICE Parte 1. Visual Basic Capitulo 1. Qué es Visual Basic? Capitulo 22. Mi Primera Aplicación Capitulo 3. Elementos del lenguaje

UNIDAD 1. writer PRIMEROS PASOS. CURSO: LibreOffice

INSTALACION DE MySQL

Equipamiento ADSL» Inalámbrico. Adaptador USB PAUTAS PARA LA VERIFICACION TCP/IP

Desde los programas más simples escritos en un lenguaje de programación suelen realizar tres tareas en forma secuencial.

Documentación del CK-BaaB

ATRIBUTOS DE LOS FICHEROS EN LINUX

4. NÚMEROS PSEUDOALEATORIOS.

SISTEMAS OPERATIVOS Arquitectura de computadores

Tutorial de NetCDF. Copyright Esri All rights reserved.

ModelBuilder - Tutorial de ejecución de herramientas

Sistemas Distribuidos: Migración de Procesos

Herramientas de Programación. M.C. Juan Carlos Olivares Rojas

SIMULACIÓN CON PROTEUS

Transcripción:

Arquitectura de Sistemas Paralelos 3 er curso de Ingeniería Técnica en Informática de Sistemas Práctica: Procesador segmentado DLX. Técnicas de optimización Curso 2005/2006 OBJETIVOS En esta práctica se pretende estudiar el comportamiento de un procesador segmentado, comprobar el efecto de los bloqueos de datos y control sobre las prestaciones así como evaluar algunas técnicas para reducir estos bloqueos. Para ello, utilizaremos el simulador WinDLX (de libre distribución, disponible en http://www.atc.us.es/?op=descargas). Se trata de un simulador del procesador segmentado DLX. Con esta práctica se pretende que el alumno: se familiarizarse con la arquitectura y el juego de instrucciones del DLX consolide sus conocimientos sobre segmentación de procesadores utilice simuladores para evaluar el rendimiento de un procesador aplique algunas de las técnicas estudiadas para optimizar la ejecución en procesadores segmentados ALGUNAS CONSIDERACIONES SOBRE WINDLX WinDLX es un simulador de fácil manejo (basado en ventanas y menús simples) que emula completamente el DLX, tanto la cadena de ejecución, como los contenidos de la memoria, el fichero de registros y los registros temporales. Además, consta de varios parámetros configurables por el usuario. Dispone de seis ventanas en las que se detalla toda la información relativa a la ejecución de las instrucciones: Register Window. Muestra tanto el contenido de los registros de usuario (enteros y de punto flotante) como el de los registros internos de la máquina. De estos últimos, destacamos los siguientes: PC: Contador de programa, contiene la dirección de la próxima instrucción a cargar IMAR: Contiene la dirección con la que se accede a memoria para cargar la instrucción actual (siempre valdrá 4 menos que el PC, excepto en los saltos) IR: Registro de instrucción, contiene la instrucción a ejecutar A y B: Son dos registros temporales que almacenan el valor de los operandos de la instrucción ALU y ALUHI. Están a la salida de la ALU entera, de forma que su contenido es el resultado de la operación aritmético-lógica. ALUHI es la parte alta. DMAR: Contiene la dirección con la que se accede a memoria para transferir un dato en una instrucción Load o Store. Clock Cycle Diagram Window. Muestra la cadena de ejecución de las instrucciones en cada ciclo de reloj. Al ser el DLX un procesador segmentado, varias instrucciones se ejecutan solapadas en el tiempo. El DLX subdivide cada instrucción en 5 etapas o fases (IF-ID-EX-MEM-WB), de manera que existen 5 instrucciones ejecutándose a la vez pero en etapas diferentes, como se observa en la Figura. Haciendo doble click sobre una instrucción puede obtenerse información completa sobre su ejecución.

Code Window. Muestra información detallada (dirección de memoria, código de instrucción y nemotécnico) sobre el programa que ha sido cargado. Cada instrucción aparece en un color distinto según la etapa en la que se encuentre, como se ve observa en la figura. Haciendo doble click sobre una instrucción puede obtenerse información completa sobre su ejecución. Pipeline Window. Muestra un gráfico de la cadena de ejecución del DLX. Además de la cadena de ejecución para operaciones enteras, aparecen las unidades de ejecución para operaciones flotantes. Algunos parámetros relacionados con éste último tipo de operaciones pueden ser configurados. Statistics Window. Muestra información de carácter estadístico sobre la ejecución del programa cargado: número de ciclos, número de bloqueos (por tipo), estadísticas sobre el tipo de instrucción, etc. Breakpoints Window. Muestra los puntos de ruptura que el usuario ha establecido en el programa. En un procesador segmentado, la depuración y simulación de un programa es una tarea compleja, pues en un mismo ciclo de reloj existen varias instrucciones ejecutándose a la vez (en nuestro caso 5). Por ello, el contenido de los registros internos en un determinado ciclo de reloj depende la etapa en que se encuentre cada instrucción. Por tanto, para entender los valores de los registros que aparecen en la ventana Register Window hay que conocer previamente en qué fase está cada instrucción. El WinDLX dispone de un menú (Configuration) para la configuración del simulador (ver Figura). La configuración debe establecerse como muestra la Figura. De esta manera, las direcciones serán numéricas y no simbólicas (etiquetas) y la cuenta de ciclos será absoluta y no relativa al PC. La opción Enable Forwarding permite habilitar los desvíos de datos (bypass o forwarding). También se dispone de un menú (Memory) mediante el cual es posible visualizar el contenido de la memoria (Display), cambiarlo (Change) y ver las etiquetas del código (Symbol). La dirección por defecto del código empieza en la posición 0x00000100 ($TEXT) y la de datos en 0x00001000 ($DATA). Utilizando el menú File (Load Code or Data) puede cargarse el programa que quiere simularse. Debe ser un archivo de texto con extensión.s y ser seleccionado previamente en la ventana Selected Files. Mediante el menú Execute podemos realizar la simulación completa (Run), paso a paso (Single cycle) o ejecutar un número determinado de ciclos (Multiple cycles). Para comenzar una nueva simulación hay que inicializar el DLX usando la opción del menú File llanada Reset DLX (con RESET All se inicializa también la memoria, por lo que es necesario cargar de nuevo el programa).

REALIZACIÓN DE LA PRÁCTICA El alumno antes de asistir al laboratorio debe: estudiar la arquitectura y juego de instrucciones del DLX repasar los conceptos relacionados con la segmentación de procesadores conocer las técnicas estudiadas para optimizar la ejecución de código en procesadores segmentados haber asimilado las consideraciones expuestas sobre el simulador WinDLX Una de las técnicas más utilizadas para mejorar las prestaciones de los procesadores segmentados es el desenrollado de bucles (loop unrolling). El objetivo es obtener un conjunto de instrucciones no relacionadas que pueden ser usadas para eliminar los bloqueos producidos por las dependencias de datos. Estos bloqueos pueden ser eliminados si entre las dos instrucciones que lo producen se inserta un número de instrucciones igual al número de ciclos de bloqueo. El desenrollado de bucles consiste replicar el cuerpo del bucle un número determinado de veces. De esta manera, se disponen de más instrucciones para la eliminación de los bloqueos de datos. Es necesario reajustar el incremento/decremento del puntero, pues en cada iteración se procesan tantos elementos como veces se haya replicado el bucle. Se eliminan, por tanto, operaciones de incremento/decremento y saltos. Una vez desenrollado el bucle, hay que renombrar los registros utilizados en diferentes iteraciones para poder reordenar convenientemente el código (planificación de instrucciones). A continuación se muestra un ejemplo en el que se aplica esta técnica. for (i=0;i<1000;i++) x[i]=x[i]+s; loop: ld f0,0(r1) add f4,f0,f2 sd 0(r1), f4 subi r1,r1,#8 bnez r1, loop loop: ld f0,0(r1) ld f6,-8(r1) ld f10,-16(r1) ld f14,-24(r1) subi r1,r1,#32 add f4,f0,f2 add f8,f6,f2 add f12,f10,f2 add f16,f14,f2 sd 32(r1), f4 sd 24(r1), f8 sd 16(r1), f12 sd 8(r1), f16 bnez r1, loop Para poder planificar convenientemente la ejecución de instrucciones es necesario que el bucle no contenga dependencias entre instrucciones de distintas iteraciones (dependencias loop-carried). Estas dependencias se detectan en el código de alto nivel. En este caso, se dice que el código es paralelo a nivel de bucle (como el mostrado en el ejemplo). Supongamos el siguiente ejemplo: for (i=0;i<1000;i++) { a[i+1]=a[i]+c[i]; // S1 b[i+1]=b[i]+a[i+1]; // S2 } Tanto S1 como S2 presentan dependencias loop-carried, ya que utilizan datos calculados en la iteración anterior (a[i+1] con a[i] y b[i+1] con b[i]). Estas dependencias entre iteraciones hacen que la técnica de loop unrolling no sea eficaz, pues las sucesivas iteraciones de S1 o S2 deben ser ejecutadas en orden. Sin embargo, la dependencia entre S2 y S1 (a[i+1]) no es loop-carried y se evitaría desenrollando el bucle. El bucle es, por tanto, no paralelo.

Supongamos otro ejemplo: // Versión no paralela for (i=0;i<25;i++) { a[i]=a[i]+b[i]; // S1 b[i+1]=b[i+1]+3; // S2 } En este caso, a pesar de que existe una dependencia loop-carried entre S1 y S2 (b[i] con b[i+1]), el bucle puede hacerse paralelo. Esto es posible porque no contiene dependiencia loop-carried circulares, es decir, ninguna instrucción depende de sí mismas y aunque S1 depende de S2, S2 no depende de S1. A continuación se muestra la versión paralela de este código: // Versión paralela a[0]=a[0]+b[0]; for (i=1;i<25;i++) { b[i]=b[i]+3; a[i]=a[i]+b[i]; } b[25]=b[25]+3; Ejercicios a realizar por el alumno El siguiente código en ensamblador implementa el ejemplo de dependencia no circular (versión no paralela). Al vector a comienza en la posición 1000 y el b en la posición 2000. bucle: add r1,r0,r0 lw r2,1000(r1) lw r3,2000(r1) add r4,r4,r3 sw 1000(r1),r4 lw r5,2004(r1) addi r5,r5,3 sw 2004(r1),r5 addi r1,r1,4 seq r6,r1,100 beqz r6,bucle trap 0 ; instruccion para finalizar la ejecución 1.- Utilizando el WinDLX simule el código en un DLX sin desvíos (Enable Forwarding desactivado). Conteste en la hoja que se adjunta a las siguientes cuestiones: a) Cuánto vale el CPI? b) Inicialice el contenido de la memoria afectada a un determinado valor antes de ejecutar el código. Puede utilizar la opción Change del menú Memory o inicializarla a cero con Reset All (Reset DLX no lo hace). Qué valores toman al final de la ejecución del programa las direcciones de memoria afectadas? Explique porqué se obtienen estos valores. 2.- Desenrolle el bucle 5 veces, renombre los registros de iteraciones distintas y reordene el código resultante para eliminar el mayor número de bloqueos posible. Simule el código y compruebe que al final de la ejecución los valores de las direcciones de memoria afectadas son los mismos que los obtenidos en el ejercicio 1. Conteste a las siguientes cuestiones: a) Cuánto vale el CPI? b) Qué aceleración se consigue al desenrollar el bucle?

3.- Programe en ensamblador la versión paralela del ejemplo. Simule el código en un DLX sin desvíos y compruebe que, al final de la ejecución, los valores de las direcciones de memoria afectadas son los mismos que los obtenidos en el ejercicio 1. Calcule el CPI. 4.- Desenrolle el bucle 4 veces ( menos que en el ejercicio 2!), renombre los registros de iteraciones distintas y reordene el código resultante para eliminar el mayor número de bloqueos posible. Simule el código y compruebe que, al final de la ejecución, los valores de las direcciones de memoria afectadas son los mismos que los obtenidos en el ejercicio 1. Conteste a las siguientes cuestiones: a) Cuánto vale el CPI? b) Qué aceleración se consigue al desenrollar el bucle? c) Qué conclusiones pueden obtenerse de los resultados obtenidos en este ejercicio y en el ejercicio 2? 5.- Repita todos los ejercicios pero con todos los desvíos activados (Enable Forwarding activado). Qué conclusión se obtiene a partir de los resultados?

Arquitectura de Sistemas Paralelos 3 er curso de Ingeniería Técnica en Informática de Sistemas Práctica: Procesador segmentado DLX. Técnicas de optimización Curso 2005/2006 ALUMNO: Ejercicio 1 Ejercicio 2 Ejercicio 3

Arquitectura de Sistemas Paralelos 3 er curso de Ingeniería Técnica en Informática de Sistemas Práctica: Procesador segmentado DLX. Técnicas de optimización Curso 2005/2006 ALUMNO: Ejercicio 4 Ejercicio 5