In here we propose a programming methodology for developing efficient parallel programs. We basically advocate the idea that the parallel program is obtained from its sequential version by a sequence of gradual changes as follows:
Most of the developing stages are made sequentially and in gradual stages.
Each stage can be debugged sequentially, such that many bugs are found and removed before the parallel program is tested. Clearly, debugging a parallel program is harder than a sequential one, due to the fact that for a parallel program all possible execution orders must be tested.
Dependence analysis of the sequential program can reveal potential ways to invoke more parallelism to the desired parallel program.