Algoritmos Paralelos (Parallel Algorithms) DR. JESÚS A. GONZÁLEZ BERNAL CIENCIAS COMPUTACIONALES INAOE Introducción 2 y Objetivo { Mejorar el tiempo de ejecución { Distribuir el procesamiento en varios procesadores y Consideraciones { Cómo accesar y controlar los procesadores Instrucciones (sencillas o múltiples) Ù Memoria local Ù { Acceso a memoria global Utilizada para sincronización Ù Conflictos por acceso a memoria Ù Algunas Máquinas 3 y y y y y y Sequent (8 procesadores, múltiples instrucciones, memoria compartida) Hypercube (8 procesadores, memoria distribuída, topología de hipercubo) CM2 (64,000 procesadores, instrucción sencilla) CM5 (32,000 procesadores, instrucción sencilla para cada uno de 8000 procesadores) Intel Paragon (1,028 procesadores, topología de malla 2D) nCUBE (128 procesadores, memoria distribuída MIMD, topología de hipercubo) Modelos 4 y RAM { Random Access Machine y PRAM { Parallel Random Access Machine Modelo PRAM 5 y P procesadores seriales: P0, P1, P2, …, Pp-1 y Utilizan memoria global compartida { { Todos los procesadores leen o escriben a la memoria global en paralelo Asume acceso unitario a memoria (todo acceso a memoria ocupa una unidad) y Los procesadores pueden también ejecutar operaciones en paralelo y Tiempo de ejecución se mide como número de accesos a memoria en paralelo que un algoritmo hace y El tiempo de acceso a memoria crece al aumentar el número de procesos en la computadora paralela { Generalmente accesos a memoria a través de una Red (acceso muy lento) y Cada procesador ejecuta la misma instrucción al mismo tiempo Modelo PRAM 6 p0 p1 p2 pp-1 Shared memory Accesos a Memoria 7 y Concurrent Read (CR) { y Concurrent Write (CW) { y Los más utilizados EREW { y Son todos modelos PRAM EREW, CRCW { y No hay dos procesadores que escriban a la misma ubicación de memoria al mismo tiempo EREW, CREW, ERCW, CRCW { y No hay dos procesadores que lean de la misma ubicación de memoria al mismo tiempo Exclusive Write (EW) { y Procesadores múltiples escriben a la misma ubicación de memoria al mismo tiempo Exclusive Read (ER) { y Procesadores múltiples leen de una misma ubicación de memoria al mismo tiempo Fácil de implementar (restricciones a mantener por el programador) En el modelo CRCW { Necesario determinar que hacer cuando dos o más procesadores escriben en le misma ubicación Ù Ù Ù Ù Arbitrario – seleccionar el valor a escribir arbitrariamente Prioridad – escribir el valor del procesador con el índice más bajo Combinado – escribir alguna combinación de valores (suma, máximo) Común – los procesadores deben (todos) escribir el mismo valor Sincronización y Control 8 y Los procesadores ejecutan las mismas instrucciones al mismo tiempo y En el modelo PRAM asumimos que los procesadores están sincronizados y Las condiciones de paro dependen del estado de todos los procesadores y Los procesadores se encuentran interconectados de alguna manera y Tiempo de propagación { Uso de la red para sincronizar a los procesadores y CRCW PRAM puede utilizar escrituras concurrentes para determinar condiciones de terminación Saltos con Apuntadores (pointer jumping) 9 y Algoritmo para calcular la distancia al final de la lista para cada objeto en una lista de n-objetos en un tiempo de O(lg n) y Algoritmo para calcular prefijo paralelo en una lista de n-objetos en tiempo de O(lg n) y Algoritmo para convertir problemas de árboles en problemas de listas que se pueden resolver por “pointer-jumping” y Estos algoritmos son EREW Ranqueo de Listas (List Ranking) 10 y Para cada objeto en la lista hay que calcular la distancia al final de la lista ⎧0 d (i ) = ⎨ ⎩d (next (i )) + 1 si next(i) = NIL si next(i) ≠ NIL Algoritmo serial: Θ(n) y Algoritmo paralelo: O(lg n) y Cómo trabaja: y Repeat y Pointer jump y Add number of objects jumped to current distance y Until all next(i) = NIL y Ganancia en velocidad (Speedup): y S = T(mejor algoritmo serial) / T(algoritmo paralelo) y S= O ( n) O(lg n) Algoritmo 11 List-Rank(L) Foreach processor i, in parallel if next(i) = NILL then d(i) = 0 else d(i) = 1 While next(i) != NIL for some i foreach processor i, in parallel if next(i) != NIL then d(i) = d(i) + d(next(i)) next(i) = next(next(i)) 3 1 3 2 3 4 3 5 / 4 1 6 1 4 2 6 2 4 4 6 3 / 4 4 / 6 3 / ;O(1) ; test ; O(1) ;synchronize 1 0 1 5 0 / 1 0 1 / 5 0 / 1 0 1 / 5 0 / 0 1 / 5 0 / 1 2 2 / 1 2 / Algoritmo 12 y El algoritmo List-Rank parte a la mitad las longitudes de las listas en cada paso, entonces pasa O(lg n) veces por el ciclo while y El algoritmo tiene un tiempo de Θ(lg n) Cálculos con Prefijos 13 y Se pueden utilizar saltos de apuntadores para realizar cálculos con prefijos y Algoritmo EREW para problema de prefijos corre en O(lg n) en una lista con n objetos y Cálculo prefijo { Dado un operador binario y asociativo ⊗ y una entrada x1 … xn, calculamos una secuencia y1… yn tal que: Ù Ù Ù { y1 = x1 yk = yk-1 ⊗ xk = x1 ⊗ x2 ⊗ … ⊗ xk Cada yk se obtiene multiplicando los primeros k elementos de la secuencia de xk Ù Ù De ahí viene el término de “prefijo” Podemos utilizar saltos de apuntadores para cambiar [i,i] por [1,i] Algoritmo List-Prefix(L) 14 LIST-PREFIX(L) for each processor i, in parallel do y[i] <-- x[i] ;; [i,i] while there exists an object i such that next[i] ≠ NIL do for each processor i, in parallel do if next[i] ≠ NIL ;; [i,j] ⊗ [j+1,k] --> [i,k] then y[next[i]] <-- y[i] ⊗ y[next[i]] next[i] <-- next[next[i]] ;; pointer jump Ejemplo List-Prefix(L) 15 y Valor de y inicializado a [k, k] y b-d, valores de y y next antes de la prueba de la línea 3 y d, el resultado final, el valor de y para el k-ésimo objeto es [1,k] para todo k [1,1] [2,2] [3,3] [4,4] [5,5] [1,1] [1,2] [2,3] [3,4] [4,5] [1,1] [1,2] [1,3] / [1,4] / [1,3] / [1,4] / [1,1] / [1,2] / [6,6] / / [5,6] / [2,5] / [3,6] / [1,5] / [1,6] / Análisis de List-Prefix(L) 16 y Igual que el de List Rank y Serial { Θ(n) y PRAM { O(lg n) y Ganancia en velocidad (speedup) { S = n/lg n y Eficiencia { E = 1 / lg n y Trabajo { W = Θ(nlg n) Programación en Paralelo 17 y Tipos de paralelismo { { { { Nivel bit Nivel instrucción Nivel de datos Nivel tareas y Comunicación entre procesadores { { { Sincronización entre subtareas Memoria Paso de mensajes y Software { Sistemas Operativos Distribuidos Ù { { Linda, Corba PVM (ya no tan utilizado), MPI Threads y Reto: Paralelización Automática Aplicaciones de la Programación en Paralelo 18 y Aprendizaje Automático y Minería de Datos { Análisis de información y Algoritmos de visión por computadora { Muchos programados en FPGA’s (Field Programmable Gate Array) y Simulaciones de Monte Carlo y Programación Dinámica y Algoritmos para grafos (recorrido de grafos) Presentaciones (cuenta 8%) 19 y Temas (11 equipos) { Cap. 5 – Probabilistic Analysis and Randomized Algorithms (11 Nov) Ù { Cap. 9 – Medians and Order Statistics (11 Nov) Ù { Javier Cabanillas, Gerardo Arellano Cap. 33 - Computational Geometry (25 Nov) Ù { Pavel Herrera, Omar Chávez Cap. 32 - String Matching (25 Nov) Ù { Aradí Rosales, Lázaro Bustio Cap. 31 - Number-Theoretic Algorithms (20 Nov) Ù { Laritza Hernández, Alejandro Mesa Cap. 30 - Polynomials and the FFT (20 Nov) Ù { Augusto Melendez, Antonia Ruíz Cap. 29 - Linear Programming (18 Nov) Ù { Victor Hugo Arroyo, Jorge Ocampo Cap. 28 - Matrix Operations (18 Nov) Ù { Dulce García, Rodolfo Luna Cap. 27 - Sorting Networks (13 Nov) Ù { Jorge Morales, Husein López Cap. 17 – Amortized Analysis (13 Nov) Ù { Abraham Bernardo, José Luis Hernández Ana Tenorio, Gabriela Ramírez Cap. 35 - Approximation Algorithms (27 Nov) Ù Saul Solorio, Fernando, Emmanuel Anguiano y Tiempo { 2 por clase Proyecto de Investigación 20 y Elección del artículo { Jueves 6 de Noviembre { 5 minutos para describir su artículo { Determinar si se acepta o no y Entrega de proyecto de investigación { 2 de Diciembre y Examen Final { 2 de Diciembre Proyecto de Investigación 21 y La investigación consiste en buscar y seleccionar un algoritmo (no sistema) de su interés y ya publicado, con las siguientes características: { { { Publicado de 2004 en adelante Debe haber sido reportado en revista o en algún congreso (no se aceptarán borradores (drafts) obtenidos de internet) Incluye un análisis de su desempeño al menos en tiempo, aunque sería deseable que también se reporte en espacio. Proyecto de Investigación 22 y Reporte { A partir del algoritmo seleccionado, se deberá hacer un reporte por escrito de dos cuartillas (a 12 puntos con interlineado de espacio y medio) con las siguientes secciones: Descripción del problema Ù Algoritmos previamente reportados Ù Comentarios acerca del enfoque usado para diseñar el algoritmo (voraz, divide y conquista, programación dinámica, etc.) Ù Descripción del algoritmo Ù Conclusiones del análisis del desempeño del algoritmo Ù Referencia completa Ù Proyecto de Investigación 23 y Observaciones { Se debe anexar una copia del artículo al reporte { Se espera un trabajo de análisis propio en el que se haga uso de los conceptos y técnicas vistos en el curso { Se penalizará mala redacción o errores de dedo, así como plagios (copias/traducciones literales de parte del artículo).