Tema V Generación de Código

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

Tema 2 Conceptos básicos de programación. Fundamentos de Informática

Técnicas de Programación

Tema II: Metodología para la construcción de programas

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

Computadora y Sistema Operativo

M. C. Felipe Santiago Espinosa

TEMA 3: El proceso de compilación, del código fuente al código máquina

Tema II: Metodología para la construcción de programas. Profesora: Nelly García Mora

Unidad I Introducción a la programación de Sistemas. M.C. Juan Carlos Olivares Rojas

Lenguaje de programación. COMPILADORES Unidad I: Introducción al proceso de compilación

Las optimizaciones pueden realizarse de diferentes formas. Las optimizaciones se realizan en base al alcance ofrecido por el compilador.

FUNCIONAMIENTO DEL ORDENADOR

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

TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES TRABAJO DE PRÁCTICAS. Convocatoria de junio de 2013

Diseño de compiladores. Organización de memoria. Organización de memoria. Organización de memoria. Zona de código 04/05/2014 ORGANIZACIÓN DE MEMORIA

INICIACIÓN A LA PROGRAMACIÓN 1ª parte

Qué es un programa informático?

C1 INTRODUCCIÓN AL LENGUAJE C. Fundamentos de Informática Departamento de Ingeniería de Sistemas y Automática. EII. Universidad de Valladolid

Tema III: Introducción al lenguaje de programación

Unidad I: Organización del Computador. Ing. Marglorie Colina

Programación I. Carrera: ECM Participantes Participantes de las academias de ingeniería electrónica de los Institutos Tecnológicos.

Objetos de aprendizaje: Computadora

Algoritmos. Diagramas de Flujo. Informática IV. L. S. C. Heriberto Sánchez Costeira

1. Computadores y programación

Nombre de la asignatura: Arquitectura de Computadoras. Créditos: Aportación al perfil

Las Etapas de la Compilación

PROGRAMA ANALÍTICO DE ASIGNATURA

0-31 : caracteres de control : carac. Comunes : especiales (flechas, símbolos) y particulares (ñ)

Métodos para escribir algoritmos: Diagramas de Flujo y pseudocódigo

2. Codificar de forma sistemática la secuencia de instrucciones en un lenguaje.

Introducción a la Operación de Computadoras Personales

Lenguaje binario. Código ASCII. Medidas de la información

Algoritmos y solución de problemas. Fundamentos de Programación Otoño 2008 Mtro. Luis Eduardo Pérez Bernal

OPTIMIZACIÓN DE CÓDIGO

Un. VI. Generador de código intermedio.

IFCT0209 Sistemas Microinformáticos

INDICE Programa Entrada Unidad de control Unidad aritmética y lógica (ALU)

Construyendo Programas más Complejos

Unidad II: Análisis semántico

Arquitectura del PLC. Dpto. Electrónica, Automática e Informática Industrial)

Tema: Microprocesadores

Unidad V Análisis Semántico. M.C. Juan Carlos Olivares Rojas

Introducción a la programación

PROCESADORES DE LENGUAJE EXAMEN FINAL 8-JUNIO-07

ESCUELA SUPERIOR POLITECNICA DEL LITORAL PROGRAMA DE ESTUDIOS

Universidad Centroccidental Lisandro Alvarado. Decanato de Ciencias y Tecnología Departamento de Sistemas

Objetivos. Objetivos. Arquitectura de Computadores. R.Mitnik

DISEÑO DEL SISTEMA DE INFORMACION (DSI)

CICLOS DEL PROCESADOR

UNIVERSIDAD DE GUADALAJARA

Tema 1. Introducción a la arquitectura de computadores: diseño, coste y rendimiento

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

: Algorítmica y Estructura de Datos I

Toda copia en PAPEL es un "Documento No Controlado" a excepción del original.

INDICE Control de dispositivos específicos Diseño asistido por computadora Simulación Cálculos científicos

Sesión VI: Desarrollo de aplicaciones en el entorno MATLAB

Introducción a la arquitectura de computadores

Universidad Católica de Santiago del Estero Facultad de Matemática Aplicada Carrera de Ingeniería en Electrónica

Tema I. La computación en el profesional de la Ingeniería

Fundamentos de programación JAVA

OFERTA PFC DEPARTAMENTO DTE (ÁREAS: TELEMÁTICA y ELECTRÓNICA) OTOÑO

ARQUITECTURA BÁSICA DEL ORDENADOR: Hardware y Software. IES Miguel de Cervantes de Sevilla

Intel lanza su procesador Caballero Medieval habilitado para Inteligencia Artificial

6. PROCESADORES SUPERESCALARES Y VLIW

CAPITULO 1 INTRODUCCION AL PROYECTO

Pruebas de escritorio

Tema 6 Organización y gestión de la memoria

HOJA DE CONTROL DE CAMBIOS EN LA NORMATIVA INTERNA DE EP PETROECUADOR

Memoria Cache. Departamento de Arquitectura de Computadores

PROGRAMA DE LABORATORIO SECCIÓN: ÁREA A LA QUE PERTENECE: POS-REQUISITO: AUXILIAR:

