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) 
                  })
    };

For an interactive, no-install experience, you can try out our experimental Jupyter Notebook or you can play around with SaC on glot.io.

For installing the SaC eco-system, visit our download page and the docs section, find out about the research we have done and are doing in the Research section, or get in touch with our contributors, either directly by email or via our Slack Server or our mailing lists from Community section of this web-site.

We try to bring together SaC users through various platforms. Besides our Slack Server and our mailing lists we now also have a mini-blog SaCzilla in the Community section of this web-site where users can post their SaC experiences.

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. Just get in touch!