Sat 13 Jun 2015 17:00 - 17:30 at C122 - Paper Session 4 Chair(s): David Grove

Programming with abstract, mathematical expressions offers significant benefits to users, including terser programs, easier communication of algorithms, ability to prove theorems about algorithms, and improved programming productivity. It is commonly believed that higher levels of abstraction imply a larger semantic gap between the user and computer and, therefore, typically slower execution, be it sequential or parallel in nature. In recent years, it has been demonstrated that domain-specific languages can close this gap by means of sophisticated optimizations that benefit from domain-specific knowledge.

In this paper, we demonstrate that the semantic gap can be closed for non-domain-specific array languages, without requiring the embedding of language-specific semantic knowledge into the compiler tool chain. We present a simple example of an APL-style \sac\ program that is compiled into C-code that outperforms the equivalent C program, in both sequential and parallel (OpenMP) environments.

We give some insights into abstract expressionism in programming by comparing the characteristics and performance of a numerical relaxation benchmark written in C99, C99 with OpenMP directives, scheduling code, and pragmas, and in \sac, a functional array language. We compare three algorithmic styles: if/then/else, hand-optimized loop splitting, and an abstract, functional style that has its roots in APL.

We show that all of our serial \sac\ algorithms outperform serial C, and that the hand-optimized and abstract styles outperform serial C by a factor of nearly two. Furthermore, the parallel \sac\ variants outperform the OpenMP C programs by a factor of two, without requiring {\em any} source code modifications.

Sat 13 Jun

Displayed time zone: Tijuana, Baja California change