Arbor
=====

.. image:: https://travis-ci.org/arbor-sim/arbor.svg?branch=master
    :target: https://travis-ci.org/arbor-sim/arbor

What is Arbor?
--------------

Arbor is a high-performance library for computational neuroscience simulations.

The development team is from from high-performance computing (HPC) centers:

    * Swiss National Supercomputing Center (CSCS), Jülich and BSC in work package 7.5.4 of the HBP.
    * Aim to prepare neuroscience users for new HPC architectures;

Arbor is designed from the ground up for **many core**  architectures:

    * Written in C++11 and CUDA;
    * Distributed parallelism using MPI;
    * Multithreading with TBB and C++11 threads;
    * **Open source** and **open development**;
    * Sound development practices: **unit testing**, **continuous Integration**,
      and **validation**.

Features
--------

We are actively developing `Arbor <https://github.com/arbor-sim/arbor>`_, improving performance and adding features.
Some key features include:

    * Optimized back end for CUDA
    * Optimized vector back ends for Intel (KNL, AVX, AVX2) and Arm (ARMv8-A NEON) intrinsics.
    * Asynchronous spike exchange that overlaps compute and communication.
    * Efficient sampling of voltage and current on all back ends.
    * Efficient implementation of all features on GPU.
    * Reporting of memory and energy consumption (when available on platform).
    * An API for addition of new cell types, e.g. LIF and Poisson spike generators.
    * Validation tests against numeric/analytic models and NEURON.

Citing Arbor
------------

.. |DOI-v0.1| image:: https://zenodo.org/badge/DOI/10.5281/zenodo.1459679.svg
     :target: https://doi.org/10.5281/zenodo.1459679

.. |DOI-v0.2| image:: https://zenodo.org/badge/DOI/10.5281/zenodo.2583709.svg
    :target: https://doi.org/10.5281/zenodo.2583709

Specific versions of Arbor can be cited via Zenodo:

   * v0.2:  |DOI-v0.2|
   * v0.1:  |DOI-v0.1|

The following BibTeX can be used to cite Arbor:

.. code-block:: latex

    @INPROCEEDINGS{
        paper:arbor2019,
        author={N. A. {Akar} and B. {Cumming} and V. {Karakasis} and A. {Küsters} and W. {Klijn} and A. {Peyser} and S. {Yates}},
        booktitle={2019 27th Euromicro International Conference on Parallel, Distributed and Network-Based Processing (PDP)},
        title={{Arbor --- A Morphologically-Detailed Neural Network Simulation Library for Contemporary High-Performance Computing Architectures}},
        year={2019}, month={feb}, volume={}, number={},
        pages={274--282},
        doi={10.1109/EMPDP.2019.8671560},
        ISSN={2377-5750}}

Alternative citation formats for the paper can be `downloaded here <https://ieeexplore.ieee.org/abstract/document/8671560>`_, and a preprint is available at `arXiv <https://arxiv.org/abs/1901.07454>`_.

.. toctree::
   :caption: Getting Stared:

   install

.. toctree::
   :caption: Arbor Models:

   model_intro
   model_concepts
   model_hardware
   model_recipe
   model_domdec
   model_simulation

.. toctree::
   :caption: Python:
   
   py_intro
   py_common
   py_recipe
   py_cable_cell
   py_hardware
   py_domdec
   py_simulation
   py_profiler

.. toctree::
   :caption: C++ API:

   cpp_intro
   cpp_common
   cpp_hardware
   cpp_recipe
   cpp_domdec
   cpp_simulation

.. toctree::
   :caption: Developers:

   library
   simd_api
   profiler
   sampling_api
   cpp_distributed_context
   cpp_dry_run