Programación Paralela Esquemas de Programación Paralela 1 PROGRAMACIÓN PARALELA Esquemas de...

of 56/56
Programación Paralela Esquemas de Programación Paralela 1 PROGRAMACIÓN PARALELA Esquemas de programación paralela REFERENCIAS • Wilkinson, Allen • Gibbons, Rytter • Lester
  • date post

    22-Jan-2016
  • Category

    Documents

  • view

    223
  • download

    8

Embed Size (px)

Transcript of Programación Paralela Esquemas de Programación Paralela 1 PROGRAMACIÓN PARALELA Esquemas de...

  • PROGRAMACIN PARALELA

    Esquemas de programacin paralela

    REFERENCIAS Wilkinson, Allen Gibbons, Rytter Lester

  • Esquemas de algoritmos paralelos* Paralelismo de datos* Particionado de datos* Recorrido de un rbol* Algoritmos relajados* Computacin pipeline* Divide y vencers* Programacin dinmica* Paralelismo sncrono* Branch and Bound* Trabajadores replicados

  • Paralelismo de datos* Muchos datos tratados de una forma igual o similar* Algoritmos numricos* Datos en arrays o vectores- Procesamiento vectorial- Paralelismo asignando partes distintas del array a distintos procesadores* Memoria Compartida: - Distribucin del trabajo- Paralelizacin automtica* Memoria Distribuida: - Distribucin de los datos- Tcnica de particionado de datos

  • Paralelismo de datosEjemplo: suma de n datos* Esquema:s=0for i=0 to n-1s=s+a[i]endfor* Paralelizacin automtica:Con opcin de compilacin si no hay dependencia de datos* Con pragma:s=0#Pragma: for paralelo (a compartida de lectura, s compartida de lectura-escritura)for i=0 to n-1s=s+a[i]endfor* Distintas posibilidades de asignacin de los datos a los procesadores:- Bloques contiguos- Cclico- Incremental

  • Paralelismo de datosEjemplo: suma de n datos

    * Con paralelismo explcito:#Pragma: llamada concurrente (i=0 to p-1)sumaparcial( &a[(i*n)/p] , i )if nodo=0s=sumatotal()endifsumaparcial( a , i ):s=0for j=0 to n/p-1s=s+a[j]endfora[0]=s*Paralelizacin de sumatotal?Si pocos procesadores suele ser preferible que lo haga uno solosumatotal():s=0for j=0 to p-1 step n/ps=s+a[j]endforreturn s

  • Paralelismo de datosEjemplo: ordenacin por rango* Paralelizacin automtica:#Pragma: for paralelo (a compartida de lectura, r compartida de lectura-escritura)for i=0 to n-1for j=0 to n-1if a[i]>a[j]r[i]=r[i]+1endifendforendforse asignan varios valores de i a cada procesadorno hay problemas de coherencia en r

  • Paralelismo de datosEjemplo: ordenacin por rango* Paralelizacin explcita:#Pragma: llamada concurrente (for i=0 to p-1)calcularrango(a,i)calcularrango(a,i):for j=(i*n)/p to ((i+1)*n)/p-1for k=0 to n-1if a[j]>a[k]r[j]=r[j]+1endifendforendforse hace asignacin del trabajo entre los procesadoresP0P1P2

    annn

    rn/pn/pn/p

  • Paralelismo de datosEjemplo: multiplicacin de matrices* Paralelizacin implcita:#Pragma: for paralelo (a,b compartida de lectura,c compartida de lectura-escritura)for i=0 to n-1for j=0 to n-1c[i,j]=0for k=0 to n-1c[i,j]=c[i,j]+a[i,k]*b[k,j]endforendforendforPosiblemente mejor usar bloques contiguos para mejor uso de la cachC A B

    P0 P0 P0

    P1 = P1 P1

    P2 P2 P2

  • Paralelismo de datosEjemplo: multiplicacin de matrices* Paralelizacin explcita:#Pragma: llamada concurrente (for i=0 to p-1)multiplicar(c,a,b,i)multiplicar(c,a,b,i):for j=(i*n)/p to ((i+1)*n)/p-1for k=0 to n-1c[j,k]=0for l=0 to n-1c[j,k]=c[j,k]+a[j,l]*b[l,k]endforendforendfor

  • Particionado de datos * Especie de paralelismo de datos en Multicomputadores (MD)* El espacio de datos se divide en regiones adyacentes:- Se asignan a procesadores distintos- Intercambio de datos entre regiones adyacentes* Para obtener buenas prestaciones:intentar que el volumen de computacin entre comunicaciones sea grande

  • Particionado de datosEjemplo: suma de n datos- Computacin: suma de n/p datos en cada procesador.- Comunicacin:acumulacin de los resultados depende de la topologase puede pensar en topologa lgica El programa similar al de Memoria Compartida.

    n

    P0P1P2

  • Particionado de datosEjemplo: ordenacin por rango En paralelismo de datos se distribua el trabajo:aP0P1P2

    rP0P1P2

    en particionado de datos puede ser:P0P1P2aaa r0r1r2

    Podra ser que los datos estuvieran inicialmente de otra manera:a0r0P0a1r1P1a2r2P2Pi se encarga de calcular los valores de ri, necesita comparar ai con cada aj p pasos

  • Particionado de datosEjemplo: ordenacin por rangoEn cada Pi, i=0,1,...,p-1for j=0 to n/p-1b[j]=a[j]endforfor j=1 to pfor k=0 to n/p-1for l=0 to n/p-1if a[k]>b[l]r[k]=r[k]+1endifendforendforenviar a[0]...a[n/p-1] a P(i-1) mod precibir en b[0],...,b[n/p-1] de P(i+1) mod pendfor

  • Recorrido de rboles y grafos* Muchos problemas tienen una representacin (fsica o lgica) en forma de rbol o grafo con raz, y su resolucin consiste en recorrer el rbol o grafo hasta la raz realizando computaciones.Para resolverlo en paralelo:- Asignar el trabajo de diferentes nodos a distintos procesadores.- Los arcos representan precedencias en la computacin, e implican en algunos casos comunicaciones. bx bx+c xx axx axx+bx+c x p0p1entrada de datos salida de datos precedencia comunicacin * Grafos de precedencia:Ej: evaluar ax2+bx+c

  • Recorrido de rboles y grafos p0p1p2p3* La suma de n nmeros la realizamos con un rbol binario: * Suma prefija:dada una secuencia {x0,x1,...,xn-1}formar si=x0+x1+...+xi, con i=0,1,...,n-1

  • Recorrido de rboles y grafosEjemplo: suma prefijaPara cada Pi, i=0,1,...,n-1desp=1for j=0 to log n-1if i=desprecibir en y de Pi-despx=x+yendifdesp=desp*2endfor

  • Recorrido de rboles y grafosEjemplo: clases de equivalenciaEn una representacin de conjuntos por medio de rboles:

    se trata de encontrar el representante de la clase a la que pertenece cada nodo.Los arcos indican comunicaciones si estn en distinto procesador.De cada nodo sale como mucho un arco el patrn de comunicaciones es fijo.Para cada nodo se lee el valor del padre,si el valor ledo es igual al que hay en el nodo ese nodo enva un mensaje de fin al nodo con el que se comunica y acaba.

  • Algoritmos relajados* Cada procesador computa de manera independiente.- No hay sincronizacin ni comunicacin.* Buenas prestaciones en Memoria Compartida y Distribuida.- A veces a costa de no utilizar el mejor algoritmo paralelo.* Fciles de programar.* Difcil encontrar algoritmos que se adecen a este esquema.

  • Algoritmos relajadosEjemplo: races de una funcin

    Dividir el espacio de bsqueda en p subespacios:

    - Puede haber desbalanceo.- La programacin es muy sencilla.

    p0p1 p2 p3

  • Algoritmos relajadosEjemplo: ordenacin por rango- Memoria Compartida: cada procesador calcula el rango de una parte de los elementos.- Memoria Distribuida: si la distribucin es

    duplicacin de datossimplifica la programacinbuenas prestaciones

    p0 p1 p2 p0 p1 p2 p0 p1 p2 a b r

  • Algoritmos relajadosEjemplo: multiplicacin de matrices* En Memoria Compartida: cada procesador calcula un bloque de filas de la matriz resultado.* En Memoria Distribuida con:

    Cada procesador calcula las filas de C correspondientes a las filas de A que contiene.No es necesaria sincronizacin ni comunicacin.- Pero: ms costoso el envo inicial al repetirse B en cada procesador:

    C A B = p0p1 p2 p0p1 p2 p0 p1 p2

  • Computacin pipeline* Resolver un problema descomponindolo en una serie de tareas sucesivas:los datos fluyen por la estructura de los procesadores.* El coste ser mayor que el de la tarea ms costosa.Puede tener inters cuando:- no hay un nico conjunto de datos a tratar sino una serie de conjuntos de datos.- no se necesite que una tarea est completamente finalizada para empezar la siguiente.* Cada tarea puede tener un peso diferente y ser preferible dedicar distinto nmero de procesadores a cada tarea:* Tiene estructura lgica de Multicomputador.

    p0 p1 p2

  • Computacin pipelineEjemplo: sistema triangular inferior de ecuaciones lineales

    Sustitucin progresiva: considerando un procesador por fila, pi calcula xi.000010011111001111111axbaxaxbaxaxaxbnnnnnnn...............,,,

  • Computacin pipelineEjemplo: sistema triangular inferior de ecuaciones lineales#Pragma: llamada concurrente (for i=0 to n-1)resolver(i)resolver(i):suma=0for j=0 to i-1P(valor[j])V(valor[j])suma=suma+a[i,j]*x[j]endforx[i]=(b[i]-suma)/a[i,i]V(valor[i])donde:- valor[i] son semforos inicializados a 0.- se puede hacer con otras construcciones como llaves o canales.

  • Computacin pipelineEjemplo: sistema triangular inferior de ecuaciones lineales- Coste secuencial: Coste paralelo:- Speed-up:- Eficiencia:12.5%* Con procesos de mayor grano: n/p filas por procesador eficiencia del 50%,porque se puede empezar la computacin de una tarea sin haberse acabado la de las anteriores.

  • Computacin pipelineEjemplo: sistema triangular inferior de ecuaciones lineales* En Memoria Distribuida, sustituir los semforos por envos y recepciones:En cada Pi, i=0,1,...,n-1if i=0 x=b/a[0]enviar x a P1else if in-1for j=0 to i-1recibir x de Pi-1enviar x a Pi+1suma=suma+a[j]*xendforx=(b-suma)/a[i]else for j=0 to n-2recibir x de Pn-2suma=suma+a[j]*xendforx=(b-suma)/a[n-1]endif

  • Divide y vencers* Idea general:Dividir un problema p en subproblemas p1,p2,...pnResolver los subproblemas pi obteniendo siCombinar las soluciones parciales s1,s2,...,sn para obtener la solucin global de pEl xito del mtodo depende de que se pueda hacer la divisin y la combinacin de forma eficiente.* Paralelismo:La solucin de los subproblemas se puede hacer en paralelo la divisin debe producir subproblemas de coste balanceadola divisin y la combinacin implicarn comunicaciones y sincronizacinEs el esquema ms adecuado para paralelizar,se puede considerar que todos los programas paralelos siguen este esquema.

  • Divide y vencersEjemplo: ordenacin por mezcla* Multiprocesador:#Pragma: llamada concurrente (for i=0 to p-1)ordenarsimple(i,a)(*Ordenar en cada procesador el trozo de array que le corresponde*)proc=p/2(*Nmero de procesadores que intervienen en la mezcla*)for j=1 to log p-1#Pragma: llamada concurrente (for i=0 to proc-1)mezclar(i,n/proc,a)proc=proc/2endformezclasimple(0,n,a)mezclar(i,l,a):mezclasimple(i*l,(i+1)*l-1,a)No hay recursin: se divide en funcin del nmero de procesadores.* Secuencial, recursivo:ordenar(p,q,a):if q-p>limm=(p+q)/2ordenar(p,m,a)ordenar(m+1,q,a)mezclar(p,m,q,a)elseordenarbasicoendif

  • Divide y vencersEjemplo: ordenacin por mezcla* Multicomputador:Enviar n/p datos a cada procesadorEn cada Pi, i=0,1,...,p-1ordenar(0,n/p-1,a)activo=1desp=2for j=1 to log pif activo=1if i mod desp=0recibir en b (n/p)*(desp/2) datos de Pi+desp/2mezclar a y b en aelseenviar (n/p)*(desp/2) datos de a a Pi-desp/2activo=0endifdesp=desp*2endifendifSe hace una acumulacin de los tramos ordenados sobre cada procesador en el procesador 0, haciendo mezclas conforme se va acumulando:

  • Divide y vencersEjemplo: ordenacin rpida* Multiprocesador:m[0]=0m[1..p]n-1m[p/2]=particionar(0,n-1,a)proc=2for j=1 to log p-1#Pragma: llamada concurrente (for i=0 to proc-1)m[p/(2*proc)+i*p/proc]=particionar(m[i*p/proc],m[(i+1)*p/proc],a) proc=2*proc endfor#Pragma: llamada concurrente (for i=0 to p-1)ordenar(m[i],m[i+1],a)Al particionar se forman grupos de datos ordenados entre s, utilizando el array m de ndices para indicar los lmites de las particiones.El trabajo no estar balanceado porque las secuencias de datos no tienen la misma longitud.* Secuencial:ordenar(p,q,a):if q-p>limm=particionar(p,q,a)ordenar(p,m,a)ordenar(m+1,q,a)elseordenarbasicoendifEn el particionado se hace la ordenacin

  • Divide y vencersEjemplo: ordenacin rpida* Multicomputador:En cada Pi, i=0,1,...,p-1m1=n-1 ; desp=p ; activo=0if i mod (desp/2)=0 activo=1 endiffor j=1 to log pif activo=1if i mod desp=0m=particionar(0,m1,a)enviar m1-m+1 y a[m+1],...,a[m1] a Pi+desp/2m1=melserecibir en l y a de Pi-desp/2m1=l-1m=particionar(0,m1,a)enviar m1-m+1 y a[m+1],...,a[m1] a Pi+desp/2m1=mendifendifdesp=desp/2if i mod (desp/2)=0 activo=1 endifendforordenar(a) y acumular sobre P0Suponiendo que tenemos los datos en el procesador 0 se irn haciendo y enviando particiones, de manera que en cada paso se duplica el nmero de procesadores implicados.Hay desbalanceo y mensajes de distinta longitud.

  • Programacin dinmica* Para resolver problemas de optimizacin.Obteniendo soluciones de subproblemas de menor a mayor tamao hasta llegar al tamao deseado.Las soluciones parciales se pueden guardar en un array construyendo el array de la primera fila hasta la ltima, usndose para cada fila los valores de las anteriores:

  • Programacin dinmica* En Memoria Compartida:En cada fila intervienen los procesadores obteniendo cada uno valores de distintos tamaos,basndose en la lnea anterior para leer no hay problema de coherencia,pero se necesita sincronizacin entre los pasos sucesivos (uno por lnea).* En Memoria Distribuida:Un procesador puede necesitar datos almacenados en otro: indicados por las flechas que cruzan la lnea gruesa.

  • Programacin dinmicaEjemplo: problema de la mochila 0/1

    Mochila de capacidad Cobjetos numerados 1,2,...,ncada objeto tiene un peso piy un beneficio bi.Maximizar sujeto a xi=0 o 1, y Se obtiene la frmula:

    Ejemplo:C=9 p=(3,5,2) b=(4,6,5)1234567891004444444200446661010305559991111MiXmax{MiXMiXpbii}(,)(,),(,)11

  • Programacin dinmicaEjemplo: problema de la mochila 0/1* Multiprocesador:for i=1 to n-1#Pragma: llamada concurrente (for j=1 to p)calcular(i,j,M)endforM[n,C]=max{M[n-1,C],M[n-1,C-p[n]]+b[n]}calcular(i,j,M):for k=(j-1)*C/p+1 to j*C/pM[i,k]=max{M[i-1,k],M[i-1,k-p[i]]+b[i]}endfor

  • Programacin dinmicaEjemplo: problema de la mochila 0/1* Multicomputador: Suponemos una columna por procesador.Para cada Pi, i=1,...,Cif p[1]i M=b[1] (*Se rellena la primera fila*)else M=0endifif i+p[2]C(*Se comprueba qu procesadores necesitan datos*)enviar M a Pi+p[2]endiffor j=2 to n-1if i-p[j]1(*Se comprueba si recibe dato de la fila anterior*)recibir en N de Pi-p[j]else N=0endifM=max{M,N+b[j]}if i+p[j+1]C enviar M a Pi+p[j+1] endifendforif i-p[n]1 recibir en N de Pi-p[n]else N=0endifM=max{M,N+b[j]}

  • Paralelismo sncrono* Iteraciones sucesivas:- cada procesador realiza el mismo trabajo sobre una porcin distinta de los datos.- datos de una iteracin se utilizan en la siguiente.- al final de cada iteracin sincronizacin (local o global).* Prestaciones afectadas por la sincronizacin:- en Memoria Compartida buenas prestaciones.- en Memoria Distribuida bajan las prestaciones pues hay comunicacin.

  • Paralelismo sncronoEjemplo: solucin de ecuacin diferencialRelajacin de Jacobi para resolver una ecuacin de Laplace:Ecuacin de diferencias:

    - Converge gradualmente a una solucin cada vez ms precisa.- Para obtener una solucin ms precisa aumentar el nmero de puntos del array.- Una iteracin tras otra secuencialmente, pero dentro de cada iteracin paralelismo.

  • Paralelismo sncronoEjemplo: solucin de ecuacin diferencial* En Multiprocesador:bafor i=1 to numiter/2#Pragma: for paralelo (a compartida de lectura,b compartida de escritura)for j=1 to nfor k=1 to nb[j,k]=(a[j-1,k]+a[j+1,k]+a[j,k-1]+a[j,k+1])/4endforendfor#Pragma: for paralelo (a compartida de escritura,b compartida de lectura)(*lo mismo del pragma anterior pero de b en a*)endfor- Sincronizacin por acabar el pragma.- En dos partes para evitar copias.- Asigna filas completas a cada procesador:topologa lgica de anillo.

  • Paralelismo sncronoEjemplo: solucin de ecuacin diferencial* Puede ser ms interesante crear un proceso por cada procesador:ba#Pragma: llamada concurrente (for i=0 to p-1)iterar(a,b,i)iterar(a,b,i):for j=1 to numiter/2for k=i*n/p+1 to (i+1)*n/pfor l=1 to nb[k,l]=(a[k-1,l]+a[k+1,l]+a[k,l-1]+a[k,l+1])/4endforendforBARRERA(*lo mismo pero de b en a*)BARRERAendforEn Memoria Distribuida a y b son locales:La barrera implica sincronizacin y comunicacin.

  • Paralelismo sncronoBarrera lineal* Normalmente las barreras se proporcionan con el sistema.* Se pueden implementar de distintas maneras.* Implementacin por conteo de variables:Barrera:P(llegada)cont=cont+1if cont0V(salida)elseV(llegada)endifCoste lineal.En Memoria Distribuida habra que acceder a una variable global.

  • Paralelismo sncronoBarrera en rbol* La contencin se puede reducir descentralizando:Sincronizacin por subgrupos y despus centralizar.Ej: suma de nmeros, donde se acumulan los resultados parciales para obtener el total.

    * Barrera en rbol:

  • Paralelismo sncronoBarrera en rbolbarrera(i):(*i=0,...,p-1; nmero de proceso*) des=1 act=1 for j=1 to log p if act=1 des=des*2 if i mod des>0 activo=0 enviar a Pi-des/2 else recibir de Pi+des/2 endif endif endfor

    Coste log p, pero ms complejo que el lineal. des=pfor j=1 to log p des=des/2 if i mod des=0 act=1 endif if act=1 if i mod (des*2)=0 enviar a Pi+des else recibir de Pi-des endif endifendfor

  • Paralelismo sncronoEjemplo: relajacin de Jacobi. Sincronizacin local* El paso de una iteracin a la siguiente puede no necesitar de sincronizacin global:

    para calcular b[i,:] basta con conocer a[i-1,:], a[i,:], a[i+1,:]barreralocal(i):if i>1superior[i-1]=1endifif i1basura=inferior[i]endifsuperior e inferior son canales de 0 a n+1

  • Paralelismo sncronoEjemplo: relajacin de Jacobi. Sincronizacin local* En Memoria Distribuida:barreralocal(i):if i>0enviar a Pi-1endifif i0recibir de Pi-1endifif i
  • Paralelismo sncronoEjemplo: relajacin de Jacobi.* Comparacin de las distintas tcnicas de sincronizacin:* Test de convergencia:- El nmero de iteraciones puede no ser fijo, puede depender de la norma a-b calcular la norma distribuida,acumular y difundir el resultado.- No es costoso en comparacin con el coste total.

    Grfico1

    101

    112

    11.58496250073

    124

    12.32192809495

    12.58496250076

    12.80735492217

    138

    13.16992500149

    13.321928094910

    local

    rbol

    lineal

    Hoja1

    localrbollineal

    1101

    2112

    311.58496250073

    4124

    512.32192809495

    612.58496250076

    712.80735492217

    8138

    913.16992500149

    1013.321928094910

    Hoja1

    local

    rbol

    lineal

    Hoja2

    Hoja3

  • Branch and Bound* En problemas de bsqueda en un espacio de soluciones.El espacio de bsqueda es un rbol donde cada nodo representa un subespacio de bsqueda.Obtener solucin ptima explorando la menor cantidad posible de nodos.* Caractersticas:- expansin:el trabajo en un nodo consiste en generar todos los hijos obteniendo por cada nodo unas cotas inferior y superior del beneficio alcanzable por una solucin a partir de ese nodo, y una estimacin del beneficio obtenible.- seleccin:de todos los nodos vivos (de los que no se han generado los hijos)se elige uno segn algn criterio: primero generado, el de mayor beneficio estimado, ...- poda:para evitar generar nodos innecesarios, cuando la cota inferior de un nodo es mayor que la cota superior de otro, ste ltimo se puede eliminar* Es proceso secuencial: se necesita informacin global para la seleccin y la poda.

  • Branch and BoundPosibilidades de paralelismo* Bsqueda paralela usando diferentes algoritmos en diferentes procesadores:diferencias en el clculo de las cotas,de la estimacin del beneficio,y del criterio de seleccin.-Se repiten nodos pero hay pocas comunicaciones.* Expansin en paralelo de cada nodo:- Se necesita que la expansin de cada nodo sea costosa:gran nmero de hijos,alto coste de los clculos de cada hijo.- Gestin de la lista de nodos vivos centralizada muchas comunicaciones.

  • Branch and BoundPosibilidades de paralelismo* Evaluacin paralela de subproblemas:- De la lista de nodos vivos se asignan diferentes nodos a cada procesador.- Posibilidades en la distribucin de los nodos:1. Esttica: pocas comunicaciones,se pueden difundir las cotas para podar. con asignacin balanceada de nodos, con asignacin ponderada de nodos.2. Asignacin dinmica con bolsa de tareas: ms comunicaciones. con actualizacin inmediata de la bolsa de tareas, con actualizacin pospuesta.

  • Branch and BoundEjemplo* Secuencial:

    * Paralelo sin comunicar cotas:* Paralelo comunicando cotas:

  • Trabajadores replicados* Se mantiene una bolsa central de tareas.* Trabajadores:- Toman tareas de la bolsa.- Generan otras nuevas.* Acaba la computacin cuando la bolsa est vaca y todos los trabajadores han acabado.* til en problemas combinatorios: bsqueda en rbol.* Asignacin dinmica de trabajos para balancear la computacin.

  • Trabajadores replicados* Bolsa de tareas: conjunto de descriptores de tareas,cada descriptor especifica una computacin.* En Multiprocesadores:una estructura centralizada de la que los trabajadores toman trabajos y posiblemente depositan otros nuevos* En Multicomputadores:la estructura en la memoria de uno o varios procesadores,peticin y depsito de tareas conllevan comunicacin.* Aspectos a tener en cuenta:- Contencin:Por ser la bolsa de tareas centralizada.Cuantos ms procesadores mayor contencin.- Balanceo:Si se descentraliza la bolsa:mayor desbalanceo y menor contencin compromiso entre contencin y balanceo- Terminacin:El test de terminacin es global sincronizacin.

  • Trabajadores replicadosEjemplo: algoritmo del camino ms cortoEn un grafo dirigido, encontrar el camino ms corto de un vrtice a los dems.

    distanciacola={1}distancia[1]=0while no vaca colax=el de menor distancia en la colafor i=1 to ndist=distancia[x]+pesos[x,i]if dist

  • Trabajadores replicadosEjemplo: algoritmo del camino ms cortoEjemplo:

    inicialmente:cola=1distancias: 0,,,,paso1:cola=2,3distancias: 0,4,8,,paso2:cola=4,3distancias: 0,4,7,5,paso3:cola=3,5distancias: 0,4,7,5,15paso4:cola=5distancias: 0,4,7,5,12paso5:cola=distancias: 0,4,7,5,12

  • Trabajadores replicadosEjemplo: algoritmo del camino ms corto. Memoria CompartidaPrograma: distancia enconjuntofalse distancia[1]=0 enconjunto[1]=true #Pragma: llamada concurrente (for i=1 to p) trabajador(i)trabajador(i): tomar(i,v) while v-1(*-1 indica que ha acabado*) bloquear enconjunto[v] enconjunto[v]=false desbloquear enconjunto[v] for j=1 to n if pesos[v,j]
  • Trabajadores replicadosEjemplo: algoritmo del camino ms corto. Memoria CompartidaContadores:trabajadores=p(*trabajadores activos*)tareas=1(*tareas por hacer*)tomar(i,j):bloquear trabajadorescont=trabajadores-1trabajadores=contdesbloquear trabajadoresif cont=0bloquear tareasif tareas=0desbloquear tareasj=-1elsedesbloquear tareasbloquear colaj=cabeza de coladesbloquear colaendifelsebloquear colaj=cabeza de coladesbloquear colaendif poner(i,j):bloquear tareastareas=tareas+1desbloquear tareasbloquear colainsertar j en coladesbloquear cola

    El bloqueo con espera activa