- Mar 09, 2017
-
-
Sam Yates authored
Fix morphology section ctor bug. Add morphology pools for miniapp from which morphologies are drawn in the recipe. Add command-line options to expose above. Add option --report-compartments to (slowly) check the min, mean, and max number of compartments in the generated cells across the simulation. Use morphology::add_section to do all the heavy lifting; no need to make section_geometry objects by hand, unless you really, really want to.
-
Sam Yates authored
This PR is a prelude to closer integration of the random morphology generation with the miniapp, with the first step being support for recipes that create cells from morphologies generated off-line. It aims to use nest::mc::morphology as the flat morphology-only representation that can be used to construct nest::mc::cell objects and which can exist as a target for SWC conversion and random morphology generation. Simplify swc io implementation: Avoid throwing exceptions in istream parsing and swc_record constructors — only throw when explicitly checking consistency, or when parsing a full sequence of records. Allow direct access to record members. Separate parsing considerations from canonicalization (renumbering, sorting) of a sequence of records. Move lmorpho morphology classes into src/ Add invariant check procedure for morphology. Make cells via swc -> morphology -> cell building, rather than direct swc -> cell. Allow option to use 'natural' discretization in morphology to determine number of compartments in built cell. Update test_swcio.cpp to accommodate new API.
-
- Feb 20, 2017
-
-
Ben Cumming authored
Add a dry run mode, inspired by the dry run mode implemented in NEST. A dry run of a model simulates running a large distributed model by running only the work of one of the ranks, with artificial spike input from the other "dummy" ranks. This is implemented as a new global communication back end, dryrun_global_policy, the implementation of which is straightforward: a new implementation of gather_spikes that takes the local spikes and replicates them n times where n is the total number of simulated ranks. the global_policy::size() method returns the number of ranks in the simulated run the new back end has to store some state that records the number of simulated ranks and cells per rank, which are set using the new global_policy::set_sizes() method Some CMake modificatins were required: make the selection of the global communication backend have the same interface as that for selecting the threading back end. small improvements to the selection of the threading back end to make the cthread option visible in ccmake, and have consistent CMake variable naming. Command line options were also extended: a --dry-run-size or -D option can be used to supple the number of dry run ranks on the command line. the miniapp driver was updated to set the dry run size and cell count via the new global_policy::set_sizes() interface.
-
- Feb 01, 2017
-
-
Add threading pool built on `std::thread` * Provide new threading model 'cthread' for nestmc based on a pool of `std::thread` objects. * Unify duplicated timer class provided by `serial`, `omp` and now `cthread` threading models.
-
- Jan 12, 2017
-
-
John Biddiscombe authored
* Fix CMakeLists to handle build as a subproject When several CMake generated projects are build together, it is common practice to have a 'superproject' CMakeLists that uses add_subdir(proj1) add_subdir(proj2) ... where each subproject is a self contained CMake based project (Example proj1=HPX, proj2=nestmc, proj3=another, ...) CMAKE_SOURCE_DIR always points to the top level directory which is the superproject dir in this case, whereas PROJECT_SOURCE_DIR always points to the root of the current project() in the CMakeLists so one shouod use PROJECT_SOURCE_DIR as this gets the relative paths correct. * Add option to turn off auto generation from *.mod files * Fix #134 : Change CMake WITH_OPTION to NMC_WITH_OPTION, compiler #define to NMC_HAVE_OPTION 1) The user may select an option by saying NMC_WITH_XXX 2) This may trigger CMake to use find_package(...) or setup some other variables. CMake can then set variable NMC_HAVE_XXX and add a what has actually been used. 3) Code should use #ifdef NMC_HAVE_XXX to check for a feature Old CMake/define New CMake Compiler #define ---------------- --------- ---------------- THREADING_MODEL NMC_THREAD_MODEL WITH_TBB NMC_WITH_TBB NMC_HAVE_TBB WITH_OMP NMC_WITH_OMP NMC_HAVE_OMP WITH_SERIAL NMC_WITH_SERiAL NMC_HAVE_SERIAL WITH_MPI NMC_WITH_MPI NMC_HAVE_MPI WITH_CUDA NMC_WITH_CUDA NMC_HAVE_CUDA WITH_GPU NMC_HAVE_GPU WITH_ASSERTIONS NMC_WITH_ASSERTIONS NMC_HAVE_ASSERTIONS WITH_TRACE NMC_WITH_TRACE NMC_HAVE_TRACE WITH_PROFILING NMC_WITH_PROFILING NMC_HAVE_PROFILING Other user visible CMake vars ----------------------------- VECTORIZE_TARGET -> NMC_VECTORIZE_TARGET USE_OPTIIZED_KERNELS -> NMC_USE_OPTIIZED_KERNELS BUILD_VALIDATION_DATA -> NMC_BUILD_VALIDATION_DATA BUILD_JULIA_VALIDATION_DATA -> NMC_BUILD_JULIA_VALIDATION_DATA BUILD_NRN_VALIDATION_DATA -> NMC_BUILD_NRN_VALIDATION_DATA VALIDATION_DATA_DIR -> NMC_VALIDATION_DATA_DIR Variables such as NMC_THREADING_MODEL and NMC_VECTORIZE_TARGET now use enumerated cmake values so you can toggle between them in ccmake gui. SYSTEM_TYPE_CRAY/BGQ -> NMC_SYSTEM_TYPE (Generic/Cray/BGQ) * Use generator expression for modcc path Some IDE's (like Xcode for example), override the CMake binary paths and add /Debug or /Release etc so rules that have hard coded paths to binaries will fail.
-
- Nov 14, 2016
-
-
Ben Cumming authored
This PR is part of the gpu feature merge. The GPU implementation is not implemented here. Instead, we focus on refactoring of the original "multicore" back end so that it is ready for adding the GPU back end. This is a big and messy change, for which I am sorry. ## build System - A `WITH_CUDA` option has been added to the main CMakeLists. This finds the CUDA toolkit, and sets CUDA compiler flags, and will build unit tests for the gpu back end. - The CMakeLists that generates mechanisms with modcc has been updated to generate CUDA mechanisms. - the library is now named `libnestmc` instead of `libcellalgo` - merge the external libraries that are optionally linked againts (tbb, libunwind, etc) into a single `EXTERNAL_LIBRARIES` list for ease of linking ## modcc - the cprinter and cudaprinter have had small changes to generate mechanism files that are compatible with the refactored library. ## algorithms - the indexes into algorithm was "rangified". An algorithm `index_into_iterator` takes two ranges as inputs to make a range that lazily generates the index of sub into super set. ## backends - made a new path `src/backends/` for backend specific type and implementation code. - currently: - complete support for the `multicore` and `gpu` backends - `gpu` back end is not optimized or validated - the back end implementations are in `src/backends` - a single `backend` class, `nest::mc::{multicore,gpu}::backend`, is provides all backend specific type and implementation details fro each backend - storage containers - Hines matrix assembly for FVM method - Hines matrix solver - mechanism "factory" ## lowered fvm cells - removed `fvm_cell` because this can be modelled with an `fvm_multicell` with one cell. - refactored to use backend type and implementation from `fvm_policy` - use `std::vector` instead of containers in `nest::mc::memory::` where possible when building cells. ## memory library Refactor the "memory" library, making it much simpler and better integrated into the rest of the application. However, it is still far from perfect. The `Coordinator` approach needs to be improved, most likely by putting target-specific wisdom into pointers (which could obviate the need for a `const_array_view` type. 1. renaming and moving - move from `vector/` to `src/memory` - move into the `nest::mc` namespace, i.e. all types and functions are now in `nest::mc::memory` - change from camel case nameing scheme to NestMC style naming. 2. simplification - remove the CRTP cruft that was used to make operator overloading work for operations like copying from one range into another, and filling a range with a constant value. These have been replaced with `memory::fill()` and `memory::copy()` helper functions. This simplified the code _a lot_, and makes code clearer in user land. ``` // before vec(0, 5) = other; // now memory::copy(other, vec(0, 5)); ``` - add some wrappers in `src/memory/wrappers.hpp` that help with making views. These are particularly useful for passing `std::vector` through interfaces that expect a view. ## debug backtraces Added stack traces for debugging. - support for OSX and Linux via libunwind - backtraces can be generated manually `nest::mc::util::backtrace().print()` - creates a new file and dumps trace into file - prints message to `stderr` with file name and instructions on how to analyse - backtraces are also automatically generated when an assertion `EXPECTS` statement fails - a python script in `scripts/print_backtrace` pretty prints the output with file name, line number and demangled symbols ## util simplification and consolidation The `src/util.hpp` file was removed - much of its contents were dead code and just removed - useful components like `pprintf` and `make_unique` were moved into the `src/utils` path in standalone files There was a lot of overlap between functionality provided in `src/memory/util.hpp` and existing functions/types in the `nest::mc::util` namespace. The `memory` implementations were removed, and their `nest::mc::util` counterparts used. There is still some work remaining, namely moving the rest of the `src/memory/util.hpp` into `src/util/...`
-
- Aug 04, 2016
-
-
Sam Yates authored
-
- Jul 28, 2016
-
-
Sam Yates authored
* Consistent use of globally defined integer types for indices etc. (catypes.hpp) or template type parameters across simulator. * Support unsigned types in tree, cell_tree and friends. * Use cell_member_type for probe ids (WIP) * Rejig mechanism lookup structure (simplifies, plays nicely with templated index types.) * Move spike, connection, events out of communcation namespace and directory.
-
- Jun 28, 2016
-
-
Sam Yates authored
Sidesteps NDEBUG versus assert() issue; EXPECTS macros are now enabled via a CMake configuration option -DWITH_ASSERTIONS=ON, corresponding to the preprocessor define -DWITH_ASSERTIONS in the code itself. (Note, with assertions enabled, one of the existing tests in test_algorithms.cpp aborts.)
-
Benjamin Cumming authored
-
- Jun 24, 2016
-
-
Benjamin Cumming authored
-
- Jun 08, 2016
-
-
Sam Yates authored
Builds modcc from modparser as an external project; executable will reside under BUILD/external/bin where BUILD is the CMake build directory. CMake hackery (see 'build_all_mods' target) should generate required module .hpp files from .mod files before the cellalgo library is built, if the header files are missing or out of date. This should also suffice for performing out-of-source builds.
-
- Apr 28, 2016
-
-
Benjamin Cumming authored
-
- Apr 04, 2016
-
-
Benjamin Cumming authored
-
- Mar 31, 2016
-
-
Benjamin Cumming authored
-
- Feb 03, 2016
-
-
Vasileios Karakasis authored
Moved SWC parser's and cell record's implementation details to a separate file. Also added braces around single-line control/loop blocks.
-