Obtener elementos paralelos en resolución de dependencia

13

He implementado una clasificación topológica basada en el artículo de Wikipedia que estoy usando para la resolución de dependencias, pero devuelve una lista lineal. ¿Qué tipo de algoritmo puedo usar para encontrar las rutas independientes?

Masse
fuente
1
Una forma de resolver esto es modelar los nodos en el gráfico como actores y dejar que una biblioteca de actores se encargue del ordenamiento.
svick

Respuestas:

16

Asumo que un borde medios que T tiene que ser ejecutada antes v . Si este no es el caso, dé la vuelta a todos los bordes. Además, supongo que está menos interesado en las rutas (ya están dadas por el DAG) que en una buena estrategia de ejecución dadas las dependencias.(tu,v)tuv

Syosol=(V,mi)

S0 0={vVtuV.(tu,v)mi}Syo+1={vVtuV.(tu,v)mituk=0 0yoSk}

k

for i=0 to k
  parallel foreach T in S_k
    execute T

S0 0

parallel foreach T in S_0
  recursive_execute T

dónde

recursive_execute T {
  atomic { if T.count++ < T.indeg then return }
  execute T
  parallel foreach T' in T.succ
    recursive_execute T'
}

y T.countes un contador simple que contiene el número de predecesores de los Tcuales ya se han ejecutado, T.indegel número de predecesores y T.succel conjunto de sucesores.

Rafael
fuente