Distributed Memory Programming

8. Key Principles

We're now going to discuss some general issues relevant to the construction of well-designed distributed applications which rely on explicit message passing for data- and control-communications. These principles are largely concerned with issues you should be focusing on as you consider the parallelization of your application:

  1. How is memory going to be used, and from where?
  2. How will the different parts of the application be coordinated?
  3. What kinds of operations can be done collectively?
  4. When should communications be blocking, and when non-blocking?
  5. What kinds of synchronization considerations need to be addressed, and when?
  6. What kinds of common problems could be encountered, and how can they be avoided?

As has been mentioned before, and as will be mentioned again:

There's no substitute for a good design ... and the worse your design, the more time you'll spending debugging it.