A++/P++ array classes for architecture independent finite difference computations

Array class libraries have the potential to support development of a broad class of scientific computations. The high level array syntax coupled with machine dependent internal routines simplifies the structure of scientific codes and hides the details of particular machine architectures. Unfortunately, array class libraries generally suffer from recurring performance problems, making their use on high performance computers difficult to justify. In this paper, we discuss these performance issues for array class libraries and propose optimizations within A++/P++ to address them. Deferred evaluation in A++/P++ provides the information required for these optimizations. We present performance results on example finite difference computations which show that these performance problems can be overcome within array class libraries. The optimizations are equally applicable to more general scientific computations, thus establishing array class libraries as a viable program development strategy for scientific codes.