1. Examine the initial and final data structures of the algorithm. (Also any intermediate data structures.)
2. Determine the substructures to which the operations of the algorithm can be applied.
3. Construct partitions of the original data structure which conform to the operations of the desired granularity.
4. Assign these substructures to units of computations representing the operations of the algorithm.
5. Determine the synchronization and communication requirements both within an operation and between operations given the data partitioning. Express the resulting parallel computation structure in terms of an appropriate model of parallel computation.
6. Construct a generalized dependence graph for the algorithm and choose a language in which to represent the graph.