Automatic Parallelization of Recursive Procedures

        Parallelizing compilers have traditionally focussed mainly on parallelizing loops. This paper presents a new framework for automatically parallelizing recursive procedures that typically appear in divide-and-conquer style algorithms. We present compile-time analysis to detect the independence of multiple recursive calls in a procedure. This allows exploitation of a scalable form of nested parallelism, where each parallel task can further spawn off parallel work in subsequent recursive calls. We describe a run-time system which efficiently supports this kind of nested parallelism without unnecessarily blocking tasks, and facilitates load-balancing. We have implemented this framework in a parallelizing compiler for C and Fortran 90. We believe it is the first compiler which is able to automatically parallelize programs like quicksort and mergesort. For cases where even the advanced symbolic analysis and array section analysis we describe are not able to prove the independence of procedure calls, we propose novel techniques for speculative run-time parallelization, which are significantly more parallel and powerful than analogous techniques proposed previously for speculatively parallelizing loops. Our experimental results on an IBM G30 SMP machine show good speedups obtained by following our approach.

By: Manish Gupta, Sayak Mukhopadhyay, Navin Sinha

Published in: International Journal of Parallel Programming, volume 28, (no 6), pages 537-62 in 2000

Please obtain a copy of this paper from your local library. IBM cannot distribute this paper externally.

Questions about this service can be mailed to reports@us.ibm.com .