title: Message Passing Arbitrary Object Graphs?
body: <p>I'm looking to parallelize some code across a Beowulf cluster, such that the CPUs involved don't share address space.  I want to parallelize a function call in the outer loop.  The function calls do not have any "important" side effects (though they do use a random number generator, allocate memory, etc.).  </p>
  
  <p>I've looked at libs like MPI and the problem I see is that they seem to make it very non-trivial to pass complex object graphs between nodes.  The input to my function is a this pointer that points to a very complex object graph.  The return type of my function is another complex object graph.  </p>
  
  <p>At a language-agnostic level (I'm working in the D programming language, and I'm almost sure no canned solution is available here, but I'm willing to create one), is there a "typical" way that passing complex state across nodes is dealt with?  Ideally, I want the details of how the state is copied to be completely abstracted away and for the calls to look almost like normal function calls.  I don't care that copying this much state over a network isn't particularly efficient, as the level of parallelism in question is so coarse-grained that it probably won't matter.</p>
  
  <p>Edit:  If there is no easy way to pass complex state, then how is message passing typically used?  It seems to me like anything involving copying data over a network requires coarse grained parallelism, yet coarse grained parallelism usually requires passing complex state so that a lot of work can be done in one work unit.</p>