{{ :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!