Obtention d'éléments parallèles dans la résolution des dépendances

13

J'ai implémenté un tri topologique basé sur l'article Wikipedia que j'utilise pour la résolution des dépendances, mais il renvoie une liste linéaire. Quel type d'algorithme puis-je utiliser pour trouver les chemins indépendants?

Masse
la source
1
Une façon de résoudre ce problème consiste à modéliser les nœuds du graphique en tant qu'acteurs et à laisser une bibliothèque d'acteurs s'occuper de l'ordre.
svick

Réponses:

16

Je suppose qu'un bord signifie que u doit être exécuté avant v . Si ce n'est pas le cas, retournez tous les bords. Je suppose en outre que vous êtes moins intéressé par les chemins (ceux déjà fournis par le DAG) que par une bonne stratégie d'exécution compte tenu des dépendances.(u,v)uv

Sjeg=(V,E)

S0={vVuV.(u,v)E}Sje+1={vVuV.(u,v)Euk=0jeSk}

k

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

S0

parallel foreach T in S_0
  recursive_execute T

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

et T.countest un simple compteur contenant le nombre de prédécesseurs Tdéjà exécutés, T.indegle nombre de prédécesseurs et T.succl'ensemble des successeurs.

Raphael
la source