views:

122

answers:

2

Hi,

I have to build a distributed application, using MPI. One of the decision that I have to take is how to map instances of classes into process (and then into machines), in order to take maximum advantages from a distributed environement.

My question is: there is a model that let me choose the better mapping? I mean, some arrangements are surely wrong (for ex., putting in two different machines two objects that should process together a fairly large amount of data, in a sequential manner, without a stream of tokens to process), but there's a sistematically way to determine such wrong arrangments, determined by flow of execution, message complexity, time taken by the computation done by the algorithmic components?

+1  A: 

Well, there are data flow diagrams. Those can help identify parallelism's opportunities and pitfalls. The references on the wikipedia page might give you some more theoretical grounding.

When I worked at Lockheed Martin, I was exposed to CSIM, a tool they developed for modeling algorithm mapping to processing blocks.

Jim Hunziker
It seems to me that data flow diagrams are best suited as a tool for software engineering, as a way to describe the flow in a parallel program, but with a weak analysis apparatus.I'll give it a more closer look, btw.
akappa
Agreed. Also, I was thinking more along the lines of flow diagrams that have synchronization barriers in them, rather than what's in that wikipedia article. I'm adding a second answer below for a different model I just remembered.
Jim Hunziker
A: 

Another thing you might try is the Join Calculus. I've found examples of programming with it to be surprisingly intuitive, and I think it's well grounded in theory. I'm not sure why it hasn't caught on more.

The other approach is the Pi Calculus, and I think that might be more popular, though it seems harder to understand.

Jim Hunziker