proPar Curso 18/19 5 4 2, 3, 2 2, 4 3 Computadores Paralelos

Slides:



Advertisements
Presentaciones similares
1.5 Algoritmos, Pseudocódigo y Diagramas de Flujo
Advertisements

INFORMATICA I Funciones CLASE 13.
ProParCurso 13/14 1Computadores Paralelos 2Programación basada en paso de mensajes 3Técnicas básicas de programación paralela Compulsiva, Divide y Vencerás,
proPar Curso 13/14 4 2, 3, 2 2, 2 5 Computadores Paralelos
Programación Paralela Esquemas de Programación Paralela 1 PROGRAMACIÓN PARALELA Esquemas de programación paralela REFERENCIAS Wilkinson, Allen Gibbons,
ProParCurso 14/15 1Computadores Paralelos 2Programación basada en paso de mensajes 3Técnicas básicas de programación paralela Compulsiva, Divide y Vencerás,
FUNCIONES Conceptos básicos. Retorno de una función Clases de funciones. Paso de parámetros. Funciones y arrays.
1 Otros algoritmos de ordenación. 2 Método de ordenación por inserción Se divide la tabla en dos subtablas: - la subtabla de la izquierda está ordenada.
CONSTANTES DENTRO DE UN CÁLCULO O EN LOS PASOS PARA SOLUCIONAR UN PROBLEMA, EXISTIRÁN VALORES QUE NUNCA VAN A CAMBIAR Y SE LOS CONOCE COMO CONSTANTES.
PARCIAL 2. LENGUAJE DE PROGRAMACIÓN UN LENGUAJE SE PUEDE DEFINIR COMO UN CONJUNTO DE PALABRAS Y FORMAS DE EXPRESIÓN POR MEDIO DE LAS CUALES SE COMUNICAN.
Tratamientos secuenciales I Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Unidad Didáctica 8 Versión
Funciones y paso de parámetros Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión Unidad Didáctica 24.
PROGRAMACIÓN I CENTRO DE ESTUDIOS INTEGRADOS EL MARISCAL - CEIM Ing. Luisa Fernanda Arenas Castañeda Feb 6 de 2016.
2015-BM5A. ¿Qué estructuras de Programación conocemos? Condicional: If … { } … Else …{ } Condicional por Casos: Switch (opcion) { } Repetitiva exacta:
1 Ordenación, Clasificación Introducción Algoritmos Complejidad.
Curso RRHH 09A Frente RRHH
Ingeniero en Computación José Alfredo Cobián Campos
Introducción a la Programación Multimedial
¿Cómo almacenar datos dentro del computador?
Estructuras de Control.
Introducción a la Programación Multimedial
Árboles binarios. Algoritmos básicos
ROBERTO PINEDA FLORES. ALEXIS JULIAN VELAZQUEZ NAVA.
Olimpiadas Chilenas de Informática - Formación
RESUMEN DE LAS ECUACIONES DE OBSERVACIÓN TOPOGRÁFICAS
Olimpiadas Chilenas de Informática - Formación
Estructuras PILA - COLA - LISTA.
Matemáticas Nivel Superior
PARTE II: ALGORÍTMICA Tema 5. Programación dinámica.
Conceptos básicos de programación
Métodos en Java.
Introducción a los algoritmos
Arreglos. en Lenguaje C n
Introducción al análisis espacial en los SIG mayo de 2009
Tema 3. Fundamentos para la construcción de código a partir del algoritmo Objetivo: El alumno construirá programas utilizando el lenguaje de programación.
TALLER Nº2: Modelo de Distribución de Viajes
Tema 6. Conceptos básicos de programación Clase 1
Programación I MC Beatriz Beltrán Martínez
Tele clase 5 Sistemas de ecuaciones lineales.
Universidad de las Ciencias Informáticas
METODO DE TRANSPORTE APROXIMACION DE VOGEL
Fundamentos de programación
Funciones Fundamentos de Programación II
Estructuras de control en PHP
Tele clase 14 Optimización multidimensional.
Hardware Description Language
Aplicaciones de RECURSIVIDAD
Estructuras de control Resolución de problemas y algoritmos
Fundamentos de programación
Introducción Tipos de Modelos Un Modelo es
Aproximaciones lineales del diodo rectificador
FUDAMENTOS BÀSICOS computación
Tema 9. Estructuras de repetición. Clase 2
CURSO PROGRAMACIÓN BÁSICA SEMANA 2
¿Cómo son nuestros clusters?
Introducción a los algoritmos
Fundamentos de Informática Especialidad de Electrónica –
proPar Curso 18/ , 3, 2 2, 2 4 Computadores Paralelos
Programa de Prácticas Entorno Las prácticas Planificación
Estructuras de Datos Aun en problemas muy simples surge la necesidad de agrupar valores elementales de alguna manera. Cuando representamos una caja de.
Procesamiento Paralelo Curso 18/19
Procesamiento Paralelo Curso 17/18
proPar Multicomputadores comParalelos-57
proPar Curso 18/ , 3, 2 2, 4 3 Computadores Paralelos
proPar Curso 18/ , 3, 2 2, 2 4 Computadores Paralelos
Diego Hernández R Algoritmos Diego Hernández R
Nelson Baloian, José A. Pino
Tratamientos secuenciales I
Casos de estudio Estudiaremos tres problemas
VARIABLE Y TIPO DE DATOS. ¡Que Es Variable? Un lugar para almacenar información en un espacio de memoria de la computadora.
Transcripción de la presentación:

