Skip to content
Snippets Groups Projects
  1. Feb 27, 2019
    • Benjamin Cumming's avatar
      Documentation: update install guide. (#699) · 49d87aba
      Benjamin Cumming authored
      Update the installation guide to reflect the latest supported tool,
      compiler and library versions.
      
      Remove the Python docs, because they documented features that have not
      been implemented yet. The Python docs can be added incrementally as
      features are implemented.
      
      Start work on oupdating the documenetation for hardware interfaces and
      domain decomposition.
      49d87aba
  2. Feb 26, 2019
    • noraabiakar's avatar
      Neon simd backend (#698) · 8d34e100
      noraabiakar authored and Sam Yates's avatar Sam Yates committed
      * Add SIMD neon implementation for aarch64.
      * Update unit tests to suit.
      8d34e100
    • noraabiakar's avatar
      Coalescing linear synapses (#680) · bfc6f593
      noraabiakar authored and Sam Yates's avatar Sam Yates committed
      Allow distinct point processes with the same linear dynamics to be combined if they reside in the same CV after discretization.
      
      * Add `linear` flag to `mechinfo` struct.
      * Add a linearity test to `modcc` that determines if a point process is a suitable candidate for coalescing: state and current updates must be linear, homogeneous functions of the state variables; state change on an event arrival (`net_receive`) must be independent of current state values.
      * Add `mechanism_state_table()` inquiry function to backend mechanism interface.
      * Add a field `multiplicity` to `fvm_mechanism_config` that accounts for merged synapse instances, and a corresponding `multiplicity` field in `mechanism::layout`.
      * Merge linear synapses of the same type  in `fvm_build_mechanism_data` if they have the same parameters.
      * Add global mc_cell property `coalesce_synapses` which enables or disables the merging of linear synapses at run time.
      * Rename virtual `nrn_init()` interface funct...
      bfc6f593
    • akuesters's avatar
      Python Documentation PR (#687) · fa7ea458
      akuesters authored and Benjamin Cumming's avatar Benjamin Cumming committed
      Update documentation for Python.
      
          splits the conceptual model ideas from the C++ docs into their own section
          has C++ and Python docs for recipes, domain decomposition, etc.
      
      fixes #667
      
      Added the following documentation (structure):
      
      GETTING STARTED:
      
          Installing Arbor/Requirements/Optional Requirements/Python
          Installing Arbor/Building and Installing Arbor/Python Front End
      
      MODEL BASICS:
      
          Overview
          Common Types
          Recipes
          Domain Decomposition
          Simulations
      
      PYTHON:
      
          Overview
          Common Types
          Recipes
          Domain Decomposition
          Simulations
      
      DEVELOPERS:
      
          Python Profiler
          Python Unit Testing
      
      GETTING STARTED has two added sections of optional requirements using python and how to build the python front end.
      
      MODEL BASICS describes Arbor's concepts in general (independent of programming language), thus general information on concepts in C++ API was moved here/ added.
      
      PYTHON describes Arbor's python frontend in the same structure as MODEL BASICS and C++ API ( needs updates as soon as features are added/changed in new python PR).
      
      DEVELOPERS section has two added sections for meter management and unit testing with python front end.
      
      Further, some corrections in existing documentation (for obvious errors, e.g. duplicate text, not ending sentences) and referencing sections were done.
      fa7ea458
    • akuesters's avatar
      Python PR #667 (#668) · fa549238
      akuesters authored and Benjamin Cumming's avatar Benjamin Cumming committed
      First step towards the Python front end.
      
      This commit sets up the structure of the python implementation
      * directory structure
      * git submodule for pybind11
      * best practices for making bindings with pybind11
      * unit testing for the python front end
      
      It implements the following features in the Python front end
      * execution contexts
      * gpu detection
      * thread count detection
      * MPI initialization helpers.
      
      Fixes #667.
      fa549238
  3. Feb 25, 2019
  4. Feb 18, 2019
    • noraabiakar's avatar
      Integrate over integration-domains instead of cells in the lowered/back-end implementation (#688) · 7b0b69f3
      noraabiakar authored and Sam Yates's avatar Sam Yates committed
      Fixes #683.
      
      * Distinguish between per-cell matrix solver and per-'integration domain' state in the FVM back-end, adding new index for FVM back-ends mapping CVs to integration domain index.
      * Move to one event queue per integration domain, avoiding extra logic for synchronisation of times across gap-junction connected cells. This requires a merging of event lanes in `mc_cell_group` when constructing the staged events in the multi-event queue.
      * Add synapses to gap junction example.
      7b0b69f3
  5. Feb 06, 2019
    • Sam Yates's avatar
      43d5ce05
    • noraabiakar's avatar
      Explicit Gap Junctions (#661) · 2dc9520e
      noraabiakar authored and Sam Yates's avatar Sam Yates committed
      Add support for gap junctions in mc_cells, modelled as a conductance between 2 cell CVs. Gap junctions act as additional current sources on the CVs, as opposed to participating in the implicit voltage integration step.
      
      Cells connected via gap junctions must be in the same cell group as determined by the provided domain decomposition.
      
      * Extend `mc_cell` to hold a list of gap junction locations.
      * Add `num_gap_junction_sites()` and `gap_junctions_on()` methods to the `recipe` interface.
      * Add `gather_gids()` collective operation to distributed context interface and implementations.
      * Extend `partition_load_balance()` functionality to ensure that cells connected by gap junctions are put in the same groups.
      * Permute cells within `mc_cell_group` so that cells connected by gap junctions are contiguous.
      * Add gap junction information to `multicore::shared_state` and `gpu::shared_state`, together with `add_gj_current()` method that computes GJ current contributions.
      * Ad...
      2dc9520e
  6. Feb 05, 2019
  7. Feb 04, 2019
    • Sam Yates's avatar
      Add fallback implementation of glob for platforms without it. (#660) · b11d2d14
      Sam Yates authored
      Implement a basic glob routine, supporting a subset of POSIX behaviour (e.g. no character classes), as a fallback for platforms such as Android which do not include it in their libc.
      
      * Add CMake configuration option `ARB_USE_POSIX_GLOB`, defaults to `ON`, that determines if the fallback implementation is used or not.
      * Extend `sup::path` functionality to add directory iterators and a couple more path manipulation routines, again following the C++17 `std::filesystem` interface.
      * Add an NFA pattern matcher `glob_basic_match` and file system `glob_basic` function; the latter is abstracted over a file system provider object, primarily for testing/mocking purposes.
      * Add unit tests for new `sup::path` functionality and for `glob_basic`.
      
      FIxes #181.
      b11d2d14
  8. Feb 01, 2019
    • Sam Yates's avatar
      Feature/expunge spike emitter (#682) · 4dc40c58
      Sam Yates authored and Benjamin Cumming's avatar Benjamin Cumming committed
      Remove `sup::spike_emitter` and replace usages in `miniapp` and `brunel-miniapp`.
      
      * Replaces instances of `spike_emitter` in `miniapp` and `brunel-miniapp` with a callback that saves spikes to a vector and which is written to a file after the simulation ends.
      * Remove unused fields from `cl_options` in `brunel-miniapp`, including spike output file components.
      * Hard code spike output path to `spikes.gdf` in `brunel-miniapp` and write saved spikes after simulation end.
      * Correctly set 'rank' in `miniapp` (used in spike output paths).
      * Read spike output options from JSON config in `miniapp` unconditionally.
      * Make line comments in `miniapp` and `brunel-miniapp` main functions a bit more consistent in
      formatting.
      
      Fixes #677.
      4dc40c58
  9. Jan 31, 2019
    • Sam Yates's avatar
      Split out 'arborenv' as an installable library from the sup library. (#679) · f4b2e034
      Sam Yates authored and Benjamin Cumming's avatar Benjamin Cumming committed
      Make a new installed library `libarborenv.a` covering a subset of the `sup` library functionality, with corresponding installed CMake target `arbor::arborenv`.
      
      * Move NVML or CUDA 10 API decision for GPU UUID discovery to top level CMake.
      * Move affinity, concurrency, MPI init guard, and gpu detection and negotiation functionality out of `sup` and into new library `arborenv`.
      * Move `include/arbor` in project tree to `arbor/include/arbor` (for consistency across `sup`, `arbor`, and `arborenv` subdirectories.)
      * Wrangle more explicit library dependency adding CMake code into the installed `arbor-config.cmake`, to help mitigate [CMake issue #18614](https://gitlab.kitware.com/cmake/cmake/issues/18614).
      * Have `arborenv` code throw `std::runtime_exception` instead of `arb::arbor_error`. (We are still using `arb::mpi_error` though for a failure in `with_mpi`.)
      * Move `scope_exit` into the `arb::util` namespace.
      * Merge `affinity.hpp` into `concurrency.hpp`.
      * Rename `gpu.hpp` to `gpu_env.hpp` in `arborenv` includes.
      
      Fixes #647.
      f4b2e034
  10. Jan 22, 2019
    • Benjamin Cumming's avatar
      Output accumulated meter values in meter printer (#672) · 64e3d18e
      Benjamin Cumming authored
      * Print a `meter-total` value of the accumulated meter values across all checkpoints to the meter `ostream` output.
      * Add default behavior that prints the mean of a meter across all ranks if the meter type is not one of the known special cases (i.e. not one of time, memory or energy).
      
      Fixes #671
      64e3d18e
    • Sam Yates's avatar
      Bugfix: SIMD indirect unit tests + indirect add (#674) · f824112b
      Sam Yates authored
      * Fix bug in optimized (scalar) unconstrained indirect addition.
      * Fix bug in indirect arithmetic and scatter tests that tested only a subset of the test data.
      f824112b
  11. Jan 18, 2019
  12. Jan 14, 2019
  13. Dec 18, 2018
  14. Dec 17, 2018
    • noraabiakar's avatar
      Assertion fix (#663) · 6db581c1
      noraabiakar authored and Sam Yates's avatar Sam Yates committed
      Events arrive already sorted first by index then by time. 
      * Remove sort by event index.
      * Replace assertion that events are sorted by time with assertion that they are sorted by index. Assertion that the subrange of events with the same index is sorted by time already exists.
      6db581c1
  15. Dec 05, 2018
    • Benjamin Cumming's avatar
      Refactor hardware detection to sup (#654) · 712070f1
      Benjamin Cumming authored and Sam Yates's avatar Sam Yates committed
      Refactoring that moves the logic for determining available concurrency and available GPUs from the core Arbor library to the sup library. This also constitutes work towards providing functionality for allocating GPUs to particular ranks when multiple GPUs are visible per rank.
      
      * Move core/thread estimation code to sup library.
      * Change default resource behaviour to use one thread and no GPU.
      * Provide an interface in the sup library for: acquiring a default GPU; for coordinating an allocation of GPUs across multiple MPI ranks.
      712070f1
  16. Nov 29, 2018
    • Benjamin Cumming's avatar
      Fix thread-GPU affinity bug. (#656) · 5e3865cf
      Benjamin Cumming authored
      Ensure that all threads use the same GPU, which wasn't the case before.
      
      * add `gpu_context::set_gpu()` method that will set all subsequent GPU calls from the calling thread run on the GPU of `gpu_context`.
      * `fvm_lowered_cell_impl` now calls the `set_gpu` method on construction and `advance`.
      * Also changed GPU memory allocation errors in `arb::memory` to throw `arb_exception` instead of calling `std::terminate` on error. Now errors due to poor GPU configuration can be caught by the calling application, and unit tests fail gracefully and allow other tests to run.
      
      Fixes #655 
      5e3865cf
  17. Nov 27, 2018
    • Sam Yates's avatar
      Workaround for CMake 3.12 bug passing -thread to nvcc (#649) · af15856d
      Sam Yates authored and Benjamin Cumming's avatar Benjamin Cumming committed
      CMake wants to run a device link pass with nvcc despite
      there being no CUDA seperable compilation enabled anywhere,
      and then passes on -pthread to that unnecessary nvcc
      invocation when we use the Threads dependency. The latter,
      at least, is fixed in CMake 3.13.
      
      We used the prefer -pthread option for compatibility with
      our earlier build configuration; turning it off will
      hopefully have no consequence.
      
      We also enable device linking on the arbor library. Which
      is not needed, but if they are going to insist on doing it,
      it should be on the library rather than the executable.
      
      CMake then goes and does it on the executable anyway. Great.
      
      Fixes #645.
      af15856d
  18. Nov 21, 2018
  19. Nov 13, 2018
    • Felix Huber's avatar
      squashed merge for fine matrix solver · 0b7f88ca
      Felix Huber authored and Benjamin Cumming's avatar Benjamin Cumming committed
      0b7f88ca
    • Sam Yates's avatar
      Revert "Squashed merge for fine matrix solver (#640)" · 67b70a80
      Sam Yates authored and Benjamin Cumming's avatar Benjamin Cumming committed
      This reverts commit be2a8a9f.
      67b70a80
    • Benjamin Cumming's avatar
      Squashed merge for fine matrix solver (#640) · be2a8a9f
      Benjamin Cumming authored and Sam Yates's avatar Sam Yates committed
      Add a new Hines matrix solver implementation for the GPU that can solve a single tree in parallel with multiple threads. It replaces the interleaved solver, which used a single thread to solve each matrix.
      Branches with the same common root in the tree can be solved independently on each of the forward and backward solution passes. 
      
      * Add a matrix storage type, `arb::gpu::matrix_state_fine` that stores the branches of multiple trees for efficient backward and forward substitution.
      * Extend the `arb::tree` data structure to support operations for choosing a new root node and determining a root node which minimises the maximum distance between the root and any of the trees leaves. 
      * Implement code for rebalancing a set of matrix trees, a.k.a. a "forest" of trees.
      * Add CUDA kernels for efficiently performing matrix assembly and matrix solution steps.
      * Add CMake option `ARB_WITH_GPU_FINE_MATRIX` for toggling the new solver (default `on`).
      be2a8a9f
  20. Oct 16, 2018
  21. Oct 15, 2018
  22. Oct 12, 2018
  23. Oct 11, 2018
  24. Oct 10, 2018
    • Sam Yates's avatar
      Add installable CMake config for arbor (#616) · 7ade5c26
      Sam Yates authored and Benjamin Cumming's avatar Benjamin Cumming committed
      Fixes #612.
      
      * Fix issues with permissions on directories created at install time (at least for CMake 3.11+).
      * Add CMake export guff to various targets and install an `arbor-config.cmake` for consumption by other CMake-based projects.
      7ade5c26
  25. Oct 04, 2018
    • Benjamin Cumming's avatar
      Extend ring (#611) · 488ece0c
      Benjamin Cumming authored
      Extend the ring benchmark to have an optional number of synapses attached to each cell, instead of a fixed count of one synapse per cell.
      This doesn't change the behavior of the model: only the first synapse is used for communication. The other synapses only effect is to
      increase the per-cell computational overheads, to more effectively mimic real world performance.
      488ece0c
  26. Oct 03, 2018
  27. Oct 01, 2018