Batched sampling. (#347)
Collect samples in FVM lowered cells across an integration period, prior to delivery to sampler callbacks. Fixes #283. * Make `multi_event_stream` a generic data structure, based on the event type. These are now used for both `deliverable_event` objects and `sample_event` objects. * Add generic accessors for event data, separating access to event metadata (cell index, time) from payload (weight, sampling info etc.). * Make a flat, CUDA-friendly data structure describing the `multi_event_queue` marked event state, for passing to mechanisms and kernels. This also brings the underlying representations of the `multicore` and `gpu` versions of `multi_event_queue` closer. * Implement batched sampling kernel for GPU. * Additional utility function: `util::is_sorted_by`. Overhead of implementation and sampling process is negligible for CPU, and with no samples less than 1% on GPU. Running the miniapp with 10'000 cells and sampling 1% of the somata at 0.01ms adds approximately 10% to simulation time.
Showing
- doc/sampling_api.rst 20 additions, 0 deletionsdoc/sampling_api.rst
- modcc/cprinter.cpp 9 additions, 5 deletionsmodcc/cprinter.cpp
- modcc/cudaprinter.cpp 15 additions, 8 deletionsmodcc/cudaprinter.cpp
- src/CMakeLists.txt 1 addition, 0 deletionssrc/CMakeLists.txt
- src/backends/event.hpp 50 additions, 4 deletionssrc/backends/event.hpp
- src/backends/gpu/fvm.hpp 20 additions, 4 deletionssrc/backends/gpu/fvm.hpp
- src/backends/gpu/kernels/take_samples.cu 48 additions, 0 deletionssrc/backends/gpu/kernels/take_samples.cu
- src/backends/gpu/kernels/take_samples.hpp 21 additions, 0 deletionssrc/backends/gpu/kernels/take_samples.hpp
- src/backends/gpu/multi_event_stream.cu 34 additions, 51 deletionssrc/backends/gpu/multi_event_stream.cu
- src/backends/gpu/multi_event_stream.hpp 107 additions, 31 deletionssrc/backends/gpu/multi_event_stream.hpp
- src/backends/multi_event_stream_state.hpp 34 additions, 0 deletionssrc/backends/multi_event_stream_state.hpp
- src/backends/multicore/fvm.hpp 26 additions, 4 deletionssrc/backends/multicore/fvm.hpp
- src/backends/multicore/multi_event_stream.hpp 115 additions, 85 deletionssrc/backends/multicore/multi_event_stream.hpp
- src/common_types.hpp 4 additions, 0 deletionssrc/common_types.hpp
- src/event_queue.hpp 3 additions, 25 deletionssrc/event_queue.hpp
- src/fvm_multicell.hpp 77 additions, 37 deletionssrc/fvm_multicell.hpp
- src/generic_event.hpp 87 additions, 0 deletionssrc/generic_event.hpp
- src/mc_cell_group.hpp 89 additions, 63 deletionssrc/mc_cell_group.hpp
- src/mechanism.hpp 4 additions, 2 deletionssrc/mechanism.hpp
- src/util/filter.hpp 1 addition, 0 deletionssrc/util/filter.hpp
Please register or sign in to comment