Beruflich Dokumente
Kultur Dokumente
Func1(){
}
Func2(){
}
Forall(i=ithread;i<N;i=i+nthread){
Codigo para i
}
Func3(){
}
Main()
par(iproc){
Case0;Func1();break
Case1;Func2();break
Case2;Func3();breac
B1 B2
La dependencias que detecta el análisis entre estos dos
bloques son:
Dependencias RAW: ocurre si el bloque B1 produce un
dato que consume B2.
Dependencias WAW: ocurre si B1 escribe en una
posición de memoria en la que también escribe B2.
Dependencias WAR: ocurre si B1 lee una posición de
memoria que modifica B2.
Las dependencias WAW y WAR son evitables cambiando la
asignación de memoria; también se pueden eliminar asi
algunas RAW.
Todos estos compiladores están limitados a aplicaciones
que exhiben un paralelismo regular, como los cálculos a
nivel de bucle.
No sólo los encontramos en computadores paralelos de
altas prestaciones, también los podemos encontrar en el
nivel de PC y estaciones como los compiladores intel.
La programación paralelo puede ofrecer al
programador, además de la comunicación entre dos
procesos, uno productor y otro consumidor,
comunicaciones en las que intervienen múltiples
procesos.
Esto se usa para comunicar a los procesos que
forman parte del grupo que esta colaborando en la
ejecución de un código.
En algunos casos no se usan para comunicar
explícitamente datos, sino para sincronizar entre si a
componentes del grupo.
Hay patrones de comunicación que se repiten
en diferentes algoritmos paralelos.asi hay
algoritmos en los que:
Se reordenan datos entre procesos, siguiendo
patrones reconocibles (permutaciones) como:
rotación, intercambio y baraje.
Se difunden datos
Se reduce un conjunto de datos a un único dato
mediante una operación: para sumar los elementos
de una lista; calculo del máximo o del mínimo.
Se realizan múltiples reducciones en paralelo con el
mismo conjunto de datos, cada uno con diferente
numero de elementos.
Se sincronizan múltiples procesos en un punto.
La siguiente figura se presenta una
clasificación de las funciones colectivas en
cinco grupos:
Comunicación múltiple uno a uno: hay
componentes del grupo que envían un único
mensaje y componentes que reciben un único
mensaje.
Comunicación uno a todos: envía y todos los
procesos reciben
Difusión: los procesos reciben el mismo mensaje
Dispersión (scatter): cada proceso receptor recibe
un mensaje diferente
Comunicación todos a uno: todos los procesos en
el grupo envían un mensaje a un único proceso.
Reducción: mensajes enviados se combinan en un
solo mensaje mediante un operador
Acumulación (gather): mensajes se reciben de
forma concatenada en el receptor
Reduccion acumulacion
Comunicación todos a todos: todos los procesos ejecutan
una comunicación uno a todos, pero cada proceso recibe n
mensajes, cada uno de un proceso diferente.
Todos difunden (all broadcast): todos los procesos
realizan una difusión, de modo que todos los procesos
reciben lo mismo
Todos dispersan (all scatter): los procesos concatenan
diferentes transferencias
Comunicaciones colectivas compuestas: hay servicios que
resultan de una combinación de algunos de los anteriores.
-Todos combinan o reducción y extensión: el resultado de
aplicar una reducción se obtiene en todos los procesos, bien
porque la reducción se difunda una vez obtenida, O bien
porque se realicen tantas reducciones como procesos