ok, nepochopili sme sa, tak rozvediem:
nech a(), b(), c(), d(), e() su politicky korektne funkcie, ktore nemenia, ani nezohladnuju globalny kontext.
a nech sa v programe nachadza volanie:
a( b( d() + e()), c( d() – e()))
ked sa to evaluje zvonku dnu, zacne sa pri a
, kde sa zisti, ze su 2 argumenty nezavisle na globalnom kontexte, takze az je toho runtime a hardware efektivne schopny*, moze ich evaluaciu vykonat paralelne.
zacne sa paralelna evaluacia volani b
a c
, kde sa dokonca da optimalizovat tym, ze sa hodnota d
a e
spocita len raz (v kazdom vlakne len jedna) a hodnota sa potom distribuuje. v takom pripade moze vlakno pre evaluaciu b
pocitat trebars d
, vlakno pre evaluaciu c
zasa e
.
naproti tomu a( b( c( d( e())))) sa paralelizovat neda.
* – a tym nemyslim x86 SMP