on defining application-specific high-level array operations by means of shape-invariant programming facilities
Most of the existing high-level array-processing languages support a fixed set of pre-defined array operations and a few higher-order functions for constructing new array operations from existing ones. In this paper, we discuss a more general approach made feasible by S AC (for Single Assignement C), a functional variant of C.S AC provides a meta-level language construct called WITH -loop which may be considered a sophisticated variant of the FORALL -loops in H PF or of array comprehensions in functional languages. It allows for the element-wise specification of high-level operations on arrays of any dimensionality: any set of high-level array operations can be specified by means of WITH -loops and be made available in a library. This not only improves the flexibility of specifications, but also simplifies the compilation process.By means of a few examples it is shown that the high-level operations that are typically available in array processing languages such as A PL or F ORTRAN 90 can be easily specified as WITH -loops in S AC . Furthermore, we briefly outline the most important optimization techniques used in the current S AC compiler for achieving efficiently executable code.The paper finally presents a performance comparison between a high-level specification for the multigrid relaxation kernel of the NAS benchmarks in S AC on the one hand and low-level specifications in S ISAL and in F ORTRAN 77 on the other hand. It shows that the S AC implementation, despite its higher level of abstraction, is competitive with the other two both in terms of program runtimes and memory consumption.
high-level array operations arrays operability shape-invariant programming program process language support functional paper general comprehension functional languages libraries flexibility compilation examples optimality code performance performance comparison comparisons benchmark implementation abstraction competition runtime memorialized applications order invariance shape meta-level programming