Today's parallelizing optimizing compilers have been designed for optimizing sequential programs and detecting parallelism in sequential programs. There is not that much work done on optimization of parallel source program. The standard techniques such as data-flow and dependence analysis are not sufficient to guarentee the correctness of parallel optimizations and to keep correct semantics of the original program after transformation.This project is compiling parallel programs and developing parallel optimization techniques. The goal is to fully exploit those already detected parallelism and optimizing the parallel source code for a given parallel program with compiler annotations.
As a first step, the runtime overheads of small loops, which have larger execution time in parallel than in serial, has been analyzed. The goal is to find the thresholds, which are used to select the loops with larger speedup when it runs in parallel than in serial. This covers static performance prediction, optimization ordering, scheduling, analyzing cache effects in source level, reducing runtime overheads, etc. This optimization has been implemented on Polaris parallelizing optimizing compiler.The compiler switch, strategy=3, is used for this optimization when compiling source programs.