The goal of this research is to ease the burden of programming high-performance parallel computers. The project investigates several key issues in this regard: (a) the design of language extensions or new languages for machine-independent parallel programming; (b) algorithms for automatic code and data mapping (both static and dynamic) for scientific programs; (c) code generation, and optimization techniques for locality, inter-processor communication etc.; (d) analysis and optimization of unstructured computations such as those arising in fluid dynamics codes; (e) runtime compilation of irregular sparse matrix codes that exploits both parallelism and data locality; (f) interprocedural analysis and optimization; (g) integration of task and data parallelism; and (h) high-performance input and output.