About SaC
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:
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) }) };
Getting Started
For an interactive, no-install experience, you can try out our one of our docker images available through GitHub or directly on DockerHub.
For first time users we recommend the interactive Jupyter Notebook environment. In a terminal, run the following command start the SaC Jupyter container.
docker run -p 8888:8888 sacbase/sac-jupyter-notebook
-p 8888:8888maps port 8888 from the host to port 8888 on the container.
To access an existing notebook on your system, you can use a bind mount. Open a terminal and change directory to where your existing notebook is. Then, run the following command.
docker run --rm -p 8888:8888 -v "$(pwd):/home/jovyan/work" sacbase/sac-jupyter-notebook
–rmremoves the container once it is done running.-vtells Docker to mount your current working directory to `/home/jovyan/work` inside the container. By default, the Jupyter image's root directory is `/home/jovyan` and you can only access or save notebooks to that directory in the container.
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.
SaC User Fora
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.
Collaboration
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!