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, Pipeline, Síncrona, Equilibrado de carga y Terminación 4Programación basada en memoria común 5Algoritmos y aplicaciones Ordenación, … 5 4 2, 3, 2 2, 2 5 4
proParTemarioCompulsiva-2 3Paralelismo compulsivo 1Computación paralela ideal 2Transformación geométrica de imágenes 3Fractales: El conjunto de Mandelbrot 4Los métodos de Monte Carlo
proParComputación paralela idealCompulsiva-3 entrada salida Independencia total Equilibrio de carga perfecto e1e2eN maestro Quasi ideal Maestro reparte trabajos y recolecta resultados Los esclavos no se comunican entre sí Poca comunicación frente a cómputo
proParTransformación geométrica de imágenesCompulsiva-4 Digital: RamVideo | mapaPixels 512 dibujarPixel(f,c,color) Construir o manipular Muchos formatos: jpg, giff, tiff, bmp,... jasper ppm y pgm Color: RGB Tonalidad Grises
proParTransformación geométrica de imágenesCompulsiva-5 Girar: x’ = x cos + y sen y’ = y cos - x sen Desplazar, Escalar, *768 = N M N M Igual para todo pixel ¿Un P * pixel? ¡ No tan fácil !
proParTransformación geométrica de imágenesCompulsiva-6 Girar no es tan fácil 30º 512x512
proParTransformación geométrica de imágenesCompulsiva-7 Girar no es tan fácil 30º + filtro ¡ En 40 mseg !
proParTransformación geométrica de imágenesCompulsiva-8 Girar no es tan fácil [30º + filtro] 12 veces
proParTransformación geométrica de imágenesCompulsiva-9 Girar no es tan fácil [1º + filtro] 360 veces ¿Qué pasa?
proParTransformación geométrica de imágenesCompulsiva-10 Girar no es tan fácil [1º + filtro] 360 veces Giros incrementales [1, 2, ….] desde el original => 9,311 seg
proParTransformación geométrica de imágenesCompulsiva-11 Un filtrado es más facil
proParTransformación geométrica de imágenesCompulsiva-12 Sea imagen de 1024*768 ( ) y 16 P => pixels * P ¿ Cómo repartir el trabajo ? filas columnas rectángulos ¿Cómo sería con modelo cluster?¿Eficiencia? Se adapta más al modelo de multiprocesadores: (memoria común)
proParFractales: El conjunto de MandelbrotCompulsiva Fila Columna 512 colores [3+3+3] 1 … ……….. 3 ………………….… 2 ……… …………… … ……………………………….… ………... 3 …………………... 2……….. mandelsec.txt 1 int colores[256][256] Z k+1 = Z k 2 + Cj 2 dibujarPixel (f, c, colores[f][c])
Condición de divergencia proParFractales: El conjunto de MandelbrotCompulsiva-14 Representaciones gráficas contenidas en una fórmula Conjunto de Mandelbrot {M} Z k+1 = Z k 2 + Cj Z 0 = 0 K = 0.. m / |Zm| > 2 Cj {M} ? K = 0..N => # Colores a utilizar Real -2 Imaginario Cj = a + b i b a Cj {M} diverge Zm => Color(m) Cj {M} no diverge => Negro
proParFractales: El conjunto de MandelbrotCompulsiva-15 ¿Programa secuencial? Sea mapaPixel 256*256 y 512 colores for (f=0; f<256; f++) for (c=0; c<256; c++) { pixelAPunto(f,c,&b,&a); color = mandelbrot(a,b); dibujarPixel(f,c,color); } Real -2 Imaginario 2550 Columnas Filas
proParFractales: El conjunto de MandelbrotCompulsiva-16 #define MAX_ITER = 256 int mandelbrot (double A, double B) { double X = 0.0, Y = 0.0; double XX, YY, distancia; int i = 0; do { XX = X; YY = Y; X = ((XX*XX) - (YY*YY)) + A; Y = (2.0 * (XX*YY)) + B; i++; distancia = X*X + Y*Y; } while ((i < MAX_ITER) && (distancia <= 4.0)); if (i == MAX_ITER) return 0; else return i; }
proParFractales: El conjunto de MandelbrotCompulsiva-17 ¿ Paralelización ? 2550 Columnas Filas e1e2eN maestro a.Asignación estática de trabajos filas, columnas, cuadrantes ¡ Ineficiente ! e1 maestro e1 e4 e7 e4 1*2*3* ** O(7.763)O( ) O( ) ¿Necesario? ?
proParFractales: El conjunto de MandelbrotCompulsiva-18 b.Asignación dinámica de trabajos Granja de procesadores {Trabajos pendientes}* ¿pixels, filas, cols,....? Fila Columna maestro e1 e2 e3 e O( --- )
proParLos métodos de Monte CarloCompulsiva-19 Idea: Uso de números aleatorios – Casino de Monte Carlo Orígenes: 1944 – Stan Ulaw y VonNewmann – Bomba atómica Aplicaciones: Diseño de reactores nucleares Cromo dinámica cuántica Radioterapia contra el cáncer Densidad y flujo de tráfico Evolución estelar Econometría Pronóstico del índice de la bolsa Prospecciones en explotaciones petrolíferas Diseño de VLSI Física de materiales Ecología Criptografía Valoración de cartera de valores Programas de ordenador Métodos cuantitativos de organización industrial Simular aleatoriedad de los procesos físicos, térmicos, …
proParLos métodos de Monte CarloCompulsiva-20 Se basan en la utilización de números aleatorios: Ejemplo1 => Círculo de radio 1 inscrito en cuadrado de lado Área del círculo = Área del cuadrado = 4 ¿ / 4 ? enCirculo = 0; for (i=0; i<M; i++) { x = aleatorio(0.0, 1.0); y = aleatorio(0.0, 1.0); if ((x*x + y*y)<=1.0) enCirculo++; } PI = (4.0 * enCirculo) / (double) M); ¿M? Suficientemente grande
proParLos métodos de Monte CarloCompulsiva-21 ¿ Paralelización ? e1e2eN maestro Cada esclavo computa: M/N puntos aleatorios ¡ Todos los esclavos calculan lo mismo ! Generador de aleatorios Pensar en mecanismos más eficientes
proParLos métodos de Monte CarloCompulsiva-22 Generación secuencial de números aleatorios: X i+1 = (aX i + c) mod m a = m = c = 0 Generación paralela de números aleatorios: (sean 4 procesos) X i = (X i-63 Θ X i-127 ) mod 2 31 P0P0 P1P1 P2P2 P3P3 X0X0 X1X1 X2X2 X3X3 X4X4 X5X5 X6X6 X7X7 X i+4 = (AX i + C) mod m A = a 4 C = c(a 3 +a 2 +a 1 +a 0 ) mod m
proParLos métodos de Monte CarloCompulsiva-23 Otra forma de calcular mediante una integral (Sumatorio) 1 1 y=F(x) Área del semicírculo = /4 F(x r ) (1 - 0) 1N1N r=1 N Xr => Números aleatorios [0..1] 1 x 0 1-x 2 dx 1 y
proParLos métodos de Monte CarloCompulsiva-24 Otra forma de calcular mediante una integral (Sumatorio) FIN Fx = 0.0; for (i=1; i<M; i++) { x = (double) random() / (double) RAND_MAX; fx = sqrt (1.0 – x*x); Fx + = fx; } PI = (Fx / (double) M) * 4.0; M Error MonedaError Integral 0, , , , , , , , , ,000029