Skip to content
Snippets Groups Projects
  1. Feb 23, 2023
  2. Feb 08, 2023
    • Thorsten Hater's avatar
      🧹 Re-factor FVM lowered cell implementation and shared state (#2082) · 543331f9
      Thorsten Hater authored
      This is a clean-up operation on `fvm_lowered_cell_impl.hpp` and `{cpu,
      gpu}/shared_state.{hpp, cpp}`.
      
      - Get rid of `shared_state` specifics in `fvm_lowered_cell_impl` and
      push these down to `shared_state`
      - Present more of an interface layer towards `fvm_lowered_cell` from
      `shared_state`
      - De-duplicate methods across CPU/GPU implementations by adding
      `shared_state_base`
      - Align interfaces of GPU/CPU solvers.
      543331f9
  3. Feb 07, 2023
  4. Feb 02, 2023
    • Thorsten Hater's avatar
      Silence flake8 and appease black. (#2086) · 6a183973
      Thorsten Hater authored
      New versions, new warnings. Begone.
      6a183973
    • Thorsten Hater's avatar
      :octopus: Optimise PPACK (#2067) · 8087cb86
      Thorsten Hater authored
      - pointers in `PPACK_IFACE_BLOCK` will be `__restrict__`
        - this is expected to produce better binary code for the _scalar_ case
      - for GPU we expect this to better utilise data caches as per CUDA docs
      - `ved_di` is not used anymore, gone and ABI bumped
      - GPU code never used the indexing structs, so remove from
      `PPACK_IFACE_BLOCK`
      8087cb86
  5. Jan 26, 2023
  6. Jan 25, 2023
  7. Jan 17, 2023
  8. Jan 12, 2023
    • Thorsten Hater's avatar
      :bar_chart: Make profiler output a bit nicer. (#2078) · eee16c78
      Thorsten Hater authored
      - Profiler output is now correctly aligned regardless of widths.
      - Python (and C++) can now actually set a limit on the nodes printed.
      
      After (with a >=4% filter):
      ```
      REGION                                  CALLS     WALL    THREAD        %
      root                                        -    9.401    75.205    100.0
        advance                                   -    9.401    75.205    100.0
          integrate                               -    9.400    75.201    100.0
            current                               -    2.001    16.007     21.3
              zero                         29120728    0.518     4.142      5.5
              Granule_98_3D__all           24000600    0.459     3.675      4.9
              Granule_98_3D__soma_group    24000600    0.456     3.649      4.9
              Gran_CaPool_98               24000600    0.410     3.282      4.4
            state                                 -    1.861    14.888     19.8
              Granule_98_3D__soma_group    24000600    0.778     6.223      8.3
              Gran_CaPool_98               24000600    0.498     3.981      5.3
              Granule_98_3D__all           24000600    0.410     3.283      4.4
            events                         58241456    1.017     8.138     10.8
            voltage                        29120728    0.954     7.629     10.1
            ionupdate                      29120728    0.526     4.205      5.6
            threshold                      29120728    0.514     4.116      5.5
            samples                        29120728    0.513     4.103      5.5
            stimuli                        29120728    0.512     4.092      5.4
            post                           29120728    0.509     4.072      5.4
            stepsupdate                    29120728    0.500     4.003      5.3
            diffusion                      29120728    0.494     3.950      5.3
      ```
      
      Before:
      ```
      _p_ REGION                     CALLS      THREAD        WALL       %
      _p_ root                           -      56.635       7.079   100.0
      _p_   advance                      -      56.635       7.079   100.0
      _p_     integrate                  -      56.633       7.079   100.0
      _p_       current                  -      11.836       1.480    20.9
      _p_         zero            29120728       3.133       0.392     5.5
      _p_         Granule_98_3D__soma_group    24000600       2.816       0.352     5
      _p_         Granule_98_3D__all    24000600       2.650       0.331     4.7
      _p_         Gran_CaPool_98    24000600       2.291       0.286     4.0
      _p_         MossyFiber_all     3840096       0.501       0.063     0.9
      _p_         Golgi_98_3D_all     1280032       0.123       0.015     0.2
      _p_         Golgi_98_3D_soma_group     1280032       0.120       0.015     0.2
      _p_         Golgi_CaPool_CML     1280032       0.103       0.013     0.2
      _p_         nernst           1280032       0.100       0.013     0.2
      _p_       state                    -      11.343       1.418    20.0
      _p_         Granule_98_3D__soma_group    24000600       4.918       0.615     8
      _p_         Gran_CaPool_98    24000600       3.086       0.386     5.4
      _p_         Granule_98_3D__all    24000600       2.288       0.286     4.0
      _p_         MossyFiber_all     3840096       0.479       0.060     0.8
      _p_         Golgi_98_3D_all     1280032       0.252       0.031     0.4
      _p_         Golgi_98_3D_soma_group     1280032       0.180       0.023     0.3
      _p_         Golgi_CaPool_CML     1280032       0.139       0.017     0.2
      _p_       voltage           29120728       7.124       0.891    12.6
      _p_       events            58241456       6.003       0.750    10.6
      _p_       threshold         29120728       3.015       0.377     5.3
      _p_       samples           29120728       2.976       0.372     5.3
      _p_       ionupdate         29120728       2.961       0.370     5.2
      _p_       stimuli           29120728       2.890       0.361     5.1
      _p_       stepsupdate       29120728       2.868       0.358     5.1
      _p_       post              29120728       2.820       0.353     5.0
      _p_       diffusion         29120728       2.794       0.349     4.9
      _p_       setup                  728       0.001       0.000     0.0
      _p_     samplesetup              728       0.001       0.000     0.0
      _p_     spikes                   728       0.000       0.000     0.0
      _p_     eventsetup               728       0.000       0.000     0.0
      _p_     sampledeliver            728       0.000       0.000     0.0
      _p_   communication                -       0.000       0.000     0.0
      _p_     enqueue                    -       0.000       0.000     0.0
      _p_       sort                   728       0.000       0.000     0.0
      _p_       merge                  728       0.000       0.000     0.0
      _p_       setup                  728       0.000       0.000     0.0
      _p_     walkspikes                 1       0.000       0.000     0.0
      _p_     spikeio                    1       0.000       0.000     0.0
      _p_     exchange                   -       0.000       0.000     0.0
      _p_       gather                   1       0.000       0.000     0.0
      _p_       sort                     1       0.000       0.000     0.0
      _p_       gatherlocal              1       0.000       0.000     0.0
      ```
      eee16c78
  9. Jan 05, 2023
    • Lennart Landsmeer's avatar
      ANN activation functions for NMODL: `sigmoid(x)`, `relu(x)` and `tanh(x)` (#2052) · 2dabd87a
      Lennart Landsmeer authored
      I have been playing around a bit with getting Neural ODE's working (and
      in general ANN's as black-box homeostatic mechanisms) and found arbor
      lacking in ANN activation functions. Now not everybody might agree that
      this is actually needed in Arbor, so I don't expect this PR to be merged
      directly. But if people like the idea, here it is :)
      
      The PR contains 3 common unary functions used in ANN's as nonlinear
      activations: `sigmoid(x)`, `relu(x)` and `tanh(x)`
      
      Here is a very minimal example of a 'neural ode':
      
      ```
      NEURON {
        SUFFIX node
      }
      
      PARAMETER {
          A1 = -0.662 A2 =  0.282 A3 =  0.957
          A4 = -0.189 A5 = -1.794 A6 =  1.094
          A7 = -1.133 A8 =  0.625 A9 =  0.074
          b1 = -1.434 b2 = -0.358 b3 = -0.093
      }
      
      STATE {
          x
          y
          z
      }
      
      INITIAL {
          x = 0
          y = 1
          z = 1
      }
      
      DERIVATIVE dstate {
          x' = tanh(A1 * x + A2 * y + A3 * z + b1)
          y' = tanh(A4 * x + A5 * y + A6 * z + b2)
          z' = tanh(A7 * x + A8 * y + A9 * z + b3)
      }
      
      BREAKPOINT {
          SOLVE dstate METHOD sparse
      }
      ```
      2dabd87a
    • Thorsten Hater's avatar
      Emit better warning. (#2071) · 09c30fce
      Thorsten Hater authored
      Before
      ```
      ✦2 ❯ modcc -t cpu jnml-arbor/SKv3_1.mod
      Warnings:
        * jnml-arbor/SKv3_1.mod:(line 1,col 1) Assignments to local variable containing state variables will not be integrated in time
      ```
      After
      ```
      ✦2 ❯ modcc -t cpu jnml-arbor/SKv3_1.mod
      Warnings:
        * jnml-arbor/SKv3_1.mod:(line 172,col 14) Assignments to local variable containing state variables will not be integrated in time: (rate_m_q = ((m_inf - m_q) / m_tau))
      ```
      09c30fce
    • Brent Huisman's avatar
      v0.8.1 postrelease (#2074) · 29166744
      Brent Huisman authored
      29166744
  10. Dec 22, 2022
  11. Dec 21, 2022
    • Benjamin Cumming's avatar
      Silence spurious unused variable warnings in generated code (#2073) · 2d7c9195
      Benjamin Cumming authored
      `[[maybe_unused]]` in generated code to silence warnings for mechanisms
      with `net_receive` methods that do not use the connection weight.
      2d7c9195
    • Thorsten Hater's avatar
      Better handling of powers in modcc. (#2061) · fbd41184
      Thorsten Hater authored
      - $x^{-1} \Rightarrow 1/x\quad \forall x$
      - $x^n \Rightarrow x\cdot \dots \cdot x \quad x\in N; |x| < 5$
      - $x^n \Rightarrow 1/(x\cdot \dots \cdot x) \quad x\in N; |x| < 5; x <
      0$
      - $b^e \Rightarrow \exp(\log(b) e)\quad \forall  b, e$
      
      The last point introduces potential errors when `pow(b, e)` is allowed,
      but `log(b)` is
      undefined. These occur exactly when all of the following is true
      - $b < 0$
      - $e\in N$
      - $e$, $b$ not known at compile time (since we cover these cases before)
      fbd41184
  12. Dec 15, 2022
  13. Dec 14, 2022
  14. Dec 12, 2022
  15. Dec 06, 2022
  16. Nov 28, 2022
  17. Nov 23, 2022
  18. Nov 22, 2022
    • boeschf's avatar
      spack gpu option (#2043) · 45de1ab3
      boeschf authored
      added conditional variant for cuda builds to enable GPU-based random number generation
      45de1ab3
    • boeschf's avatar
      simplify make catalogue (#2042) · 9797403e
      boeschf authored
      - unit tests and some examples build their own mechanism catalogue
      - repeated logic for detecting GPUs, passing compile time flags
      - leverage the cmake variables and targets which are already there since these catalogues are internal to arbor
      - build a static library with mechanisms, which links to arbor-private-deps
      9797403e
  19. Nov 21, 2022
    • Thorsten Hater's avatar
      :zap: Voltage Processes (#2033) · b63cca1c
      Thorsten Hater authored
      Add the VOLTAGE_PROCESS mechanism kind to modcc, allowing for direct writing to the membrane voltage
      Obviously these are extremely sharp tools and can break the cable model, so we add some constraints to their
      use (see docs). Still, user discretion is required.
      
      As a sneak peek for what this might be useful for
      
      * implementing voltage clamps
      * limiting membrane voltage (irritatingly also a kind of clamping)
      * faking ABSTRACT_CELL like behaviour (although that might require a bit more work)
      
      Closes #1343
      b63cca1c
  20. Nov 18, 2022
  21. Nov 17, 2022
    • boeschf's avatar
      Additional builtin functions to Arbor's NMODL dialect (#2035) · eaddc738
      boeschf authored
      Added common math functions which I came across in the wild quite frequently. Implementations may be more optimized than hand-rolled versions.
      
      - sqrt: usual square root
      - step_right: right-continuous heaviside step function
      - step_left: left-continuous heaviside step function
      - step: heaviside step function with half step at 0
      - signum: sign bit function
      - extended iexpr with the step_left, step_right variants
      eaddc738
    • boeschf's avatar
      BUGFIX: add ARB_CUDA flag to example catalogue (#2039) · ff3494ec
      boeschf authored
      fix ornstein_uhlenbeck example on gpu:
      - use make_catalogue instead of make_catalogue_standalone
      - link to arbor-private-deps
      - mark all files as c++ sources when using cuda-clang or hip-clang
      ff3494ec
  22. Nov 15, 2022
    • Brent Huisman's avatar
    • Brent Huisman's avatar
      v0.8 (#2028) · 8e82ec19
      Brent Huisman authored
      - Correct `.gitmodules`
      - Update all git submodules to latest released versions, except google-benchmark
      - Have CHANGELOG
      - Breaking changes since v0.7:
        - A change in API: `arbor.cable_cell` has the labels and decor arguments swapped. I.e.: `(tree, labels, decor)`
      -> `(tree, decor, label)`. Labels are now optional.
        - Mechanism ABI version is bumped to 0.3.1. https://github.com/arbor-sim/arbor/pull/1884
        - Remove the `generate-catalogue` script.  `modcc` accepts now a list of NMODL files and is able to spit out a catalogue.cpp file
        - Rename spike detector -> threshold detector
        - Remove access to time `t` in NMODL.
      - Major dependency version bumps:
        - GCC: 9 and up
        - CUDA: 11 and up
        - Clang: 10 and up
      v0.8
      8e82ec19
    • boeschf's avatar
      SDE examples (#2030) · 1b268ecf
      boeschf authored
      Addresses #1987
      
      * reproducibility test for random number generator
      * C++ example demonstrating Ornstein-Uhlenbeck process
      * Python example featuring stochastic mechanism
      * stochastic mechanism catalogue
      
      The Python example is contributed by Jannik Luboeinski's (@jlubo): https://github.com/jlubo/arbor_ou_lif_example
      and adapted to fit into Arbor.
      1b268ecf
  23. Nov 10, 2022
  24. Nov 08, 2022
  25. Nov 03, 2022
  26. Nov 02, 2022