Metodología para la solución de problemas programables

Organización lógica Identificación de bloque

Anexo. Control de errores

CARRERA DE INGENIERÍA EN SISTEMAS COMPUTACIONALES SYLLABUS ARQUITECTURA DE COMPUTADORES

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

Tema 1. Introducción y Conceptos Generales. Informática I Biblioteconomía y Documentación

Nombre de la asignatura: Algoritmos y Lenguajes de programación.

ACTIVIDAD: Control de Lectura # 1: Benchmarking para Competir con Ventaja Por: Roberto J. Boxwell. MATERIA: Ingeniería de Software.

La última versión disponible cuando se redactó este manual era la 5 Beta (versión ), y sobre ella versa este manual.

DES: Programa(s) Educativo(s): Tipo de materia: Clave de la materia: Semestre: Área en plan de estudios:

Tema 7. Generación de código

FACULTAD DE INGENIERÍAS INGENIERIA DE SISTEMAS ARQUITECTURA DEL COMPUTADOR TECNICO

Bloques Aritméticos - Multiplicadores

SISTEMAS INFORMÁTICOS PROGRAMACION I - Contenidos Analíticos Ing. Alejandro Guzmán M. TEMA 2. Diseño de Algoritmos

Enteros. Son los números que no contienen componentes fraccionarios y, por tanto, no contienen punto decimal.

Estructura del Computador

Profesor(a): M. A. Zeferino Galarza Hernández

Actividad de Evaluación Brandon Emmanuelle Cuevas Rangel GPO: 303 Carrera: Informática 3er Semestre Joel Rocha Barocio Cienega de Flores N.L.

TEMA 2. CONCEPTOS BÁSICOS DE ALGORÍTMICA

PROGRAMACIÓN. UNIDAD II. ALGORITMO PROFA : HAU MOY

Tema 3 SUBRUTINAS. Estructura de Computadores OCW_2015 Nekane Azkona Estefanía

Computación Paralela Móvil

Transcripción:

Tema V Generación de Código Una vez que se ha realizado la partición HW/SW y conocemos las operaciones que se van a implementar por hardware y software, debemos abordar el proceso de estas implementaciones. Seguiremos con la implementación software. Este tema ya ha sido ampliamente tratado a lo largo de diferentes asignaturas, así que no se hará mucho hincapíe. Especificaciones Formato intermedio Partición HW/SW Código Implementación HW Integración Verificación

Departamento de Ingeniería Electrónica de Sistemas Informáticos y Automática 63 5.1. Introducción En la siguiente etapa del diseño debemos generar el código de las operaciones que van a ser implementadas vía software, para lo cual se debe mapear las especificaciones de alto nivel a los recursos disponibles en el procesador (o arquitectura software del sistema). A la hora de abordar esta tarea es necesario tener en cuenta dos aspectos fundamentales: Arquitecturas del sistema software Ya tenga un conjunto de instrucciones complejo o reducido. El sistema esté dividido en etapas de pipeline o no. El esquema de memoria, tengan un tratamiento idéntico las instrucciones y datos o no. El tipo de procesamiento en paralelo o no Criterios de optimización Rendimiento Tamaño Consumo Utilización de recursos Estos aspectos nos servirán para poder minimizar el código de las operaciones, y así adecuarlo a las características del sistema global. En concreto, la arquitectura software nos va a servir para utilizar los aspectos que nos lleven a obtener unos criterios de optimización deseados. Como se trata de un programa software, el flujo de diseño será el mismo que el de cualquier programa, mostrado en la figura 5.1. En este flujo el código inicial debe pasar por una serie de procesos antes de obtener el código ejecutable almacenado en memoria y listo para su ejecución. Estos procesos son la compilación, el ensamblaje, el linkado y el cargado. Todos ellos pueden ser realizados de forma automática sin ninguna intervención del programador (a excepción de introducir el código fuente); no obstante esta solución implica un tiempo de diseño muy bajo a costa de una optimización muy pobre. Lo que se suele hacer es utilizar unos compiladores apropiados para los requerimientos de sistemas empotrados y realizar el resto de procesos de forma automática, por ello hablaremos de la compilación en último lugar. La tarea del ensamblador consiste en pasar del código de ensamblador (generalmente a base de instrucciones de bajo nivel expresadas como nemotécnicos) a un código objecto que pueda ser interpretable por el sistema software en el que se vaya a ejecutar. Por lo tanto, el ensamblador deberá realizar los siguientes procesos: Expansión de abreviaturas y macros Resolución de etiquetas locales Tabla de reubicación Obtención de la salida en el formato máquina del sistema software destino La tarea del linkador consiste en pasar del formato máquina a un código ejecutable en el sistema software destino. Por lo tanto, deberá realizar las siguientes operaciones:

