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.

.. toctree::
   :caption: Getting Stared:

   install

.. toctree::
   :caption: Arbor Models:

   model_intro
   model_concepts
   model_hardware
   model_recipe
   model_domdec
   model_simulation

.. toctree::
   :caption: Python:

.. 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