Metodología de Diseño
Etapas de la Paralelización
Partición/Descomposición: La computación se descompone en pequeñas
tareas que forman las unidades de concurrencia.
Coordinación: Incorporación de mecanismos para la denominación, comuni-
cación y sincronización de las tareas.
Aglomeración/Asignación: Las tareas se agrupan en procesos más grandes
para optimizar el rendimiento y/o reducir costes de desarrollo.
Proyección: Los procesos se asignan a los procesadores disponibles de forma
que se maximice la utilización y minimice los costes de comunicación.
Partición/Descomposición
¿Cómo particionar la Computación?
Código Estructurado: Sugerido por el código mismo (lazos, estructuras
de datos, ..)
Código no Estructurado: Siempre se puede recurrir a heurísticas dinámicas.
¿Qué ocurre con los datos?
Pase de Mensajes: Deben particionarse con las computaciones (localidad)
Memoria Compartida: La localidad es siempre un factor de rendimiento
Estrategias de Particionamiento
Descomposición en Dominios : Se particionan las estructuras de datos y se
generan las tareas a partir de las computaciones asociadas a cada partición.
Descomposición Funcional : Se particionan las computaciones en tareas
funcionales y se asocian los datos maximizando la localidad.
Descomposición en Dominios
Método:
1. Los datos se particionan en grupos pequeños de tamaño similar
2. Se diseñan las tareas, a partir de cada uno de los grupos anteriores y
todas sus computaciones asociadas.
Estilo usual en la programación SPMD
Elección de los Datos:
Es preferible la mayor estructura de datos o la que se accede con mayor
frecuencia
En códigos grandes puede ser más eficiente manejar varias descomposiciones
diferentes.
Descomposición Funcional
Método:
1. Las computaciones se descomponen en tareas disjuntas
2. Los datos se estructuran en función de las tareas diseñadas
En computación numérica, es más usual la descomposición en dominios.
La descomposición funcional se suele combinar con la descomposición
en dominios en una jerarquía en dos niveles.
Modelo Atmosférico
Modelo
Hidrológico
Modelo
Oceánico
Modelo de Superficie
Terrestre
Modelo
Climático
Ejemplo de descomposición funcional
Procedure search (A)
begin
if (solution (A) ) then
score = eval (A)
report solution and score
else
foreach child A (i) of A
search (A(i))
endfor
endif
end
Algorithm 1.1
A recursive formulation of a simple search
algorithm. When called to expand a search
tree node, this procedure checks to see
whether the node in question represents a
solution. If not, the algorithmmakes recur-
sive calls to the same procedure to expand
each of the offspring nodes.
Task estructure for the search example.
Each circle represents a node in the search
tree and hence a call to the search proce-
dure. A task is created for each node in the
tree as it is explored. At any one time, some
tasks are actively engaged in expanding the
tree further (these are shaded in the figure);
others have reached solution nodes and are
terminating, or are waiting for their offspring
to report back with solutions. The lines re-
present the channels used to return solutions.
Checklist de la partición
1) Define su partición al menos un order de magnitud más de
tareas que procesadores en su sistema paralelo?
2) Elimina su partición redundancia en computación y almace-
namiento?
3) Son las tareas de tamaño comparable?
4) Escala el número de tareas con el tamaño del problema?
5) Ha identificado varias particiones alternativas?
Coordinación
Comunicación/Sincronización:
Memoria compartida: Mientras la comunicación es implícita, la sincroniza-
ción suele implementarse mediante construcciones específicas (exclusión
mutua y sincronización de sucesos)
Pase de Mensajes: La comunicación y sincronización de sucesos utilizan el
mismo mecanismo (mensajes explícitos), mientras que la exclusión mutua se
verifica por defecto.
Algunos lenguajes modernos (ej., lenguajes
de paralelismo de datos) hacen transparente
la comunicación y sincronización explícita
Influencia de la Descomposición
Descomposición en Dominios: La organización eficiente de la comunicación
es usualmente compleja, debido a las dependencias entre las tareas.
Descomposición Funcional: La organización eficiente de la comunicación es
inmediata, consecuencia directa de la descomposición y corresponde al flujo
de datos entre tareas
Esquemas de Comunicación
Comunicación Local/Global
Comunicación Local: Cada tarea se comunica con pocas tareas
Comunicación Global: Cada tarea se comunica con muchas ( o todas las)
tareas.
Categorización de las necesidades de comunicación
Comunicación Estructurada/No estructurada
Comunicación Estructurada: Una tarea y sus vecinos forman una estructura
regular
Comunicación No estructurada: El patrón de comunicaciones es irregular.
Comunicación Estática/Dinámica
Comunicación Estática: La identidad de las tareas comunicantes no cambia
con el tiempo
Comunicación Dinámica: El patrón de comunicaciones cambia durante la
ejecución del programa.
Comunicación Síncrona/Asíncrona
Comunicación Síncrona: Los productores y consumidores operan de forma
coordinada (cooperan)
Comunicación Asíncrona: El consumidor obtiene datos sin la cooperación
del productor
Coordinación
Debemos establecer el acceso a datos, y la comunicación y sin-
cronización entre las tareas.
Alternativas
Memoria Compartida: Los datos se distribuyen a lo largo del espacio de
memoria física, y la comunicación/sincronización se produce implícitamente
a través de variables definidas en el espacio compartido.
Pase de mensajes: Los datos deben distribuirse explícitamente en las memo-
rias locales y la comunicación/sincronización debe establecerse explícitamente
(las tareas deben saber cómo están distribuidos los datos)
La distribución de datos no es esencial en un modelo
de memoria compartida, pero sí recomendable
Comunicación Global
Reducción Paralela
S = ? Xi
N-1
i =0
S
0
2
1
3
5
4
7
6
0
2
1
3
5
4
7
6
0 1 2 3 4 5 6 7
Algoritmo Centralizado y
Secuencial
6 5 4 3 2 1 0
Algoritmo Distribuido
(segmentado)
0
2
1
3
5
4
7
6
S
S
S
S
S
S
S
1 1 1 1
2 2
0 0 0 0 0 0 0 0
Algoritmo Divide &Conquer
Página siguiente |