proPar Curso 18/19 5 4 2, 3, 2 2, 4 3 Computadores Paralelos Programación basada en paso de mensajes Técnicas básicas de programación paralela Compulsiva, Divide y Vencerás, Pipeline, Síncrona, Equilibrado de carga y Terminación Programación basada en memoria común Algoritmos y aplicaciones Ordenación, …

proPar Temario pipeline-2 Técnica de pipeline Plataforma para aplicaciones tipo pipeline Suma de números Ordenación de números Generación de números primos Resolución de sistemas de ecuaciones lineales

proPar Técnica de pipeline pipeline-3 1776 Adam Smith “La riqueza de las naciones” => Alfileres Fábrica ejemplo: 18 tareas 10 obreros 48.000 alfDía 4.800 AlfObrero ¿Artesano sólo y una a una? 20AlfDía un reto +Destreza -TiemposMuertos +Máquinas

proPar Técnica de pipeline pipeline-4 [8/10/1913..8/10/2013]: 100 años de coches en serie Fábrica Ford T: 3.000 piezas 84 tareas Se pasó de: 1 coche 12h 1 coche 1,5h www.elmundo.es/elmundomotor/2013/10/08/conductores/1381229685.html 16 coches por minuto 2015

proPar Técnica de pipeline pipeline-5 Idea intuitiva => Cadena de montaje de coches Descomposición funcional Secuencia de datos homogéneos de entrada Peluquería Personas Despeinadas (Di) Lavar => Cortar => Marcar Proceso divisible en subtareas secuenciales (filtros) LCM 1Hora 3 Mill. 10:45 (1) D4,D3,D2 11:00 (2) D5,D4,D3 P1 10:30 (1) D3,D2 10:15 (1) D2 10:00 (1) 10:45 (3) (2) (1) D4 11:00 (4) (3) (2) D5 P1 10:40 (3) (2) (1) 10:00 (1) 10:30 (2) (1) D3 10:15 (1) D2 10:20 (2) (1) L C M 20’ 20’ 20’ 1,5 M 1,5M 1,5M Secuencial => 1P x Hora Vs Pipeline => 1P x 20’ Difícil equilibrar carga (L=C=M) # filtros no muy grande

proPar Técnica de pipeline pipeline-6 Ejemplo1: Filtrado de señal f0 fin fout f1 f3 f2 f(t) Señal filtrada f0 f1 f2 f3 t d1 d0 d2 d3 d2 d1 d3 d4 d5 d6 d1 d0 d2 d1 d0 d0 Hay otras dos formas de utilizar pipeline que veremos con ejemplos

proPar Plataformas para aplicaciones tipo pipeline pipeline-7 PC + ClearSpeed CSX700 [96+96] #9 TOP500 11/06 SAMBA 1993 128 PC + Placa con Transputers Switch

proPar Plataformas para aplicaciones tipo pipeline pipeline-8 pingpong ¿Latencia de Core0 al resto “nseg”? 93 78 72 71 void ping () { int i, dato; volatile canal_t *suCanalPtr; suCanalPtr = dirLocal( &canal, datos.destino); dato = 0; for (i=0; i<datos.numVeces; i++) { enviar (dato, suCanalPtr); dato++; } } 99 100 103 115 121 ¡ MPI => 40.000 nseg !

