640 likes | 939 Views
Algoritmos paralelos de grafos y búsqueda (pt.1: grafos). Glen Rodríguez Algoritmos paralelos. Agenda. Vista general de las Aplicaciones Definiciones y Representación Árbol recubridor mínimo (Minimum Spanning Tree): Alg. de Prim Ruta más corta (con un solo origen): Dijkstra's Algorithm
E N D
Algoritmos paralelos de grafos y búsqueda (pt.1: grafos) Glen Rodríguez Algoritmos paralelos
Agenda • Vista general de las Aplicaciones • Definiciones y Representación • Árbol recubridor mínimo (Minimum Spanning Tree): Alg. de Prim • Ruta más corta (con un solo origen): Dijkstra's Algorithm • Todas los pares de Rutas más cortas • Clausura transitiva (Transitive Closure) • Componentes conectados
Redes de transporte, rutas más cortas: 15 segs (“naïve”) 10 microsegs Ruteo en transporte terrestre H. Bast et al., “Fast Routing in Road Networks with Transit Nodes”,Science 27, 2007.
Internet y la WWW • La web se puede representar como gráfico dirigido • Web search , web crawl: traversal (recorrido de grafo) • Análisis de links, ranking: Page rank, HITS • Clasificación y clustering (agrupamiento) de documentos • Las topologías de Internet (redes de routers) are se modelan naturalmente como grafos
Cómputo científico Image source: Yifan Hu, “A gallery of large graphs” • Reordernar cols/filas en matr.dispersas • Para reducir/concentrar el “lleno” • Particionar, eigen-vectores • Diagonal pesada para menos pivoting • Estructuras de datos para explotar mejor el patrón disperso • Optimización • Matroides, colorear grafos, spanning trees • Preconditionadores • Factorización incompleta • Particionar dominios • Grafos en multigrid • Independent sets, matchings, etc. • Teoría de soprte • Spanning trees & graph embedding Image source: Tim Davis, UF Sparse Matrix Collection. B. Hendrickson, “Graphs and HPC: Lessons for Future Architectures”,http://www.er.doe.gov/ascr/ascac/Meetings/Oct08/Hendrickson%20ASCAC.pdf
Análisis de grandes cantidades de data Redes sociales:anáisis, incertidumbre Astrofísica: datasets masivos, variaciones en el tiempo Bioinformática: calidad de data, heterogeneidad Abstraer algo como grafo es útil parta analizar data con relaciones/estructura complicada. Fuentes de data: simulaciones de peta-escala, sensores en experimentos, Internet, redes de sensores Desafios: enorme tamaño de data, heterogeneidad, incertidumbre, calidad de la data Image sources: (1) http://physics.nmt.edu/images/astro/hst_starfield.jpg (2,3) www.visualComplexity.com
Estudio de la interacción entre componentes de un sistema biológico Se usan mucho los grafos: Predecir nuevas interacciones: modelado Anotación funcional de nuevas proteínas: matching, clustering Identificar rutas metabólicas: rutas, clustering Identificar nuevos complejos de proteínas: clustering, centralidad Análisis de data y Alg. de grafos en Biología Sistémica Image Source: Giot et al., “A Protein Interaction Map of Drosophila melanogaster”, Science 302, 1722-1736, 2003.
Grafos y las redes sociales • Identificar comunidades: clustering • Publicidad personalizada: centralidad • Difusión de la información: modelado Image Source: Nexus (Facebook application)
[Krebs ’04] Análisis de redes terroristas usando información pública (luego de Torres Gemelas). Determinar líderes de los patrones de interacción: centralidad Vista globla de las entidades arroja más luces Detectar actividades anormales isomorfismo de subgrafos exacto o aproximado Análisis de redes para Inteligencia y Vigilancia Image Source: http://www.orgnet.com/hijackers.html Image Source: T. Coffman, S. Greenblatt, S. Marcus, Graph-based technologies for intelligence analysis, CACM, 47 (3, March 2004): pp 45-47
Algoritmos de Grafos Áreas de Aplicación Métodos/ Problemas Arquitecturas GPUs FPGAs Servidores x86 multicore Arquitecturas Multihilos másicas Cluster de Multicore Clouds Traversal Shortest Paths Connectivity Max Flow … … … Análisis de Redes Sociales WWW Biología Computacionañ Computación Científica Ingeniería Halla entidades centrales Detección de comunidades Dinámicas de redes Data size Marketing Búsqueda social Regulación de Genes Rutas metabólicas Genómica Problem Complexity Particionar grafos Matching Coloreado CAD para VLSI Planear rutas
Esquema general de computar grafos Factors that influence choice of algorithm Input data Graph kernel • graph sparsity (m/n ratio) • static/dynamic nature • weighted/unweighted, weight distribution • vertex degree distribution • directed/undirected • simple/multi/hyper graph • problem size • granularity of computation at nodes/edges • domain-specific characteristics • traversal • shortest path algorithms • flow algorithms • spanning tree algorithms • topological sort • ….. Problem: Find *** • paths • clusters • partitions • matchings • patterns • orderings Graph problems are often recast as sparse linear algebra (e.g., partitioning) or linear programming (e.g., matching) computations
Definiciones y Representación • Un grafo no dirigido G es un par (V,E), donde V es un cjto. finito de puntos llamados vértices y E es un cjto. finito de aristas o arcos. • Una arista e ∈ E es un par no ordenado (u,v), u,v ∈ V. • En un grafo dirigido, e es un par ordenado (u,v). Una arista (u,v) es incidente del vérticeu y es incidente av. • Una ruta del vértice v al u es una secuencia <v0,v1,v2,…,vk> de vertices donde v0 = v, vk = u, y (vi, vi+1) ∈ E para i = 0, 1,…, k-1. • La longitud de la ruta está definida por el número de aristas en la ruta.
Definiciones y Representación a) Grafo no dirigido (b) Grafo dirigido
Definiciones y Representación • Un grafo no dirigido está conectado si cada par de vértices está conectado por una ruta. • Un bosque es un grafo acíclico, y un árbol es un grafo conectado acíclico. • Un grafo que tiene pesos asociados con cada arista es un grafo ponderado.
Definiciones y Representación • Un grafo se puede representar por una matriz de adyacencia o una lista de aristas (o vértices). • Las matrices de adyacencia tienen un valor ai,j = 1 si los nodos i , j comparten una arista; 0 en caso contrario. En un grafo ponderado, ai,j = wi,j, el peso de la arista. • La lista de adyacencia para un grafo G = (V,E) consiste de un array Adj[1..|V|] de listas. Cada lista Adj[v] es una lista de todos los vértices adyac. a v. • Para un grafo de n nodos, la matriz de adyacencia ocupa espacio de Θ(n2) y la lista ocupa Θ(|E|).
Definiciones y Representación Grafo no dirigido y su matriz de adyacencia Grafo no dirigido y su lista de adyacencia
Minimum Spanning Tree • Un spanning tree de un grafo no dirigido G es un subgrafo de G que es un árbol que contiene todos los vértices de G. • Un un grafo ponderado, el peso de un subgrafo es la suma de los pesos de las aristas del subgrafo. • Un minimum spanning tree (MST) sería el spanning tree con peso mínimo.
Minimum Spanning Tree Un grafo no dirigido y su minimum spanning tree.
Minimum Spanning Tree: Algoritmo de Prim • Es un algoritmo goloso (greedy). • Empieza escogiendo un vértice arbitrario, y lo incluye en el actual MST. • Hace crecer al actual MST incorporando en él al vértice más cercano a uno de los vértices del actual MST.
Minimum Spanning Tree: Algoritmo de Prim Versión secuencial (no paralela)
Algoritmo de Prim paralelo • El “while”– es difícil ejecutarlos en paralelo. • El “for” interno es más fácil de paralelizar. Sea p el número de procs., y n el número de vértices. • La matriz de adyacencia se particiona en bloques 1-D, con el vector de distancia d particionado así también. • En cada paso, el proc. escoge el nodo más cerca localmente, luego se hace una reducción global para escoger el nodo más cercano global. • Se inserta ese nodo al MST, y se hace el broadcast respectivo a todos los procs. • Cada proc. actualiza su parte del vector d localmente.
Algoritmo de Prim paralelo La partición del vector de distancia d y la matriz de adyacencia A entre p procs.
Algoritmo de Prim paralelo • El costo de seleccionar el nodo más cercano es O(n/p + log p). • El costo del broadcast es O(log p). • El costo de actualización local del vector d es O(n/p). • El tiempo paralelo por iteración es O(n/p + log p). • El tiempo total paralelo es O(n2/p + n log p). • La isoeficiencia es O(p2log2p).
Ruta más corta – un solo origen • En un grafo ponderado G = (V,E,w), el problema de la ruta más corta con un solo origen es encontrar las rutas más cortas de un vértice v ∈ V a los demás vértices en V. • El algoritmo de Dijkstra es parecido al de Prim. Mantiene un conjunto de nodos de los cuáles se sabe sus rutas más cortas. • Este conjunto crece basado en el nodo más cercano al origen usando uno de los nodos en el actual conjunto de ruta más corta.
Algoritmo de Dijkstra Algoritmo de Dijkstra, secuencial
Algoritmo de Dijkstra paralelo • Similar a Prim paralelo para MST. • La matriz de adyacencia ponderada se particiona usando bloques 1-D. • Cada proceso escoge, localmente, el nodo más cercano al origen, seguido por una reducción global para escoger el siguiente nodo. • Se hace broadcast de ese nodo y del vector l actualizado a todos los procesadores • Performance paralela es idéntica al Prim paralelo
Rutas más cortas - todos los pares • Dado un grafo ponderado G(V,E,w), el problema de todos los pares de rutas más cortas es encontrar las rutas más cortas entre todos los pares de vértices vi, vj∈ V. • Hay varios algoritmos que resuelven este problema.
Rutas más cortas - todos los pares:Algoritmo basado en MatMult • Considere la multiplicación de la matriz de adyacencia ponderada consigo misma – pero reemplaze las multiplicaciones de números x*y por sumas x+y, y las sumas x+y por min(x,y). • El “producto” de la matriz de adyacencia ponderada consigo misma = una matriz que contiene las rutas más cortas de longitud 2 entre cualquier par de nodos. • Luego, “ An ” contiene todas las rutas más cortas.
Algoritmo basado en MatMult • “An” es calculado doblando las potencias: A, A2, A4, A8, … • Se necesita log n MatMults, cada una se tarda O(n3). • Complejidad serial: O(n3log n). • Hay mejores algoritmos, con complejidad O(n3).
Algoritmo basado en MatMult, en paralelo • Cada una de las log n MatMults se pueden hacer en paralelo. • Se pueden usar n3/log n procs para computar cada producto matriz-matriz en tiempo log n. • Tiempo total: O(log2n).
Dijkstra para todos los pares • Ejecutar n instancias de Dijkstra para 1 solo origen, uno para cada uno de los n vértices como origen. • Complejidad es O(n3).
Dijkstra para todos los pares, en paralelo • Hay dos estrategias para paralelizar – ejecutar cada uno de los n problemas de ruta más corta con un solo origen en un diferente procs. (partición de los orígenes), o usar la versión paralela de la ruta más corta con un solo origen (paralelizar cada origen).
Partición de los orígenes • Use n procs, cada proc Pi calcula las rutas más cortas desde el vértice vi a los demás vertices con Dijkstra secuencial. • No hay comunicación entre procesadores (suponiendo que la matriz de adyacencia esta replicada en todos los procs). • Tiempo paralelo: Θ(n2). • Es de costo óptimo, pero solo puede usarse n procs. La isoeficiencia es p3.
Paralelizar cada origen • Cada ruta más corta de un solo origen es hecha en paralelo. Se pueden usar hasta n2procs. si combino con método anterior. • Dados p procs (p > n), cada problema individual es ejecutado por p/n procs. • Tomaría un tiempo de: • Costo óptimo p = O(n2/log n) , isoeficiencia es Θ((p log p)1.5)
Algoritmo de Floyd • Para cada par de vértices vi, vj∈ V, considere todas las rutas de vi a vj cuyos vértices intermedios pertenecen a {v1,v2,…,vk}. Sea pi(,kj) (de peso di(,kj) ) la ruta más corta de entre ellas. • Si vk está en la ruta más corta de vi a vj, entonces pi(,kj) es la misma que pi(,kj-1) • Si vk está en pi(,kj), entonces podemos partir a pi(,kj) en 2 rutas – una de vi a vk y otra de vk a vj . Cada una de estas rutas usan vértices de {v1,v2,…,vk-1}.
Algoritmo de Floyd La siguiente relación de recurrencia se observa: Esta ecuación debe ser computada por cada par de nodos y para k = 1,…, n. Complejidad serial es de O(n3).
Algoritmo de Floyd Computa todas las rutas más cortas entre todos los pares de vértices del grafo G = (V,E) con matriz de adyacencia A.
Algoritmo de Floyd en paralelo con Bloques 2-D • Matriz D(k) se divide en p bloques de tamaño (n / √p) x (n / √p). • Cada proc. actualiza su parte de la matriz durante cada iteración. • Para computar dl(,kk-1) el proc Pi,j debe obtener dl(,kk-1) and dk(,kr-1). • En general, durante la iteración kesima, cada uno de los √p procs conteniendo parte de la fila kesima la envía a los √p - 1 procs de la misma columna. • De la misma forma, cada uno de los √p procs que contienen parte de la kesima columna la envían a los √p - 1 procs de la misma fila.
Algoritmo de Floyd en paralelo con Bloques 2-D (a) Matriz D(k) distribuida en bloques 2-D mapeados así: √p x √p subbloques, (b) el subbloque de D(k) asignado al proc Pi,j
Algoritmo de Floyd en paralelo con Bloques 2-D (a) Patrones de comunicación en mapeo en bloques 2-D. Al computar di(,kj), info debe mandarse a los procs subrayados desde otros 2 procs en la misma fila y columna. (b) La fila y columna de √p procs que contiene la kesima fila y columna las envía junto con columnas y filas.
Algoritmo de Floyd en paralelo con Bloques 2-D Floyd en paralelo usando blqoues 2-D. P*,j son todos los procs en la jesima columna, y Pi,* son todos los procs en la fila iesima. La matriz D(0) es la matrix de adyacencia
Algoritmo de Floyd en paralelo con Bloques 2-D • Durante cada iteración del algoritmo, la fila kesima y la columna kesima de procs hacen un broadcast 1-a-todos a lo largo de sus filas/columnas. • El tamaño del broadcast es n/√p elementos, tiempo: Θ((n log p)/ √p). • El paso de sincronizar toma Θ(log p). • El tiempo de computación es Θ(n2/p). • Tiempo paralelo de Floyd con bloques 2D es:
Algoritmo de Floyd en paralelo con Bloques 2-D • Se puede usar O(n2 / log2 n) procs a costo óptimo. • Isoeficiencia es Θ(p1.5 log3 p). • Se puede mejorar si se relaja la sincronización estricta luego de cada iteración.
Floyd acelerado con Pipelining • El paso de sincronización del Floyd paralelo se puede remover sina afectar los resultados. • Un proc comienza a trabajar en la kth iteración apenas se ha computado la iteración (k-1)esima y tiene partes relevantes de la matriz D(k-1)
Floyd acelerado con Pipelining Asume que elproc 4 en el tiempo t acaba de computar de la columna kesima de la matriz D(k-1). Manda el segmento a procs 3 y 5. Estos procs reciben el segmento en el momento t + 1 (1 tiempo= lo que tarda un segmento de un nodo a su vecino inmediato). Procs lejos del 4 reciben el segmento después. Proc 1 (en el boundary) no reenvía elemento después de recibirlo.
Floyd acelerado con Pipelining • En cada paso, n/√p elementos de la 1ra fila se envían desde Pi,j al Pi+1,j. • Similarmente, elementos de la 1ra columna se envían de Pi,j al Pi,j+1. • Cada paso demora: Θ(n/√p). • Luego de Θ(√p) pasos, el proc P√p ,√p obtiene los elementos relevantes de la 1ra cola y 1ra col en tpo Θ(n). • Los valores de otras filas y cols siguen luego de Θ(n2/p) modo pipeline. • Proc P√p ,√p termina su parte de computación en Θ(n3/p) + Θ(n). • Cuando el proc P√p ,√p ha terminado en la iteración (n-1)th, envía los valores relevantes de la nth fila y columna a otros procs.
Floyd acelerado con Pipelining • Tiempo paralelo: • Usa hasta O(n2) procesadores eficientemente. • Isoeficiencia es Θ(p1.5).
Comparación • La performance y escalabilidad de varios algoritmos se muestra.