2012 | OriginalPaper | Buchkapitel
Single Assignment C (SAC) High Productivity Meets High Performance
verfasst von : Clemens Grelck
Erschienen in: Central European Functional Programming School
Verlag: Springer Berlin Heidelberg
Aktivieren Sie unsere intelligente Suche, um passende Fachinhalte oder Patente zu finden.
Wählen Sie Textabschnitte aus um mit Künstlicher Intelligenz passenden Patente zu finden. powered by
Markieren Sie Textabschnitte, um KI-gestützt weitere passende Inhalte zu finden. powered by
We present the ins and outs of the purely functional, data parallel programming language
SaC
(Single Assignment C).
SaC
defines state- and side-effect-free semantics on top of a syntax resembling that of imperative languages like C/C++/C# or Java: functional programming with curly brackets. In contrast to other functional languages data aggregation in
SaC
is not based on lists and trees, but puts stateless arrays into the focus.
SaC
implements an abstract calculus of truly multidimensional arrays that is adopted from interpreted array languages like
Apl
. Arrays are abstract values with certain structural properties. They are treated in a holistic way, not as loose collections of data cells or indexed memory address ranges. Programs can and should be written in a mostly index-free style. Functions consume array values as arguments and produce array values as results. The array type system of
SaC
allows such functions to abstract not only from the size of vectors or matrices but likewise from the number of array dimensions, supporting a highly generic programming style.
The design of
SaC
aims at reconciling high productivity in software engineering of compute-intensive applications with high performance in program execution on modern multi- and many-core computing systems. While
SaC
competes with other functional and declarative languages on the productivity aspect, it competes with hand-parallelised C and Fortran code on the performance aspect. We achieve our goal through stringent co-design of programming language and compilation technology.
The focus on arrays in general and the abstract view of arrays in particular combined with a functional state-free semantics are key ingredients in the design of
SaC
. In conjunction they allow for far-reaching program transformations and fully compiler-directed parallelisation. From literally the same source code
SaC
currently supports symmetric multi-socket, multi-core, hyperthreaded server systems, CUDA-enables graphics accelerators and the MicroGrid, an innovative general-purpose many-core architecture.
The CEFP lecture provides an introduction into the language design of
SaC
, followed by an illustration of how these concepts can be harnessed to write highly abstract, reusable and elegant code. We conclude with outlining the major compiler technologies for achieving runtime performance levels that are competitive with low-level machine-oriented programming environments.