Departamento de Ingeniería Electrónica de Sistemas Informáticos y Automática 64 codigo.c Compilador codigo.s Ensamblador codigo.o Linkador codigo Cargador Leer todos los objecto y librerías utilizadas. Combina las diferentes secciones (de una forma inteligente). Resuelve los símbolos globales. Como salida proporciona un código ejecutable con una nueva tabla de reubicación. La tarea del cargador consiste en llevar el código ejecutable a la memoria principal del sistema software para su ejecución. Para ello deberá realizar los siguientes procesos: Copia el código ejecutable suministrado por el linkador a memoria. Reserva espacio para la pila. Reubica las direcciones en función de la tabla. Pasa el control al código de startup. El compilador, a pesar de ser el primero en realizar sus tareas, lo hemos dejado para el final ya que es el elemento en el que se pueden realizar las optimizaciones. La tarea del compilador consiste en pasar una secuencia de instrucciones (generalmente de un lenguaje de alto nivel como puede ser el C) a una descripción en lenguaje ensamblador. Para ello debe realizar los siguientes procesos: Analizador léxico, Parser, Analizador semántico, Traductor, Optimizador, Figura 5.1.- Flujo de diseño de un programa software. Estos elementos estarán presentes cuando la compilación se realiza a bajo nivel. No obstante, al ir implementándose compiladores dedicados a estos sistemas, también se puede abordar la

Departamento de Ingeniería Electrónica de Sistemas Informáticos y Automática 65 compilación desde un nivel mixto, es decir, todavía no desde un nivel de abstracción alto, pero no tan bajo como el anterior. En este útlimo caso, las dos últimas tareas son sustituidas por las siguientes: Generador de código intermedio, Optimizador, Generador de código, como se puede ver en la figura 5.2. Analizador léxico Parser Analizador semántico Bajo nivel Traductor Optimizador Generador de código intermedio Optimizador Nivel mixto Generador de código Figura 5.2.- Pasos del compilador 5.2. Análisis Debido a que a lo largo de la carrera ya habéis cursado suficientes asignaturas relativas a la programación, aquí vamos a indicar una serie de directrices para aumentar las prestaciones del código utilizado, a través de las siguientes actuaciones: reducción del consumo de potencia aumento de velocidad reducción del área de memoria 5.2.1. Análisis de prestaciones La generación del código provocará diferentes consumos de potencia según los procesos y accesos a memoria que estén programados realizarse. El consumo se puede dividir en diferentes partes del sistema software: Datapaths de la ALU y las unidades funcionales

Departamento de Ingeniería Electrónica de Sistemas Informáticos y Automática 66 Cache y sistemas de memoria Buses del sistema Circuitos de control y distribución más lógica de control. En cambio, el tiempo de ejecución se puede dividir en dos contribuciones bien diferenciadas: Instrucciones existentes en el código Número de accesos a memoria Por último, el área de memoria dependerá del número y tipo de variables que se hayan declarado en el código. Suponiendo que el algoritmo implementado es el más óptimo, vamos a dar una serie de directrices que sirven para reducir el consumo de potencia y aumentar las prestaciones en el sistema software, mostrados en la figura 5.3: Permutaciones de bucles (figura 5.3a), para mejorar la localidad al acceder a los elementos del array de forma secuencial. De esta forma todos los datos del array (sino la mayoría) estarán localizados en la memoria cache. Reducción del tamaño de la ventana de los bucles (figura 5.3b), de esta forma se reduce el número de iteraciones de cada bucle. Fusión de bucles (figura 5.3c), reduciendo el espacio de memoria que se recorre eliminando bucles innecesarios. Desdoblado de bucles (figura 5.3d), de esta forma reducimos el número de iteraciones que deben realizar los bucles. Reindexar la dimensión (figura 5.3e), de esta forma se mejora la localidad igual que en el primer caso. Minimizar los accesos a memoria (figura 5.3f), y así reducimos las instrucciones que se deban ejecutar en cada bucle a las necesarias. Reducción de área en memoria (figura 5.3g), y spuestamente también se reducen los accesos a ella.

Departamento de Ingeniería Electrónica de Sistemas Informáticos y Automática 67 P[j][i] = Q[j][i] MAYOR CONSUMO (a) P[j][i] = Q[j][i] MENOR CONSUMO for (k=0; k<n; k++) (b) for (i1=0; i1<n; i1+=t) for (j1=0; j1<n; j1+=t) for (k1=0; k1<n; k1+=t) for (i=i1; i<min(i1+t,n); i++) for (j=j1; j<min(j1+t,n); j++) for (k=k1; k<min(k1+t,n); k++) P[i] = Q[i] P[i] = P[i]*R[i] (c) { P[i] = Q[i] P[i] = P[i]*R[i] for (k=0; k<n; k++) (d) for (i=0; i<n; i+=b) for (k=0; k<n; k++) { X[i+1][j]=Y[i][j]+Z[k][j]... X[i+b-1][j]=Y[i][j]+Z[k][j] P[j][i] = Q[i][j] (e) P[j][i] = Q1[j][i] P[i] =... (f) { P[i] =...... {... = P[i] P[i] = R[i] (g) {... = P[i] Q[i] = R[i] Figura 5.3.- Técnicas para reducir el consumo de potencia y aumentar las prestaciones.