Tema 4. Condiciones para el paralelismo: Dependencias

Slides:



Advertisements
Presentaciones similares
Arquitectura de Computadores I
Advertisements

Diagramas de flujo Pseudo-código Ejercicios Instalación de C++
TEMA 3 ILP, Panificación dinámica, Predicción de saltos, Especulación
DIAGRAMA DE ACTIVIDAD Roberto Certain Leonardo Molina.
Nuestro reto es educar al pensamiento, para que razone de acuerdo a ciertas reglas; con ello podremos ser más eficientes al momento en que ordenamos.
UML para programadores Java
Esta obra está bajo una licencia de Creative Commons. Creative CommonsCreative Commons Autor: Jorge Sánchez Asenjo (año 2005)
Análisis y Diseño de Sistemas II “Exposición Diagramas UML”
PROCESADORES SUPERESCALARES
TECNICAS DE PRUEBA DEL SOFTWARE
Iteración La iteración permite modelar problemas en los cuales una secuencia de instrucciones debe ejecutarse varias veces. La cantidad de iteraciones.
COMPUTACIÓN BÁSICA Nombre: Anderson cueva Carrera: Contabilidad y auditoria Fecha: Profesor evaluador: LIC. Fani Ceballos.
Concepto de programa. Directorio Concepto de programa. Analisis del problema. Resolucion del problema. Desarroollo de un programa. Partes constitutivas.
Pipelines: Riesgos.
ALGORÍTMICA Dpto. Ingeniería de Sistemas y Automática
Traducción dirigida por la Sintaxis
INTRODUCCIÓN A UML Oscar Miguel Alonso Moreno.
Universidad Técnica Particular de Loja Nombre: Javier Coronel Burneo Carrera: Ingeniería Agropecuaria.
EL Sistemas Digitales Ing. José Alberto Díaz García Escuela de Ingeniería Electrónica Arquitectura Segmentada Pipeline (Segmentación)
PARADIGMA Es un esquema de pensamiento que nos lleva a concebir las cosas de una manera determinada. el término paradigma puede indicar el concepto de esquema.
Representación de los algoritmos
UNIVERSIDAD NACIONAL AUTONOMA DE HONDURAS
Profesor: Miguel Angel Vidal
ANALISIS SINTACTICO El análisis gramatical es la tarea de determinar la sintaxis, o estructura, de un programa. Por esta razón también se le conoce como.
Tema 6. Conceptos básicos de programación
Este obra se publica bajo unalicencia de Creative Commons Reconocimiento- NoComercial-CompartirIgual 3.0 España.licencia de Creative Commons Reconocimiento-
Esta obra se publica bajo unalicencia de Creative Commons Reconocimiento- NoComercial-CompartirIgual 3.0 España.licencia de Creative Commons Reconocimiento-

Este obra se publica bajo unalicencia de Creative Commons Reconocimiento- NoComercial-CompartirIgual 3.0 España.licencia de Creative Commons Reconocimiento-
Fundamentos de Programación
Facultad de Ingeniería Manufactura Integrada Por Computador II
FORMULACIÓN DE ALGORITMOS
Unidad 2: Organización del CPU
Este obra se publica bajo unalicencia de Creative Commons Reconocimiento- NoComercial-CompartirIgual 3.0 España.licencia de Creative Commons Reconocimiento-
Conceptos generales: Concurrencia: Existencia simultánea de varios procesos en ejecución. IMPORTANTE: EXISTENCIA SIMULTÁNEA NO IMPLICA EJECUCIÓN SIMULTÁNEA.
PROGRAMACIÓN PARALELA Tema 4: Metodología de la programación
Aviso legal Derechos de autor del recurso: Esta obra está sujeta a la licencia Reconocimiento-NoComercial- CompartirIgual 3.0 Unported de Creative Commons.
INGENIERIA EN SISTEMAS COMPUTACIONALES
Inteligencia artificial
Tema 10.3: Asignación de Espacio No Contiguo. Tema 10.3: 2 Silberschatz, Galvin and Gagne ©2005 Fundamentos de los Computadores (ITT, Sist. Electr.),
Tema 6. Conceptos básicos de programación (Repaso) Prof. María Alejandra Quintero Informática Año 2013.
Procesadores de Lenguajes
Modelos Computacionales

