Single-Assignment C is an array programming language predominantly suited for application areas such as numerically intensive applications and signal processing. Its distinctive feature is that it combines high-level program specifications with runtime efficiency similar to that of hand-optimized low-level specifications. Key to the optimization process that facilitates these runtimes is the underlying functional model which also constitutes the basis for implicit parallelisation. This makes SAC ideally suited for harnessing the full potential of a wide variety of modern architectures ranging from a few symmetric cores with shared memory to massively parallel systems that host heterogeneous components including GPUs and FPGAs.

The overall philosophy of the project is to combine high performance, high productivity and high portability under the hood of one compiler: Being able to write a program, or at least the compute intensive part of a program in a high-level style, quickly and leaving a compiler to figure out the details of the underlying architecture and details of the code transformation, leads to performance competitiveness with hand-optimised low-level codes. This vision drives a number of research activities around SaC.

To give you a little taste and feel of SaC, here an example on how the all pair N-body problem can be almost literally transliterated from its mathematical formulation into a valid SaC program:

\begin{eqnarray} \overset{\tiny k+1}{p_i} &=& \overset{k}{p_i} + \overset{k}{v_i} dt \\ \overset{k+1}{v_i} &=& \overset{k}{v_i} + \overset{k}{a_i} dt \\ \overset{k+1}{a_i} &=& \sum\limits_{j \neq i}^{n} \dfrac{m_j (\overset{k+1}{p_j} - \overset{k+1}{p_i})} {\left|\overset{k+1}{p_j} - \overset{k+1}{p_i} \right|^3} \end{eqnarray}

p = p + v * dt;
v = v + a * dt;
a = {[i] -> vsum ({[j] -> (i == j  ? [0.0, 0.0, 0.0]
: m[j] * (p[j] - p[i])
/ (l2norm (p[j] - p[i]) ^ 3)
})
};

We are interested in research as well as in applications that can feed into our vision of high performance, high productivity and high portability. We are open for collaboration and contributions on various levels, be it academically or commercially motivated.

Visit our download page and the docs section for getting started, find out about the research we have done and are doing in the Research section, or get in touch with our contributors, either directly or via our mailing lists from Community section of this web-site.