Es gibt auch einen Nebenbedingungsterm.
, ohne Änderungen im Code Ihre Haskell rts werden versuchen, sie für einigen internen Prozess zu verwenden, aber in Ihrer Anwendung zu verwenden, sollten Sie einen Hinweis geben, die von par b (f a b)
getan, die Haskell zwingt nicht so faul zu sein auf caculation von b
sogar wenn f
es nicht für das Ergebnis benötigt.
Einer der Gründe, dies nicht für jede Funktion zu tun, die alle ihre Argumente benötigt (wie a+b
) ist, dass die Synchronisation (Terminierung Berechnungen und Warten auf Ergebnisse) gibt einige Overhead und Sie wahrscheinlich nicht extra ausgeben wollen Ticks für (2*3)+(3*4)
, nur weil Sie Multiplikationen parallel berechnen können. Und Sie werden wahrscheinlich einige Cache-Hits oder etwas Ähnliches oder Optimierungen verlieren, wenn Sie dies auf einem einzelnen Prozessor tun (d. H. Sie müssen das Ergebnis ohnehin von einem Prozessor zum anderen weitergeben).
Natürlich Code, der par
verwendet, ist hässlich und wenn Sie Liste oder einige andere Datenstrukturen mit leichten Unterelementen falten, werden Sie wahrscheinlich einige Brocken dieser hellen Elemente berechnen wollen, um sicherzustellen, dass overhead/calc sein wird wirklich klein. Um das zu beheben, können Sie parallel betrachten.
Es gibt auch Data Parallel Haskell (DPH).
Wenn Ihr Programm mehr über IO Monade ist, als Sie definitiv viele Änderungen benötigen. Siehe forkIO
, Software Transactional Memory (STM) und viele andere aus Concurrency category
Ich glaube * Parallele und gleichzeitige Programmierung in Haskell * von Simon Marlow wird allgemein als die beste Einführung in dieses Thema angesehen. –