Nombre: Cristian Achina Curso: 4to «A» Fecha:
Tema 2. CPU: Introducción
Introducción a la tecnología Realizado por: Miguel Ángel Arias.
Este obra se publica bajo unalicencia de Creative Commons Reconocimiento- NoComercial-CompartirIgual 3.0 España.licencia de Creative Commons Reconocimiento-
“Organización y Arquitectura de Computadores” William Stallings
Programación de Computadores (IWI-131)
Objetivo Mostrar los fundamentos de la programación a través de ejemplos y prácticas utilizadas cotidianamente en el desarrollo de aplicaciones.
1 Sebastián Argüello A60490 semana 3 Autómatas y compiladores CI-1322.
Capítulo 4 CPU y la memoria.
Contenido:  ¿Qué son los Punteros?  Los Procedimientos: New y Dispose.
Cecilia Laborde González
Patricio A. Castillo José M. Galarce Septiembre 13 de 2008 Cuarta Clase.
ALGORITMO QUE ES ??.
1.4 CLASIFICACION DE LA TECNOLOGIA EN EL DESARROLLO DEL SOFTWARE
¿QUE ES EL DIAGRAMA DE ESTADO ?
* Cuando nos permite desarrollar un programa que necesitamos para tomar un conjunto de buenas prácticas para hacer eso. Esto se debe a que podemos ahorrar.
LICENCIAS CREATIVE COMMONS NOMBRE: SANTIAGO MALDONADO CARRERA: ADMINISTRACION DE EMPRESAS CICLO: PRIMER PARALELO: DOCENTE: Gladys Tenezaca.
Curso: Fundamentos de Computación
ESTE TERMINO SE DEFINE COMO : UN PROCESO EN EL CUAL SE NOS DESCRIBE UN PROBLEMA (EN LENGUAJE NATURAL), LUEGO DE ESTO SE PLANTEAN POSIBLES RESOLUCIONES.
TEMA III. CONTENIDO: Lenguajes de Programación. Operandos. Operaciones. Programación lineal ó estructurada. Estructura de datos. Planificación de un automatismo.
TÉCNICAS DE PRUEBA DEL SOFTWARE
Cambios de modo, de contexto y repaso PEP 1 Luis Loyola.
Katty Evangelina Hipólito Chi.   Aunque cada maquina tiene un lenguaje ensamblador distinto, el proceso de ensamblador tiene suficiente similitudes.
Arquitectura de Computadoras (Taller) Semestre II de 2008.
El Efecto Doppler y el Big Bang
Respuesta Respuesta Respuesta Respuesta Respuesta Respuesta Respuesta
Transcripción de la presentación:

Tema 4. Condiciones para el paralelismo: Dependencias Organización de Computadores LUIS ENRIQUE MORENO LORENTE RAÚL PÉRULA MARTÍNEZ ALBERTO BRUNETE GONZALEZ DOMINGO MIGUEL GUINEA GARCIA ALEGRE CESAR AUGUSTO ARISMENDI GUTIERREZ JOSÉ CARLOS CASTILLO MONTOYA Departamento de Ingeniería de Sistemas y Automática

DEPENDENCIAS Para poder ejecutar diferentes segmentos de código en paralelo, tenemos que asegurarnos de que son independientes, es decir, el orden de ejecución no importa (no afecta al resultado). En general nos referimos a segmentos de código (grupos de instrucciones). Por simplicidad, consideraremos instrucciones simples. Las dependencias entre (grupos de) instrucciones pueden describirse por medio del grafo de dependencias. El análisis de dependencias es estático, es decir, no se realiza en run-time.

GRAFO DE DEPENDENCIAS Consideremos dos secuencias de instrucciones S1 y S2, para las que existe un camino de ejecución entre ellas (S1 primero, y después S2). Nodos: (grupo de) instrucciones que se van a ejecutar en paralelo. Arcos: indican dependencia. Ejemplo: S1 Ld r2, A Add r1, r2, r1 Subi r2, r2, #1 S2 Sub r3, r2, r1 Sto B, r3 S1 S2

DEPENDENCIAS Existen tres tipos de dependencias: Dependencias de datos Dependencias de control Dependencias de recursos

DEPENDENCIAS DE DATOS Puede plantearse un conflicto cuando dos instrucciones hacen uso del mismo dato: el orden de ejecución es importante. Dependencias de flujo Antidependencias Dependencias de salida Dependencias de E/S ( a fichero) Desconocidas

DEPENDENCIAS DE DATOS 1.Dependencia de flujo: la salida de S1 alimenta la entrada de S2. S1 S2 S1 S2 A = 1 ... B = A+C 2. Antidependencia: la salida de S2 se solapa con la entrada de S1. S1 S2 B = A ... A = C+D S1 S2

