- Jun 15, 2017
-
-
Vasileios Karakasis authored
Adds a new AVX512 target for processors supporting only the core AVX512 functionality, which currently means SkyLake Xeon processors.
-
- Jun 14, 2017
-
-
Vasileios Karakasis authored
Add AVX2 instrinsics back end for Haswell and Broadwell architectures. We're still 3.5% and 5% slower than the icc `#pragma` version on Haswell and Broadwell, respectively.
-
- May 24, 2017
-
-
Sam Yates authored
There is a potential data race in the `assemble_matrix_interleaved` kernel, where threads in a different warp can overwrite the `buffer_v` and `buffer_i` values before they are used to update the `d` and `rhs` vectors. This race has been exercised in the asynchronous event delivery branch. * Add `__syncthreads()` to assemble matrix interleaved kernel after `d` and `rhs` update.
-
- May 19, 2017
-
-
Vasileios Karakasis authored
The `emit_gather()` function emitted the "wrong" instruction in terms of its arguments but the instruction actually generated was correct, because the `simd_printer` was passing the arguments to `emit_gather()` in a different order, which was though the correct order for the finally emitted instruction. Complicated? This commit cleans this up.
-
Sam Yates authored
Fixes #273. Note: this incorporates the unit test patch in PR #275. * Store index into targets collection with synapse CV before sorting, and use this target index to store the permuted instance index in the correct target slot.
-
Sam Yates authored
Unit test did not take into account that the target handles set by the lowered cell will be grouped by cell.
-
- May 18, 2017
-
-
Sam Yates authored
Demonstrates the problem in #273. * Test correct assignment of handles to synapse mechanisms and handles under a variety of circumstances.
-
GCC has a power-pc specific bug https://gcc.gnu.org/bugzilla/show_bug.cgi?id=26374 This is simple to workaround: remove `l` from a double literal in a `constexpr` expression.
-
- May 16, 2017
-
-
Fixes #265. In the `modcc`-generated mechanism code, the `cnexp` solver method uses an expensive call to `exp` to integrate dependent variables over one time step. This commit replaces the exponential with a second-order Padé approximation. * Modify `modcc` to insert `exp_pade_11` and `exp_pade_22` functions into every module, which define Padé approximations of second and fourth order respectively (m=n=1 and m=n=2). * Have `cnexp` solver use `exp_pade_11` instead of the built in `exp` unary operator. The validation tests pass for both the 2nd and 4th order approximations; the second order approximation will suffices.
-
Ben Cumming authored
Remove some old compiler directives and properties from modcc-generated kernels that were not used by the intel compiler, and were not recognised by gcc. Now the optimized x86 kernels can be compiled by both gcc and intel compilers.
-
Sam Yates authored
* Add micro-benchmark `cuda_compare_and_reduce`. * Add support for `.cu` cuda benchmarks in `tests/ubench/CMakeLists.txt`. * Update `tests/ubench/README.md` with benchmark summary and results. * Updates the version of google benchmark library, for fixed benchmark iteration support.
-
- May 15, 2017
-
-
Fixes #266. Use CUDA to compile the `cell_group_factory` so that the CUDA back end is compiled correctly, instead of the null back end proxy. * Added bonus: the miniapp is now compiled using host C++ compiler instead of `nvcc`. This is a little bit hacky, because this is a stop gap until we have separate compilation of CUDA code.
-
- May 11, 2017
-
-
Sam Yates authored
Fixes #263. * Add 'verbose' field to command line option struct, set with '-v'. * If verbose flag is true, emit option summary to stdout.
-
- May 10, 2017
-
-
Ben Cumming authored
Refactor model and recipe to build models that have different cell types. Refactor recipe::get_cell to return unique_any so that. All recipe definitions in tests and miniap had to be updated to use the new interface. Make a cell_group_factory that forwards arguments for building a cell group to the appropriate cell_group constructor. Refactor model to use generic cell types Constructor now delegates cell_group generation to the cell_group_factory. Add an implementation file model.cpp for model to reduce compilation times (by 2-7 seconds on my desktop). Refactor probe enumeration code in model and cell_group add interface to cell_group for querying enumeration of probes in a cell_group use this interface instead of directly computing enumeration in model constructor, which no longer has easy access to probe information.
-
- May 09, 2017
-
-
Add a non-copyable variant of `util::any`. The two main use cases for such a container are: 1. Storing types that are not copyable. 2. Ensuring that no copies are made of copyable types that have to be stored in a type-erased container. `unique_any` has the same semantics as `any` with the exception of copy construction and copy assignment, which are explicitly forbidden. The requirement that the contained type be copy-constructable has also been relaxed. The `any_cast` non-member functions have been overridden for `unique_any`, with the same semantics as for `any`.
-
- May 08, 2017
-
-
Partial implementation of `std::any` from C++17 standard. See: http://en.cppreference.com/w/cpp/utility/any The implementation is in the `util` library as `util::any`. Deviations from the standards description of `std::any`: * Does not avoid dynamic allocation of small objects. * Does not implement the `in_place_type<T>` constructors from the standard. * Does not implement the `emplace` modifier from the standard.
-
- May 04, 2017
-
-
Ben Cumming authored
The domain decomposition, whereby cells were partitioned across domains/MPI ranks and then grouped together, was performed in an ad-hoc manner. This PR modularizes the domain decomposition. * A `domain_decomposition` class performs the cell partitioning given the recipe and some parameters. * This implementation has a single `domain_decomposition` class and flags are provided in a `group_rules` struct * The `domain_decomposition` could be specialized, or the simple rules struct could provide some sort of policy implementation in the future when the need arises * The domain_decomposition class is initialized inside the model constructor and is maintained as state of the model. * The cell model constructor interface has been simplified to a single constructor that takes a recipe and a reference to a `domain_decomposition`. * In the future we might pass in only a moveable subset of the `domain_decomposition` information requir...
-
Sam Yates authored
Refer to issue #247 and pr #248. * Replace `compat::sink()` usage with a simpler `compat::barrier_if_icc_leq`, as the icc bug also could be tickled depending on how the `sink()` code was structured.
-
- May 03, 2017
-
-
Sam Yates authored
Fixes #247. Forces evaluation of partition bounds call within the `div_component_sampler` constructor, which for subtle and obscure reasons is mis- or un-computed with icpc and the `-xMIC-AVX512` target option. * Add `compat::sink()` function that forces evaluation of the argument. * Add `compat::sink_if_icc_leq(version, const X&)` function that performs this only when run with the Intel compiler subject to version bound. * Use the `compat::sink_if_icc_leq` function in the `div_component_sampler` constructor.
-
Sam Yates authored
Fixes #245. Add missing header <system_error> to src/util/strprintf.hpp Remove redundant const in cell_kind returns.
- Apr 28, 2017
-
-
w-klijn authored
* Add cell-kind function on the cell_group * Move the cell_kind to common types * Have the cell also return its kind when requested
-
- Apr 21, 2017
-
-
Virtualization of the `cell_group` interface is necessary for support of other (i.e. non-multicompartment) cell models, including e.g. Poisson spike generators. * Make `cell_group` an abstract base class; the previous `cell_group` class that is parameterized by the back-end FVM implementation is renamed `mc_cell_group` ('mc' stands for 'multi-compartment') and derives from the abstract `cell_group`. * Remove template parameter `Cell` from `model` type: a `model` can in principle now manage multiple types of concrete objects derived from `cell_group`. * Extend `model` constructor to take a hint about which back-end to use when constructing cell groups: `use_multicore` or `prefer_gpu`. This is a placeholder for a more sophisticated implementation once we have the requirements for a richer "ecosystem" of cell types. * Simplified some generic types to remove template dependencies between front and back ends: * Define a global `using time_type=float` in `common_types.hpp...
-
Sam Yates authored
Fixes #232. * Try `NMC_DATADIR` environment variable for validation data path, or else if the #defined `NMC_DATADIR` does not point to a directory, try `./validation/data` and `../validation/data`. * Don't define `NMC_DATADIR` if CMake version 3.7 or 3.8. * Extend C++17 filesystem emulation with (POSIX) implementation of `is_directory` and supporting classes, functions and enums `filesystem_error`, `file_status`, `status(..)`, `file_type` and `perms`.
-
- Apr 18, 2017
-
-
Sam Yates authored
Fixes #234. * Adds dummy `DOWNLOAD_COMMAND` to `ExternalProject_Add` invocation. * More thorough status/warning messages regarding git submodule update process.
-
Fixes #190. The final piece in the metering features. * Add a `power_meter` which currently records energy used on each node of a Cray XC{30,40,50} systems, which all have built in `pm_counters` interface to power measurement. * Add information about which node each MPI rank runs on to the metering output in `meters.json`, which is needed to analyse energy recordings, which are per node, not per MPI rank. * Refactor collation of measurements: now the responsibility of the meter manager. * Add support for `gather` with `std::string` to the global communication policy, which required a back end MPI implementation and corresponding unit test. * Add `src/util/config.hpp` that populate the `nest::mc::config` namespace with `constexpr bool` flags describing system or environment capabilities.
-
- Apr 13, 2017
-
-
`cell_group` had a template method `cell_group::enqueue_events()`, which was parameterized on the type of container used to pass the set of events to enqueue. This PR removes the template, and makes `time_type` a globally defined type in `common_types.hpp`. The `time_type` that permeated the code is taken from `spike`, which is itself a specialized type alias of `basic_spike`. This is not an intuitive location to define the `time_type`, and hides the fact that as implemented it was effectively a global typedef. * Define the default time type in `common_types.hpp`: `using time_type = float`. * Use this global `time_type` in the definition of `spike` and `postsynaptic_spike_event`. * Replace generic `cell_group::enqueue_events` method with concrete `cell_group::enque_events(const std::vector<post_synaptic_event>&)`.
-
Preparatory work for abstract cell group interface. * Remove `cell_group` public member functions that are not needed as part of the interface: `clear_events`, `remove_samplers`, `probe` and `reset_samplers`. * Remove value_type from model, and declare explicitly that samplers receive values that are doubles.
-
- Apr 12, 2017
-
-
Sam Yates authored
Move string-printf utility from lmorpho into util. * Add `util::strprintf` printf-alike function that returns a `std::string` result. * Include simple adaptors for `std::string` and standard smart pointer arguments fot `util::strprintf` (i.e. `std::string` arguments can be used with `%s`, smart pointers with `%p`). * Add unit tests to suit.
-
* Move `event_binner` class to own header file `event_binner.hpp` with implementation in `event_binner.cpp`. * Move `event_binner` unit tests to own source file `test_event_binner.cpp`.
-
Sam Yates authored
* Use git submodule for incorporating Google benchmark library. * Add one microbenchmark for comparing `util::transform_view` performance. Note that the microbenchmarks are not built by default; they can be built with `make ubenches`, and then run individually. The microbenchmarks will be built in `tests/ubench/`, relative to the build directory.
-
- Apr 07, 2017
-
-
Ben Cumming authored
Add unit tests for communicator fixes #200 update global_communication test driver to initialize correctly in dry run mode add unit tests that test the communication::global_policy: basic initialization global spike exchange (just the spike gather step, not the event delivery). improve the formatting of the reporting from the MPI GTest wrapper to make it easy to see if tests have failed.
-
* Update `README.md` to reflect the CMake options for vectorization.
-
Proposed patch to master branch: * Qualify template in `indirect_view` to accommodate incorrect function template specialization determination (icpc ignores §14.8.2.4/9 rule on lvalue versus rvalue template arguments). * Use parenthesis constructors for type parameter in `pointer_proxy`, as icpc has not adopted the corrected behaviour for DR#1467 [http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#1467].
-
- Apr 06, 2017
-
-
Sam Yates authored
`cell_tree::depth_from_root()` was incorrectly traversing only the first branch from the tree root, leading to uninitialized values in the returned depth array. This leads to an incorrect maximum leaf node in `find_minimum_root()`, which then returns `no_parent`. This gets passed to `tree::change_root(size_t)`. * Correct `cell_tree::depth_from_root()` implementation. * Re-enable curiously disabled test case in `cell_tree.from_parent_index` * Add unit tests for `cell_tree::depth_from_root`.
-
Sam Yates authored
* Add perl program `cc-filter`, a general purpose by-line text filter with built-in default rules for filtering text containing C++ types and expressions. * Add documentation for the tool to the scripts `README.md` file. * Add demonstration table `filters/massif-strip-cxx` for using `cc-filter` with valgrind massif output.
-
- Apr 05, 2017
-
-
Fixes #189. * Add memory usage meter to profiling infrastructure. * Include GPU memory usage also, when GPU support is enabled.
-
- Apr 04, 2017
-
-
Ben Cumming authored
meter_manager correctly detects first checkpoint, which is necessary to ensure that all the timers are synchronized.
-
Ben Cumming authored
* An abstract `meter` class that defines interface for taking a reading, and returning the meter results as a json object. * A `time_meter` implementation of the `meter` that measures wall time. * To generate metering reports with global information, the global communication policy interfaces were extended to support `gather` and `barrier` operations. These are trivial for serial and dry run policies, and wrap the appropriate MPI calls for the MPI policy. * a `meter_manager` type that stores a list of meters was created * will also have memory and power meters soon. * a meter manager was added to the miniapp and now records startup, model initialization, time stepping and final file io times.
-
- Apr 03, 2017
-
-
Sam Yates authored
* Bug fix: crash on indirect test * Simplify indirect overloads, add nomove/nocopy tests
-