proPar Suma de números pipeline-9 for (i=1; i<=N; i++) S = S + V[i]; Cada Pi tiene un dato “Vi” del vector ¿Seguro? rec(Pi, &S); env(Pd, S+Vi); P1 P2 P3 Pn V[] Un Maestro tiene el vector P1 P2 P3 Pn V[] ....... V3,V2,V1 maestro V[] rec(Pi, &V); env(Pd, [V1+V2,[V3..Vn]]); ¡ Tantos Pi como números !

proPar Suma de números pipeline-10 Un Maestro tiene el vector y hay pocos procesos “P << N” 4.000.000 4 1.000.000 Cada Pi suma una rodaja de tamaño N / P = q M P1 P2 P3 P4 V[] + rec(Pi, &V); env(Pd, [Suma[V0..Vq],[Vq+1..Vn]]); ¿Mejorable? ¡ Sigo sin hacer trabajar en paralelo a los procesos ! Tengo que sumar K vectores de tamaño N “Muchas instancias del mismo problema” Otro uso pipeline

proPar Suma de números pipeline-11 Pipeline aplicado a muchas instancias del mismo problema M P1 P2 P3 P4 M P1 P2 P3 P4 M P1 P2 P3 P4 M P1 P2 P3 P4 M P1 P2 P3 P4 M P1 P2 P3 P4 ¿Equilibrado?

proPar Suma de números pipeline-12 Pipeline aplicado a muchas instancias del mismo problema ¡ Ojo con la relación cómputo/comunicación ! Procesos 1 2 4 MismoPC 12:271 6:492 4:334 Uno*PC 11:786 17:002 Dos*PC 9:208 Procesos 1 2 4 PC9 12:191 6:281 3:812 8 2:746 cuentaPar: Números dentro de diez rangos de valores V[200.000.000] en 200 subV[1.000.000]

proPar Ordenación de números pipeline-13 3 2 5 1 4 2 3 2 3 5 1 2 3 5 1 2 3 4 5 i for i:=2 to n do x := A[i] insertar (x, A[1..i]) 4 1 5 2 3 Xmin max min maestro P1 P2 Pn 3 ¿Programa paralelo? 2 3 5 2 3 1 2 5 3 4 1 2 3 5

proPar Ordenación de números pipeline-14 Xmin max min maestro P1 P2 Pn /* Ordenación básica */ nProcsDer = n-i; rec (Pi-1, &Xmin); for (j=0; j<nProcsDer; j++) { rec (Pi-1, &X); if (X < Xmin) { env (Pi+1, &Xmin); Xmin = X; } else env (Pi+1, &X); } ¡ Queremos array ordenado en el maestro !

proPar Ordenación de números pipeline-15 Pn Anillo Array lineal bidireccional P1 M P2 P3 Pn OrdenacionBasica; env (Pi-1, &Xmin); for (j=0; j<nProcsDer; j++) { rec (Pi+1, &X); env (Pi-1, &X); } ¿Mejorable? ¿ Pipeline aplicado a muchas instancias del mismo problema ?

proPar Generación de números primos pipeline-16 Calcular los N primeros números primos (sean 10) 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 Criba de Eratóstenes ¿ Programa paralelo ? ¿Con memoria común? rec (Pi-1, &primo); while (masNumeros) { rec (Pi-1, &n); if ((n%primo) != 0) env (Pi+1, &n); } ¿ Cuándo terminar ? ¿ Hace falta seguir ? ¿Pipeline? .......5,4,3,2 P1 M P2 Pn .......9,7,5,3 ...13,11,7,5 2 3 ¿ Con menos núcleos ?

proPar Generación de números primos pipeline-17 Calcular los números primos < N 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 Criba de Eratóstenes i<N mejorable for (i=2; i<N; i++) primo[i] = TRUE; if (primo[i]) for (j=i+i;j<N;j+=i) primo[j] = FALSE; ¿ Programa paralelo ?

proPar Generación de números primos pipeline-18 Primera aproximación 0,N, … ,29,25,23,19,17,13,11,7,5 3 5 7 3 5 7,11,13,17,19,23,29, … ,N,0 7 11 ¿ Código paralelo ? ¡ Interbloqueo ! ¡ Ineficiente !