DEPENDENCIAS DE DATOS 3. Dependencia de salida: S1 y S2 escriben en la misma salida. S1 R1 = 1 ... R1 = A+C S1 S2 S2 R 4. Dependencia de I/O: S1 y S2 acceden al mismo fichero. S1 S2 I/O S1 read R1,F ... write F,R2 F S2

DEPENDENCIAS DE DATOS 5. Dependencias desconocidas: ciertas dependencias no pueden ser determinadas. Direccionamientos indirectos –> no es posible saber a que posición se esta accediendo. Variables índices en bucles: Las variable aparecen más de una vez en un bucle con diferentes índices. índices no lineales. índices que no contienen la variable del bucle.

DEPENDENCIAS DE DATOS S1 S2 S4 S3 Los casos (4) y (5) presuponen el peor caso posible: en el que no es posible determinar que esta ocurriendo, por lo que se asume que existe una dependencia para evitar posibles errores. S1 Ejemplo: S1: load R1,A /* R1 <- mem(A) */ S2: add R2,R1 /* R2 <- R2+R1 */ S3: move R1,R3 /* R1 <- R3 */ S4: store B,R1 /* mem(B) <- R1 */ S2 S4 S3

DEPENDENCIAS DE DATOS S1 S3 S5 S2 S4 Ejemplo 2: S1: read 4,A /* A <- tape 4 */ S2: rewind 4 /* rewind tape 4 */ S3: write 4, B /* tape 4 <- B */ S4: rewind 4 /* rewind tape 4 */ S5: add R1,A,B /* R1 <- A + B */ S1 I/O S3 S5 S2 S4

DEPENDENCIAS DE CONTROL Tenemos dependencias de control cuando el orden de ejecución no puede ser determinado estáticamente, sino sólo en tiempo de ejecución. Ejemplo: sentencias tipo “IF” o instrucciones tipo branch/jump. También aparecen en bucles (ver ejemplo). Dado que el orden no es conocido anticipadamente, las dependencias reales no pueden ser determinadas.

DEPENDENCIAS DE CONTROL Ejemplo: for (i=1;i<n;i++) { if (a[i -1] < 0) a[i] = 1; } for (i=0;i<n;i++) { a[i] = c[i]; if (a[i] < 0) a[i] = 1; } En ambos casos no sabemos cual será la próxima instrucción a ser ejecutada después del test. Pero, en el primer caso no hay dependencia de control, y en el segundo caso sí la hay. ¿Por qué?

DEPENDENCIAS DE RECURSOS Tenemos dependencias de recursos cuando recursos compartidos del procesador (ej. ALU, UF coma flotante, buses, etc.) son demandados por instrucciones diferentes al mismo tiempo. Ejemplo: Dependencias por ALU Dependencias de almacenamiento Ejemplo: S1: load R1, A S2: load R2, B S3: add R3,R1,R2 S4: sub R4,R1,R2 S3 S4

CONDICIONES PARA EL PARALELISMO La transformación de código secuencial en paralelo puede realizarse: Manualmente por el programador (paralelismo explícito). Automáticamente por el compilador (paralelismo implícito). En ambos casos, el “particionamiento” del código (decomposition) es un paso clave. El particionamiento o división del código determina sí (y cómo) un segmento de código puede ser ejecutado en paralelo o en un orden en particular. La detección de segmentos paralelos requiere la verificación de las relaciones de dependencia.

CONDICIONES DE BERNSTEIN Conjunto de condiciones formales que determinan si dos procesos (segmentos de programa) pueden ser ejecutados en paralelo. Ii : Conjunto de variables de entrada al proceso Pi (read set). Oi : Conjunto de variables de salida del proceso Pi (write set). “Variables”: operandos a ser loaded/stored en registros o posiciones de memoria.

CONDICIONES DE BERNSTEIN Consideremos los procesos P1 y P2 y sus conjuntos de entrada (I1, I2) y salida (O1, O2) Condiciones de Bernstein (dependencias de datos) I1 ∩ O2 = 0 (antidependencia) I2 ∩ O1 = 0 (flujo) O1 ∩ O2 = 0 (salida) Si se verifican las tres condiciones, P1 y P2 pueden ejecutarse en paralelo, esto lo denotamos como : P1 || P2

CONDICIONES DE BERNSTEIN En resumen, si P1 || P2 el orden de ejecución de dos procesos es irrelevante, en tanto que: La salida de uno no es usada como entrada por el otro No escriben sobre las mismas variables de salida Propiedades de la relación de paralelismo || : Conmutativa: Pi || Pj <=> Pj || Pi NO transitiva: Pi || Pj and Pj || Pk =/> Pi || Pk Asociativa: (Pi || Pj) || Pk => Pi || (Pj || Pk) Por tanto, no es una relación de equivalencia.

