- Sep 17, 2018
-
-
Dry-run mode: * An implementation of distributed_context that is used to mimic the performance of running an MPI distributed simulation with n ranks. * Verifiable against an MPI run with the same parameters. Implementation: * Describe the model on a single domain (tile) and translate it to however many domains we want to mimic using arb::tile and arb::symmetric_recipe. This allows us to know the exact behavior of the entire system by only running the simulation on a single node. * Mimic communication between domains using arb::dry_run_context Example: * dryrun in example/ is a verifiable example of using dry-run mode with mc_cells Other: * Documentation of dry-run mode * unit test for dry_run_context
-
- Sep 07, 2018
-
-
fixes #591
-
Benjamin Cumming authored
Turns out that CMake thinks Clang and AppleClang are different things.
-
- Sep 06, 2018
-
-
Fixes #587. * Eliminate Clang warnings from GCC-tree-optimization bug work-around. * Error with static-assert if simd type is used with a missing simd abi. * Clarify install documentation regarding use of ARB_VECTORIZE with ARB_ARCH.
-
- Sep 05, 2018
-
-
Fixes #584. * Add CUDA compile guard generator expression to architecture options iff CUDA is an enabled language.
-
Benjamin Cumming authored
Fixes #584.
-
- Sep 01, 2018
-
-
Remove redundant profiler calls that caused crashes when using event generators.
-
- Aug 30, 2018
-
-
Benjamin Cumming authored
Make the execution context presented to users an opaque handle, moving all implementation of the gpu, thread and distributed contexts into the back end. * move `execution_context` and `distributed_context` definitions to the back end * create `execution_context` handle called `context` in the public API * provide `make_context` helper functions that build different context configurations (default, user-specified local resources, with MPI) * update documentation for all parts of the public API that touch contexts * move `distributed_context` docs to the developer documentation (from the public API docs)
-
- Aug 29, 2018
-
-
Fixes #575. * Guard CPU architecture option for nvcc with generator expression.
-
- Aug 24, 2018
-
-
* Add new ring benchmark to examples. * Refactored common functionality for reading miniapp parameters from a json file to `aux` (used by both bench and ring). Fixes #516.
-
Benjamin Cumming authored
Move implementation of `gpu_context` from header to `cpp` file, so that `ARB_WITH_CUDA` doesn't leak from library implementation.
-
- Aug 22, 2018
-
-
* Add gpu_context as part of execution context containing information about GPU availability, managed_memory synchronization, and atomic double availability. * Choose between ON and OFF for ARB_GPU in CMake. If ON compile for K20, K80, and P100 Note that we still need compile time information about the GPU in cuda_atomic.hpp for atomicAdd(double*, double*). This is because the function is only defined when the program is compiled for sm_60 or more.
-
Fixes #568.
-
Fixes #564
-
Use a compat::fma wrapper for std::fma to avoid a bug in the tree optimizer in GCC version < 8.2. See: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87046 Fixes #568.
-
- Aug 20, 2018
-
-
Global temperature for mechanisms. * Make 'celsius' magic in modcc: now an indexed variable. * Add a new temperature data source for indexed variables. * Add support to printers for indexed variables that reference a scalar. * Check that indexed variables aren't used in PROCEDURE blocks (this is a problem not just for 'celsius'). * Modify built-in mod files to pass celsius as a parameter to rates() procedures. * Add global temperature to shared_state classes, and initialize through backend mechanism superclasses. * Add some infrastructure for unit-test only mechanisms. * Set modcc flags globally in top level CMakeLists.txt. * Add test mechanism/module for checking celsius setting. * Add unit test for multicore and gpu mechanism celsius setting. * Make common mechanism private field data access helper for unit tests. * Use helper in temperature, synapses tests. * Fix warning in `distribued_context.hpp` about errant semicolon. * Fix global scal...
-
- Aug 06, 2018
-
-
Sam Yates authored
Two MacPorts/gcc7 issues: std::uint64_t is unsigned long long on OS X, breaking an assumption about size_t in the distributed_context interface. Problems with missing errno defines in the standard library headers. With MacPorts gcc7, the installed c++config.h defines _GLIBCXX_HAVE_EOWNERDEAD and _GLIBCXX_HAVE_ENOTRECOVERABLE, but the corresponding errno defines are not provided by sys/errno.h unless __DARWIN_C_SOURCE, which takes its value from _POSIX_C_SOURCE if defined, is greater than or equal to 200809L. Technically a MacPorts configuration bug? but easily worked around. Use basic integral types for communication collectives interfaces. Define _POSIX_C_SOURCE to be 200809L for glob.cpp. Fixes #562.
-
- Jul 31, 2018
-
-
Sam Yates authored
* Remove dependency on memory library and range utils from `multi_event_stream.cu` source. Fixes #545
-
* Replace distributed_contest with shared_ptr<distributed_context> in execution_context and pass around the shared pointer instead of a raw pointer. * Fix construction of mpi_context * Remove num_threads() from arb and arb::threading. Modify mpi_context so it also returns a shared_ptr. proc_allocation is initialized from execution context to determine available resources. * Rename threading backend files. Delete useless files. * Pass execution_context by const reference or value. * Remove code duplication in thread_system constructors.
-
- Jul 26, 2018
-
-
* Update the install docs for architecture build options * Update to reflect new install target
-
Sam Yates authored
Reduce redundant functionality across event_generator, time_seq and schedule by providing a low-heap overhead interface to schedule and using that for time sequences in event_generator and specialized cell groups. * Have schedule return pair of pointers as view to generated times. * Fix missing DEBUG/TRACE functionality. * Use rate instead of mean_dt for Poisson schedule. * Move merge_events() functionality to simulator.cpp. * Migrate event_generator to event span interface. * Migrate tourney_tree to event span interface. * Only invoke tourney_tree merge if generators have events in the epoch. * Use schedule for times in event_generator implementations. * Replace seq_generator with explicit_generator that keeps a copy of events. * Replace vector_backed_generator and poisson_generator with schedule_generator. * Replace time_seq uses with schedule. * Add default empty schedule. * Move rounding error test for regular time sequence into schedule test. * Update sampling API documentation for schedule.
-
Use correct profiling and mpi flags. Fix profiler doc
-
- Jul 25, 2018
-
-
Benjamin Cumming authored
This small refactor simplifies the interface and implementation of the `tree` type. * use `std::vector` instead of `memory::array` for internal storage in `arb::tree` * return a `util::range` intstead of a view for `tree::children(int)` * remove unused functionality for changing the root of a tree.
-
Add initialize method to the profiler to set up the needed threading parameters given a simulation's task system.
-
- Jul 24, 2018
-
-
- Task system is no longer a single system private to the implementation of the threading backend and used everywhere. A separate task_system can be used (with a specified number of threads) for every simulation. - arb::execution_context is the interface to task_system and the previously defined distributed_context - TBB and serial support has been removed. Cthreads is the only threading backend available.
-
- Jul 20, 2018
-
-
Sam Yates authored
Fixes #139. * Split colours and `pprintf(...)` into `io/pprintf.hpp` header. * Remove generic `to_string()` function, replacing its very occasional usage with `pprintf`. * Move block pretty printing into own .cpp file; this is the only place that the vector ostream printer was used. * Remove `enum_hash`, as not needed with C++14. * Move `is_in` utility function to `util.hpp`. * Remove old SIMD printer backend code.
-
* Perform device-to-device copy when device_reference is assigned a device_reference.
-
Benjamin Cumming authored
Better error message on missing file.
-
Sam Yates authored
* Don't call a missing file an 'internal compiler error'.
-
- Jul 19, 2018
-
-
Cthreads classes: - Notification queue : Manages tasks: tries or forces popping and pushing tasks. - Task system : manages the notifications queues; controls which queue to pop from/push to; controls spinning on queues if necessary; manages creating/joining threads. Is a singleton. - Task group : manages synchronization on a group of tasks. Operation: - Each thread has an associated queue - Task system _tries to_ push tasks in one of the available queues. If it is unable to acquire a lock on a queue, it tries the next in a round robin fashion. After it loops all queues if it still hasn't successfully pushed the task, it spins on a single queue until lock is acquired and task is pushed. - Task system _tries to_ pop a task from the calling thread's queue. If it is unable to acquire the lock, it tries to steal the task from another thread's queue, in a round robin loop. If it is still unable to pop a task, it spins on its the calling thread's queue until the lock is acquired. - Task group keeps a counter for the number of tasks in the group which it increments/decrements when calling push/pop on the task system. The counter is used to know when all tasks in the group have been executed. Unit tests: - Basic tests to pop/push from notification_queue, task_system and task_group. - Simple tests for deadlock - Simple tests for correctness Benchmark: - Benchmarks performance for various task sizes
-
- Jul 13, 2018
-
-
-
All example code and validation tests no longer require access to private include directories. This provides the minimal requirement for an installable target Note that it is still not possible to separately build mechanisms from NMODL with just the public includes, and there is not yet any package configuration file creation for use with CMake or pkg-config. * Replace `hw::node_info` with `proc_allocation`, describing local resources for the purposes of domain decomposition. * Group processor counting and gpu counting implementation under `node_info.cpp`. * Remove `domain_decomposition` dependency from `cell_group_factory.hpp` so we can use the latter to test for backend support for a cell kind. * Add `arb::cell_kind_implementation()` which performs the mapping from cell kind and backend kind to a `cell_group_ptr`-producing function (this will then become the site for custom cell group kind mapping support in future work). * Move headers for aux library into `aux/include/aux`, so that there is less ambiguity in header location within test and example code. * Simplify a little the affinity scanning code. * Add `sysconf()` and `std::thread::hardware_concurrency()` fallbacks for processor count determination. * Move `util::mask_stream`, `util::path`, `util::scope_exit` into aux header. * Remove `util::nop`. * Remove `io::exporter` and `io::exporter_spike_file`; replace with simpler interface in `aux::spike_emitter`. * Move `load_balance.hpp`, `math.hpp`, `scwio.hpp` into public includes. * Move path, glob and scope_exit utilities to aux lib. * Move cell group size-based partitioning functionality into partition_load_balance, through the use of new `partition_hint` structure. * Remove brunel example specific partitioner. * Move brunel example option code out of `::arb` namespace. * Move swc routines out of `arb::io` and into `arb::`. * Specialize public swc-routines to take a vector of swc_record objects instead of an arbitrary sequence; place implementations into swcio.cpp. * Remove dependency on `util/strprintf.hpp` from lmorpho. * Remove `arb::math::min`, `arb::math::max`. * Remove range utility dependence from validation tests: add piece-wise linear interpolator in test/validation/interpolate.hpp; remove `times` and `values` adaptors for simple trace data; add test/validation/util.hpp with generic size function and a `to_string` for `backend_kind`. * Add `aux::open_or_throw` helper function to replicate no-overwrite spike output behaviour in example applications. * Add `aux::strsub` simple string substitution function for use in examples, so as to avoid a `util::strprintf` or `util::pprintf` dependency. * Remove arbor private header dependencies from examples and validation tests.
-
- Jul 10, 2018
-
-
Fixes #526.
-
Sam Yates authored
Fixes issue #524.
-
- Jul 06, 2018
-
-
Fixes #182.
-
Migrate source/build to c++14 (#522) * Update `CMakeLists.txt` for C++14 option. * Update to gcc 6 minimum. * Update travis CI from gcc-5 to gcc-6 * Use `std::..._t` style type traits, replacing `util::` aliases. * Use `std::cbegin`, `std::cend`, and `std::make_unique`, replacing `util::` versions. * Remove `DEDUCED_RETURN_TYPE` macros. * Remove redundant return type specifications. * Use correct ADL for `begin` and `end` in (almost all) the range utilities. * Remove redundant `mechinfo` ctor (aggregate initialization suffices). * Use lambda capture initializers where appropriate. * Use generic `std::equal_to`. * Use variable templates for `math::infinity` and `math::pi`. * Remove `enum_hash` workaround. * Use `""s` string literals where we were using our own `""_s` construction. * Use generic lambda for recursive lambda instead of `std::function` wrapper. * Use generic lambda for generic arithmetic tests. Fixes #358.
-
Who broke the build? Sam did!
-
- Jul 05, 2018
-
-
Fixes issue #517. Deprecate the IBM xlC compiler. xlC generates code that is an order of a magnitude slower than gcc, while generating spurious warnings, and requiring hacks and workarounds to pass all tests. Supporting it makes no sense. * Add test and fatal error for xlC detection in CheckCompilerXLC.cmake. * Move xlC 13 misdetection work around to CheckCompilerXLC.cmake. * Remove xlC-specific compatibility workarounds from code.
-
This time we're moving `recipe.hpp` and `simulation.hpp`, plus the requirements they bring. Code changes: * Pimplize `simulation`. * Consolidate arbor exceptions: all non-cell kind specific exceptions that might be expected to reach user code now have consistent messages and fit in an exception hierarchy based at `arb::arbor_exception`. Internal errors throw an `arb::arbor_internal_error` exception. * Renamed `postsynaptic_spike_event` to `spike_event`. (Note: `pse_vector` name is unchanged.) * Repurposed `pprintf` and moved it into `strprintf.h` — further consolidation is a TODO. * Made a generic `util::to_string` to avoid redundancy of `operator<<` overloads and other `to_string` definitions. Defaults to ADL `to_string`, `std::to_string`, and finally tries using `operator<<`.
-
- Jul 03, 2018
-
-
Further work to public install target. * Move SIMD classes, cell description classes, simple sampler to public include. * Rename `cell` to `mc_cell`, `segment` to `mc_segment`, and remove `_description` from cell description class names and includes. * Move `compartment_model` out of `mc_cell` interface and use only in `fvm_layout.cpp`. * (Provisionally) remove area/volume methods on `mc_cell` and `mc_segment`.
-