Breaking Problems Apart:

The Art of Designing Parallel Algorithms