CONDICIONES DE BERNSTEIN: Ejemplo Detectar que instrucciones del siguiente código pueden ejecutarse concurrentemente Instrucción 1 x:=y+1 Instrucción 2 y:=x-2 Instrucción 3 z=a+b-7

CONDICIONES DE BERNSTEIN: Ejemplo Detectar que instrucciones del siguiente código pueden ejecutarse concurrentemente Lo primero es establecer qué variables se acceden en modo lectura. En las instrucciones vemos que son: Para la instrucción 1 es la variable "y”. Para la instrucción 2 es la variable "x”. Para la instrucción 3 son las variables "a", "b”. También necesitaremos saber qué variables se acceden en modo escritura. Son las siguientes:  Para la instrucción 1 es la variable "x”. Para la instrucción 2 es la variable "y”. Para la instrucción 3 es la variable "z". I1 x:=y+1 I2 y:=x-2 I3 z=a+b-7

CONDICIONES DE BERNSTEIN: Ejemplo Ahora aplicamos las tres condiciones: Condición 1: La intersección entre las variables de lectura de un conjunto de instrucciones C1 y las variables de escritura de un conjunto C2 debe ser vacía. Instrucciones 1 y 2  No cumple la condición Instrucciones 1 y 3  Cumple la condición Instrucciones 2 y 3  Cumple la condiciónte Lectura 1 Escritura 2 y Lectura 1 Escritura 3 y z I1 x:=y+1 I2 y:=x-2 I3 z=a+b-7 Lectura 2 Escritura 3 x z

CONDICIONES DE BERNSTEIN: Ejemplo Condición 2: La intersección entre las variables de escritura de un conjunto de instrucciones C1 y las variables de lectura de un conjunto C2 debe ser vacía. Instrucciones 1 y 2  No cumple la condición Instrucciones 1 y 3  Cumple la condición Instrucciones 2 y 3  Cumple la condición Escritura 1 Lectura 2 x Escritura 1 Lectura 3 x a,b I1 x:=y+1 I2 y:=x-2 I3 z=a+b-7 Escritura 2 Lectura 3 y a,b

CONDICIONES DE BERNSTEIN: Ejemplo Condición 3: La intersección entre las variables de escritura de un conjunto de instrucciones C1 y las variables de escritura de un conjunto C2 debe ser vacía. Instrucciones 1 y 2  Cumple la condición Instrucciones 1 y 3  Cumple la condición Instrucciones 2 y 3  Cumple la condición Escritura 1 Escritura 2 x y Escritura 1 Escritura 3 x z I1 x:=y+1 I2 y:=x-2 I3 z=a+b-7 Escritura 2 Escritura 3 y z

CONDICIONES DE BERNSTEIN: Ejemplo Ahora podemos saber qué instrucciones pueden ejecutarse concurrentemente Par de instrucciones Condición 1 Condición 2 Condición 3 ¿Pueden ejecutarse concurrentemente? 1 y 2 No Si 1 y 3 2 y 3 I1 x:=y+1 I2 y:=x-2 I3 z=a+b-7

CONDICIONES DE BERNSTEIN Observar que la condición Ii ∩ Ij != 0 no impide el paralelismo. Si tenemos n procesos, la violación de alguna de las condiciones impide total o parcialmente la ejecución en paralelo de P1…Pn 3*n*(n-1)/2 Qué ocurre con las otras dependencias? Cualquier instrucción que dependa de condiciones de tiempo de ejecución no puede ponerse en forma paralela (subscripts, tests, Branches cond. …). Los ficheros pueden tratarse e introducirse en los conjuntos de entrada I y salida O.

CONDICIONES DE BERNSTEIN Ejemplo: Detectar el paralelismo del siguiente código. Suponiendo que cada instrucción requiere 1 paso (no pipeline). Suponiendo que tenemos dos sumadores disponibles (pipeline). P1: C = D*E P2: M = G+C P3: A = B+C P4: C = L+M P5: F = G/E

CONDICIONES DE BERNSTEIN Imagen de Kwang, 1993

CONDICIONES DE BERNSTEIN Imagenes de Kwang, 1993

CONDICIONES DE BERNSTEIN Generalización: Las condiciones de Bernstein a nivel de instrucción pueden extenderse a niveles superiores, como segmentos de código, subrutinas, procesos, programas. Las dependencias a niveles altos se infieren de las dependencias a niveles inferiores.

REFERENCIAS [Hwan, 1993] K. HWANG. Advanced Computer Architecture. Mc Graw-Hill, 1993.