Co to znamená
Vlna je množina úkolů, jejichž závislosti jsou všechny splněny ve stejné hloubce. Vlna nula je každý kořen; úkol leží o vrstvu za svou nejhlubší závislostí. Vlny se odvozují při každém čtení a nikde se neukládají, takže žádný plán provedení nemůže zastarat. Sdílení vlny je nutné, aby dva úkoly běžely souběžně, ale nestačí: pokud se jejich deklarované cesty scope překrývají, překryv se ohlásí a úkoly se serializují.
Princip
Stejné vrstvení podle Kahna, které odhaluje cykly, přiřazuje vlny. Konflikt rozsahu je test obsažení na deklarovaných cestách dvou úkolů ve stejné vlně, které jsou oba READY nebo ACTIVE; cesta rovná jiné, uvnitř ní nebo ji obsahující se počítá jako překryv.
Jak to vidět
majordomus plan waves
# Wave 1
# I0002 READY …
# I0003 READY …
#
# serialised by scope overlap:
# I0002 shares lib/project.awk with I0003; they may not run concurrentlyCo nepokrývá
Rozsah je to, co úkol deklaruje, ne čeho se dotýká. Dva úkoly, které oba upravují soubor, který žádný nenárokoval, budou v konfliktu a toto nenahlásí nic — stejné omezení má check.
Proč existuje
Falešná serializace stojí čas. Falešná paralelizace stojí konflikt při merge a dva workery, kteří to zjistí po dokončení práce. Konzervativní směr je ten levný.