{{ :wall.png?nolink&600|}}
==== About SaC ====
**S**ingle-**A**ssignment **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 [[hppp|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)
})
};
==== Getting Started ====
For an interactive, no-install experience, you can try out one of our docker images available through [[https://github.com/SacBase/Docker|GitHub]] or directly on [[https://hub.docker.com/u/sacbase|DockerHub]].
Before you start, [[https://docs.docker.com/engine/install/|install Docker]] or [[https://docs.docker.com/desktop/setup/install/windows-install/|Docker desktop]] and make sure you can run the [[https://hub.docker.com/_/hello-world/|hello world]] example.
For first time users we recommend the interactive Jupyter Notebook environment.
In a terminal, run the following command start the SaC Jupyter container.
Multiple URLs will appear, open the one starting with ''127.0.0.1''.
sudo docker run -p 8888:8888 sacbase/sac-jupyter-notebook
* ''-p 8888:8888'' maps port 8888 from the host to port 8888 on the container.
Most likely you will want to access an existing notebook on your system.
You can use a [[https://docs.docker.com/engine/storage/bind-mounts/|bind mount]] for this.
Open a terminal and change directory to where your existing notebook is.
Then, run the following command.
sudo docker run --rm -p 8888:8888 -v "$(pwd):/home/jovyan/work" sacbase/sac-jupyter-notebook
* ''--rm'' removes the container once it is done running.
* ''-v'' tells Docker to mount your current working directory to `/home/jovyan/work` inside the container. 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:main|download]] page and the [[docs:main|docs]] section, find out about the research we have done and are doing in the ''Research'' section, or get in touch with our [[team| contributors]], either directly by email or via our [[slack|Slack Server]] or our [[mailing_lists|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|Slack Server]] and our [[mailing_lists|mailing lists]] we now also have a mini-blog [[saczilla|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 [[hppp|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!