Colorización de elementos Miguel Vargas-Félix [email protected] http://www.cimat.mx/~miguelvargas CIMAT, November 19, 2014 1/11 Paralelización de operaciones elementales A partir de una malla de elemento finito, cómo elegir los elementos de tal forma que al hacer operaciones elementales, éstas se puedan realizar en paralelo. http://www.cimat.mx/~miguelvargas 2/11 Colorización La idea es separar los elementos en grupos, asignando un color a cada grupo. Los elementos de un grupo no comparten nodos entre sí. http://www.cimat.mx/~miguelvargas 3/11 Podemos realizar en paralelo las operaciones elementales en los elementos de cada color. Al no compartir nodos podemos relizar, por ejemplo, la multiplicación de matrices elementales de un color por su correspondiente vector elemental y aplicar el resultado al vector global. Sin problemas de concurrencia al paralelizar. Una vez terminados los elementos un color, podemos pasar al los elementos del siguiente color. Para realizar la colorización hay que determinar qué elementos son adyacentes entre sí. http://www.cimat.mx/~miguelvargas 4/11 Adyacencias A partir de la matriz de conectividades podemos determinar los elementos por nodo y la adyacencia de los elementos. 26 4 5 21 22 18 16 23 6 15 7 8 13 17 10 8 3 28 25 18 22 19 11 21 9 2 1 10 6 4 15 20 11 2 20 14 5 30 1 12 7 12 29 3 27 19 14 17 13 16 9 http://www.cimat.mx/~miguelvargas 24 e 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 n1 30 29 27 28 26 23 15 8 3 1 4 9 16 27 17 21 18 25 14 11 5 11 Ce,v n2 n3 28 22 30 25 29 20 26 21 23 18 15 13 8 10 3 5 1 2 4 6 9 7 16 12 24 17 19 17 19 11 18 14 13 10 22 14 10 5 6 7 2 6 19 20 n4 25 20 19 22 21 18 13 10 5 2 6 7 12 24 12 22 14 20 11 12 11 14 n 1 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 e1 9 9 8 10 8 10 11 7 11 7 15 12 6 16 6 12 13 5 3 2 4 1 5 13 1 4 3 1 2 1 e2 10 10 9 11 9 11 12 8 12 8 19 13 7 17 7 13 14 6 14 3 5 4 6 14 2 5 14 4 3 2 Nn e3 e4 e5 21 19 21 20 21 20 17 20 15 17 18 15 16 15 18 16 16 18 19 21 22 20 19 22 17 22 22 18 e 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 a1 2 1 2 1 4 5 6 7 8 9 10 11 12 3 3 1 5 1 7 10 8 2 a2 4 3 14 5 6 7 8 9 10 11 12 13 14 13 12 4 6 2 8 11 9 3 a3 16 18 15 16 16 16 17 17 19 20 20 15 15 15 13 5 7 3 9 12 10 14 a4 18 22 18 18 17 17 19 19 21 21 21 20 20 22 14 6 8 4 15 13 11 15 Ae a5 a6 a7 a8 a9 a10 22 21 19 17 16 16 16 15 15 16 20 18 18 17 17 19 19 17 21 19 19 19 18 21 20 18 22 22 22 22 20 21 22 22 22 19 20 21 5/11 El algoritmo para calcular los elementos por nodo es: Entrada: E número de elementos en la malla V número de nodos por elemento N número de nodos en la malla C matriz de conectividades de tamaño E ×V Salida: N vector de conjuntos de elementos por nodo, tamaño N Algoritmo: for e=1, 2,… , E for v=1, 2,…,V n=Ce , v N n ← N n ∪ {e } http://www.cimat.mx/~miguelvargas 6/11 Las adyacencias por elemento se pueden determinar con: Entrada: E número de elementos en la malla N número de nodos en la malla N vector de conjuntos de elementos por nodo, tamaño N Salida: A vector de conjuntos de adyancencia por elementos, tamaño E Algoritmo: for n=1, 2,…, N for all e 1 ∈N n for all e 2 ∈N n∣e 2 >e 1 A e ← A e ∪ {e 2 } A e ← A e ∪ {e 1 } http://www.cimat.mx/~miguelvargas 1 1 2 2 7/11 Lo siguiente es colorear los elementos: Entrada: E número de elementos en la malla A vector de conjuntos de adyancencia por elementos, tamaño E Salida: H vector con colores de elementos, tamaño E c max número máximo de colores utilizado Algoritmo: U vector booleano de colores usados, tamaño U for e=1, 2,… , E ; H e ←0 for e=1, 2,… , E for c=1, 2,…, c max ; U c ← false for all a∈A e c← H a if c≠0 then U c ← true for c=1, 2,…, c max if U c ← false then H e =c if H e =0 then c max ←c max +1 ; H e ← c max Un valor de U adecuado puede ser 200. http://www.cimat.mx/~miguelvargas 8/11 Finalmente hay que hacer un vector con los índices por cada color. Entrada: E número de elementos en la malla H vector con colores de elementos, tamaño E c max número máximo de colores utilizado Salida: G vector de c max vectores con los índices por color Algoritmo: W vector de enteros, de tamaño c max for c=1, 2,…, c max ; W c ← 0 for e=1, 2,… , E c← H e ; W c ← W c +1 for c=1, 2,…, c max Cambiar G c a tamaño W c Wc← 0 for e=1, 2,… , E c← H e i← W c ; W c ← W c +1 ( G c )i=e http://www.cimat.mx/~miguelvargas 9/11 Ejemplo en 3D http://www.cimat.mx/~miguelvargas 10/11 ¿Preguntas? [email protected] http://www.cimat.mx/~miguelvargas 11/11