Ottenere elementi paralleli nella risoluzione delle dipendenze


13

Ho implementato un ordinamento topologico basato sull'articolo di Wikipedia che sto usando per la risoluzione delle dipendenze, ma restituisce un elenco lineare. Che tipo di algoritmo posso usare per trovare i percorsi indipendenti?


1
Un modo per risolverlo è modellare i nodi nel grafico come attori e lasciare che alcune librerie di attori si occupino dell'ordinamento.
svick,

Risposte:


16

Si considera che un bordo mezzi che u deve essere eseguita prima v . In caso contrario, girare attorno a tutti i bordi. Suppongo inoltre che tu sia meno interessato ai percorsi (quelli già forniti dal DAG) che a una buona strategia di esecuzione date le dipendenze.(u,v)uv

Siosol=(V,E)

S0={vV|uV.(u,v)E}Sio+1={vV|uV.(u,v)EuK=0ioSK}

K

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

S0

parallel foreach T in S_0
  recursive_execute T

dove

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

ed T.countè un semplice contatore che contiene il numero di predecessori Tgià eseguiti, T.indegil numero di predecessori e T.succl'insieme di successori.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.