2 Planning for parallel

 

This chapter covers

  • Planning steps for a new parallel project
  • Version control and team development workflows
  • A workflow for turning serial applications into parallel applications
  • Understanding the performance capabilities and limits of your compute resources and your application
  • How to develop a plan to parallelize a routine based on its unique characteristics within your whole application.

Developing a parallel application, or making an existing application run in parallel, can feel challenging at first. Most often, new parallel developers are unsure of where to begin and what pitfalls they may encounter. This chapter focuses on a workflow model for developing parallel applications, illustrated in figure 2.1. This model provides the context for describing where to get started and how to maintain progress in developing your parallel application. Generally, it is best to implement parallelization in many small increments so that if problems are encountered, the last few commits can be reversed. This kind of pattern is very suited to agile project management techniques.

Figure 2.1 Our suggested parallel development workflow begins with preparing the application and then repeated iterations of four steps to incrementally parallelize an application. This workflow is particularly suited to an agile project management technique.

2.1      Approaching a new project: the preparation

2.1.1   Version Control: creating a safety vault for your parallel code

2.1.2   Test Suites: the first step to creating a robust, reliable application

2.1.3   Finding and fixing memory issues

2.1.4   Improving code portability

2.2      Profiling step: probing the gap between system capabilities and application performance

2.3      Planning step: a foundation for success

2.3.1   Exploring with benchmarks and mini-apps

2.3.2   Design of the core data structures and code modularity

2.3.3   Algorithms: redesign for parallel

2.4      Implementation step: where it all happens

2.5      Commit Step: wrapping it up with quality

2.6      Further explorations

2.6.1   Additional reading

sitemap