proPar Generación de números primos pipeline-19 if (yo == 0) { nPrimos = 1; // El 2 for (i=3; i<N; i+=2) env (Pder, &i); env (Pder, &cero); } rec (Pizq, &primo); while (primo != 0) { nPrimos++; // Imprimirlo? rec (Pizq, &num); while (num != 0) { if ((num%primo) != 0) env (Pder, &num); env (Pder, &num); // Cero env (Pder, &primo); // Cero reduce (+, &numPrimos, &totPrimos);

proPar Generación de números primos pipeline-20 Segunda aproximación: Dos fases y tablas de primos generadores FASE 1: Tabla de primos generadores N = 100 => 100 => <10 ¿ Código paralelo ? 0,7,5 3 5 7 0,97, … ,29,25,23,19,17,13,11 FASE 2: Cálculo del resto de primos 3 5 7 7,0 ¿ Interbloqueo ? ¿ Ineficiente ?

proPar Generación de números primos pipeline-21 Tercera aproximación: Tabla de primos generadores conocida primosec [3 .. 5.449]720 29.713.399 … 5.453, 5.451 Números < 5.4512 29.713.393 … 5.477, 5.471 Primos calculados

proPar Generación de números primos pipeline-22 Tercera aproximación: Tabla de primos generadores conocida primosec [3 .. 5.449]720 29.713.399 … 5.453, 5.451 Números < 5.4512 29.713.393 … 5.477, 5.471 Primos calculados siguiente = primosConocidos[numPrimosConocidos-1]+2; cotaSerie = siguiente * siguiente;   while (siguiente < cotaSerie) { if (esPrimo(siguiente)) { printf ("%9i", siguiente); total++; if ((total%10) == 0) printf ("\n"); } siguiente = siguiente + 2; ¡ 16:714 en PC1 ! ¿ Código paralelo ?

? proPar Generación de números primos pipeline-23 Tercera aproximación paralelo: Reparto de la tabla de primos F0 [3..2.437]360 29.713.399 … 5.451 29.713.393 … 5.471 F1 [2.441..5.449]360 0, 29.713.393 … 5.958.451 … 5.479, 5.477, 5.471 ? F0 [...]180 F1 F2 F3 ¿ Código paralelo ?

? proPar Generación de números primos pipeline-24 1 2 4 8 16 16:714 recibir (miIzquierda, &unNumero); while (unNumero != 0) { if (noDivisible(unNumero)) { if (soyElUltimo) { printf ("%9i", siguiente); total++; if ((total%10) == 0) printf ("\n"); } else enviar (miDerecha, &unNumero); } Procesos 1 2 4 8 16 primopar1 16:714 PC1  Con 720 primos conocidos Procesos 1 2 4 8 16 primopar2 220:454 Parallella  Con 720 primos An 1,68 0,84 En 2,72 0,68 4,35 0,54 6,84 0,43 18:892 ? 131:604 49:902 69:791 86:679 81:198 50:624 32:237

? proPar Generación de números primos pipeline-25 18:892 49:902 69:791 86:679 Procesos 1 2 4 8 16 primopar1 16:714 PC1  Con 720 primos conocidos ? 131:604 81:198 50:624 32:237 An 1,68 0,84 En 2,72 0,68 4,35 0,54 6,84 0,43 primopar2 220:454 Parallella  Con 720 primos PC1 .. Con 720 primos conocidos ¡ Y buffer para 400 números ! Procesos 1 2 4 8 16 primopar2 16:714 An 1,63 0,81 En 2,59 0,65 3,85 0,48 5,55 0,35 10:257 ¡ En la práctica mejor ! 6:465 4:342 3:010

proPar Resolución de sistemas de ecuaciones lineales pipeline-26 an-1,0x0+an-1,1x1+an-1,2x2+ ..... + an-1,n-1xn-1 = bn-1 . a2,0 x0+a2,1 x1+a2,2 x2 = b2 a1,0 x0+a1,1 x1 = b1 a0,0 x0 = b0 x0 x1 xi-1 b0 X0 = a0,0 b1-a1,0x0 X1 = a1,1 b2-a2,0x0-a2,1x1 X2 = a2,2 i-1 bi-ai,jxj j=0 Xi = ai,i ¿ Programa paralelo ?

proPar Resolución de sistemas de ecuaciones lineales pipeline-27 bi-ai,jxj j=0 Xi = ai,i x0 x1 xi-1 suma = 0; for (j=0; j<i; j++) { rec (Pi-1, &x[j]); env (Pi+1, &x[j]); suma+=a[i][j]*x[j]; } x[i]=(b[i]-suma)/a[i][i]; env (Pi+1, &x[i]); Pi P0 P1 P2 P3 P4 P5 FIN “Paso al siguiente antes de terminar anterior” Otro uso pipeline