Support and optimization for parallel sparse programs with array intrinsics of Fortran 90
Fortran 90 provides a rich set of array intrinsic functions that are useful for representing array expressions and data parallel programming. However, the application of these intrinsic functions to sparse data sets in distributed memory environments, is currently not supported by vendors of Fortran 90 and HPF compilers. Our recent research work has been aimed at, providing parallel processing supports for sparse array intrinsics of Fortran 90. Our supporting library uses the following two-level design: (1) in our low-level routines, a sparse input matrix needs to be specified with compression/distribution schemes by programmers, and (2) in the high-level representation, sparse array functions are overloaded for array intrinsic interfaces so that programmers need not be concerned about low-level details. This raises a very interesting optimization problem in the strategies used to transform high-level representations to low-level routines by the automatic selection of distribution and compression schemes for sparse data sets. In this paper, we propose solutions to address this optimization problem, which is shown to be NP-hard. We develop a heuristic algorithm based on annotated program graphs. To the best of our knowledge, our selection scheme, is the first to automatically select compression and distribution schemes for sparse data arrays with the array intrinsics of Fortran 90 in a distributed memory environment. Experimental results show that our selection algorithms are consistent with our cost model, and effective in selecting appropriate compression and distribution schemes for improving the performance of application programs that operate on sparse data sets. Our experiments were performed on an IBM SP-2 machine using our parallel sparse array intrinsics for Fortran 90. (C) 2004 Published by Elsevier B.V.
data parallel programming parallel sparse compiler fortran 90 array intrinsics distributed environments optimizing compilers sparse computations