Hlavní navigace

Názor k článku Programovací jazyk LISP a LISP machines od Eduard Drusa - ok, nepochopili sme sa, tak rozvediem: nech a(), b(),...

  • 29. 3. 2010 8:16

    ventYl

    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