<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">Thanks for the link; &nbsp;my ultimate interest, though, is in an architecture that could scale to multiple machines rather than multiple cores with shared memory on a single machine. &nbsp;Has there been any interest and/or progress in making DPH run on multiple machines and other NUMA architectures?<div><br></div><div>Cheers,</div><div>Greg<br><div><br></div><div><br><div><div>On Apr 19, 2010, at 3:33 PM, Sebastian Sylvan wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><br><br><div class="gmail_quote">On Mon, Apr 19, 2010 at 11:03 PM, Gregory Crosswhite <span dir="ltr">&lt;<a href="mailto:gcross@phys.washington.edu">gcross@phys.washington.edu</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
Hey everyone,<br>
<br>
Has anyone done any work with bulk synchronous parallel computing in Haskell? &nbsp;The idea behind the model is that you divide your computation into a series of computation and communication phases, and it has recently occurred to me that this might be an ideal setup for parallelizing a pure language like Haskell because you can think of it as alternating between a stage that independently applies a bunch of functions to a bunch of independent chunks of data and a stage that applies a big function to all of the chunks that recombines them into new chunks for the next parallel phase, so that all stages are conceptually pure even if eventually the second stage is turned into something involving communication and hence side-effectful under the hood.<br>

<br>
Experiences? &nbsp;Thoughts?<br>
<br></blockquote><div><br></div><div>You may want to check out NDP, e.g. here:&nbsp;<a href="http://www.haskell.org/haskellwiki/GHC/Data_Parallel_Haskell">http://www.haskell.org/haskellwiki/GHC/Data_Parallel_Haskell</a></div>
<div><br></div><div><a href="http://www.haskell.org/haskellwiki/GHC/Data_Parallel_Haskell"></a>It's at a higher level of abstraction, in a way. You don't need to worry about the dicing up and recombining, the compiler takes care of it for you. You just write things in terms of parallel arrays (which can be small, e.g. 2 element wide) and the compiler will fuse/flatten these together into big bulk parallel computations with communication between them.&nbsp;</div>
</div><br>-- <br>Sebastian Sylvan<br>
</blockquote></div><br></div></div></body></html>