Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Bit more on Spack, fix in tutorial #1838

Merged
merged 4 commits into from
Mar 16, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 30 additions & 3 deletions doc/install/spack.rst
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,36 @@
Spack Installation
===================

`Spack <https://spack.io>`_ is a package manager for supercomputers, Linux, and macOS. It makes installing scientific software easy. Spack isn’t tied to a particular language; you can build a software stack in Python or R, link to libraries written in C, C++, or Fortran, and easily swap compilers or target specific microarchitectures.
Install Arbor
-------------

To install Arbor using Spack, run ``spack install arbor``.

.. Note::
To get help in case of problems, please make an issue at `Arbor's issues page <https://github.com/arbor-sim/arbor/issues>`_.
Build Options
-------------

Arbor can be built with various options, just like the regular CMake build. For instance, to have Spack build Arbor with MPI enabled, run ``spack install arbor +mpi``. For a full overview of the build options, please refer to the `our Spack package.yml <https://github.com/arbor-sim/arbor/blob/master/spack/package.py>`_.

Why use Spack?
--------------

`Spack <https://spack.io>`_ is a package manager for supercomputers, Linux, and macOS. It makes installing scientific software easy. Spack isn’t tied to a particular language; you can build a software stack in Python or R, link to libraries written in C, C++, or Fortran, and easily swap compilers or target specific microarchitectures.

A powerful feature for users of scientific software is Spack's `Environment feature <https://spack.readthedocs.io/en/latest/environments.html>`_. One can define and store software environments for reuse, to generate container images or reproduce and rerun software workflows at a later time.

Issues when using Spack
-----------------------

On some systems initial Spack setup requires an extra step currently not shown in the up-front installations instructions of the `Spack documentation <https://spack.readthedocs.io>`_, which is adding the compilers on your system to Spack's configuration. If you don't, you may get this error:

.. code-block:: bash

No satisfying compiler available is compatible with a satisfying os

The solution is to run (`as described further down in the official documentation <https://spack.readthedocs.io/en/latest/getting_started.html#compiler-configuration>`_):

.. code-block:: bash

./spack compiler add

To get help in case of problems, please make an issue at `Arbor's issues page <https://github.com/arbor-sim/arbor/issues>`_.
13 changes: 6 additions & 7 deletions doc/tutorial/network_ring.rst
Original file line number Diff line number Diff line change
Expand Up @@ -73,8 +73,7 @@ The recipe is where the different cells and the :ref:`connections <interconnecti

Step **(5)** shows a class definition for a recipe with multiple cells. Instantiating the class requires the desired
number of cells as input. Compared to the :ref:`simple cell recipe <tutorialsinglecellrecipe>`, the main differences
are connecting the cells **(8)**, returning a configurable number of cells **(6)** and returning a new cell per ``gid`` **(7)**
(``make_cable_cell()`` returns the cell above).
are connecting the cells **(8)**, returning a configurable number of cells **(6)** and returning a new cell per ``gid`` **(7)**.

Step **(8)** creates an :py:class:`arbor.connection` between consecutive cells. If a cell has gid ``gid``, the
previous cell has a gid ``(gid-1)%self.ncells``. The connection has a weight of 0.01 (inducing a conductance of 0.01 μS
Expand Down Expand Up @@ -108,7 +107,7 @@ Step **(11)** instantiates the recipe with 4 cells.

.. literalinclude:: ../../python/example/network_ring.py
:language: python
:lines: 61-111
:lines: 61-110

The execution
*************
Expand Down Expand Up @@ -136,7 +135,7 @@ Step **(15)** executes the simulation for a duration of 100 ms.

.. literalinclude:: ../../python/example/network_ring.py
:language: python
:lines: 113-126
:lines: 111-125

The results
***********
Expand All @@ -145,7 +144,7 @@ Step **(16)** prints the timestamps of the spikes:

.. literalinclude:: ../../python/example/network_ring.py
:language: python
:lines: 128-131
:lines: 126-131

Step **(17)** generates a plot of the sampling data.
:py:func:`arbor.simulation.samples` takes a ``handle`` of the probe we wish to examine. It returns a list
Expand All @@ -157,7 +156,7 @@ It could have described a :term:`locset`.)

.. literalinclude:: ../../python/example/network_ring.py
:language: python
:lines: 133-141
:lines: 133-

Since we have created ``ncells`` cells, we have ``ncells`` traces. We should be seeing phase shifted traces, as the action potential propagated through the network.

Expand All @@ -170,4 +169,4 @@ We plot the results using pandas and seaborn:
The full code
*************

You can find the full code of the example at ``python/examples/network_ring.py``.
You can find the full code of the example at ``python/example/network_ring.py``.