|
BioCMAMC-ST
|
Namespace that contains classes and structures related to Monte Carlo (MC) simulations. More...
Namespaces | |
| namespace | Distributions |
| Kokkos compatible method to draw from specific probability distribution. | |
| namespace | Impl |
Classes | |
| struct | ContribIndexBounds |
| struct | DomainState |
| Structure to store information about domain needed during MC cycle data is likely to change between each iteration. More... | |
| struct | EventContainer |
| Use to count events that occurs during Monte-Carlo processing cycles. More... | |
| class | KPRNG |
| Utilities and wrap around kokkos random generator. More... | |
| struct | LeavingFlow |
| Store position and value of volumic flow at outlet. More... | |
| struct | MonteCarloUnit |
| General-purpose Monte Carlo unit to carry out simulations. More... | |
| class | ParticlesContainer |
| Main owning object for Monte-Carlo particles. More... | |
| class | ReactorDomain |
| Represents the spatial domain where Monte Carlo particles can exist. More... | |
| struct | RuntimeParameters |
Typedefs | |
| using | ComputeSpace = Kokkos::DefaultExecutionSpace |
| using | HostSpace = Kokkos::DefaultHostExecutionSpace |
| using | ComputeLayout = ComputeSpace::array_layout |
| template<uint64_t Nd, FloatingPointType F> | |
| using | ParticlesModel |
| template<uint64_t Nc, FloatingPointType F> | |
| using | ParticlesContribs |
| template<FloatingPointType F> | |
| using | DynParticlesModel |
| template<FloatingPointType F> | |
| using | DynParticlesContribs |
| template<typename ExecSpace> | |
| using | gen_pool_type = Kokkos::Random_XorShift1024_Pool<ExecSpace> |
| using | pool_type = gen_pool_type<Kokkos::DefaultExecutionSpace> |
| using | generator_type = pool_type::generator_type |
| using | restrict_mt = Kokkos::MemoryTraits<Kokkos::MemoryTraitsFlags::Restrict> |
| using | ParticlePositions = Kokkos::View<uint64_t*, ComputeSpace> |
| using | ParticleStatus = Kokkos::View<Status*, ComputeSpace> |
| template<FloatingPointType ftype> | |
| using | ParticleWeigths = Kokkos::View<ftype*, ComputeSpace> |
| using | ParticleAges = ParticleAgesBase<ComputeSpace> |
| using | ParticleSamples = Kokkos::View<float**, Kokkos::LayoutRight, ComputeSpace> |
| template<typename MemorySpace> | |
| using | ParticlePropertyViewType = Kokkos::View<double**, Kokkos::LayoutRight, MemorySpace> |
| using | PropertySubViewtype |
| using | kernelContribution = Kokkos::View<float**, Kokkos::LayoutLeft, MC::ComputeSpace, kernelMT> |
| using | ContributionView |
| using | KernelConcentrationType |
| using | LocalConcentration = KernelConcentrationType |
| template<class ExecSpace, bool is_const> | |
| using | VolumeView |
| template<class ExecSpace, bool is_const> | |
| using | MoveProbabilityView |
| d_t * flow / volume per compartment. Owned by ReactorDomain | |
| template<class ExecSpace, bool is_const> | |
| using | DiagonalView |
| template<bool is_const> | |
| using | LeavingFlowView |
| template<class ExecSpace, bool is_const> | |
| using | CumulativeProbabilityView |
| template<class ExecSpace, bool is_const> | |
| using | NeighborsView |
Enumerations | |
| enum class | Status : char { Idle = 0 , Division , Exit , Dead } |
| enum class | EventType : char { NewParticle = 0 , Exit , Move , Death , Overflow , ChangeWeight , __COUNT__ } |
| Enumeration that represents events that can occurs during a Monte-Carlo cycle. More... | |
Functions | |
| template<EventType event> | |
| KOKKOS_INLINE_FUNCTION consteval size_t | event_index () |
| inline getter, converts event to its value in order to be use as array index | |
| template<typename ViewType> | |
| void | first_touch (const ViewType &view, std::size_t begin, std::size_t end, std::size_t npt) |
| Write-touch [begin, end) with the move kernel's team decomposition. | |
| template<typename ViewType, typename... Extents> | |
| void | resize_first_touch (ViewType &view, std::size_t n_alloc, std::size_t n_live, std::size_t npt, Extents... rest) |
| Kokkos::resize, but with the first touch placed by us. | |
| void | impl_init (const ExecInfo &info, double &total_mass, uint64_t n_particles, MonteCarloUnit &unit, AutoGenerated::ContainerVariant &&container, bool uniform_init) |
| void | post_init_weight (std::unique_ptr< MonteCarloUnit > &unit, double x0, double total_mass) |
| template<ModelType Model> | |
| std::unique_ptr< MonteCarloUnit > | init (const std::shared_ptr< IO::Logger > &_logger, const ExecInfo &info, uint64_t n_particles, std::size_t seed, std::span< double > volumes, std::span< const size_t > _neighbors, bool uniform_mc_init, double &total_mass) |
| Helper function to initialize a MonteCarloUnit. | |
| pool_type | get_pool (std::size_t seed=0) |
| uint64_t | master_seed () |
| uint64_t | next_splitmix64 (uint64_t &x) noexcept |
| KOKKOS_INLINE_FUNCTION auto | sample_random_variables (const pool_type &pool, auto &&functor) |
| template<class ExecutionSpace, class ViewType, class RandomPool, class IndexType = int64_t, const std::size_t CHUNK_SIZE> | |
| void | fill_random (const ExecutionSpace &exec, ViewType a, RandomPool g, typename ViewType::const_value_type begin, typename ViewType::const_value_type end) |
| RuntimeParameters | load_tuning_constant () |
Variables | |
| constexpr size_t | number_event_type |
| constexpr std::size_t | event_stride = 64 / sizeof(std::size_t) |
| Number of std::size_t slots reserved per counter. | |
Namespace that contains classes and structures related to Monte Carlo (MC) simulations.
This namespace encapsulates all the components used in Monte Carlo simulations, including data structures for managing simulation state and results.
| using MC::ComputeLayout = ComputeSpace::array_layout |
| using MC::ComputeSpace = Kokkos::DefaultExecutionSpace |
| using MC::ContributionView |
| using MC::CumulativeProbabilityView |
| using MC::DiagonalView |
| using MC::DynParticlesContribs |
| using MC::DynParticlesModel |
| using MC::gen_pool_type = Kokkos::Random_XorShift1024_Pool<ExecSpace> |
| using MC::generator_type = pool_type::generator_type |
| using MC::HostSpace = Kokkos::DefaultHostExecutionSpace |
| using MC::kernelContribution = Kokkos::View<float**, Kokkos::LayoutLeft, MC::ComputeSpace, kernelMT> |
| using MC::LeavingFlowView |
| using MC::MoveProbabilityView |
d_t * flow / volume per compartment. Owned by ReactorDomain
| using MC::NeighborsView |
| using MC::ParticleAges = ParticleAgesBase<ComputeSpace> |
| using MC::ParticlePositions = Kokkos::View<uint64_t*, ComputeSpace> |
| using MC::ParticlePropertyViewType = Kokkos::View<double**, Kokkos::LayoutRight, MemorySpace> |
| using MC::ParticleSamples = Kokkos::View<float**, Kokkos::LayoutRight, ComputeSpace> |
| using MC::ParticlesContribs |
| using MC::ParticlesModel |
| using MC::ParticleStatus = Kokkos::View<Status*, ComputeSpace> |
| using MC::ParticleWeigths = Kokkos::View<ftype*, ComputeSpace> |
| using MC::pool_type = gen_pool_type<Kokkos::DefaultExecutionSpace> |
| using MC::PropertySubViewtype |
| using MC::restrict_mt = Kokkos::MemoryTraits<Kokkos::MemoryTraitsFlags::Restrict> |
| using MC::VolumeView |
|
strong |
|
strong |
| Enumerator | |
|---|---|
| Idle | |
| Division | |
| Exit | |
| Dead | |
|
consteval |
inline getter, converts event to its value in order to be use as array index
| void MC::fill_random | ( | const ExecutionSpace & | exec, |
| ViewType | a, | ||
| RandomPool | g, | ||
| typename ViewType::const_value_type | begin, | ||
| typename ViewType::const_value_type | end ) |
| void MC::first_touch | ( | const ViewType & | view, |
| std::size_t | begin, | ||
| std::size_t | end, | ||
| std::size_t | npt ) |
Write-touch [begin, end) with the move kernel's team decomposition.
| pool_type MC::get_pool | ( | std::size_t | seed = 0 | ) |
| void MC::impl_init | ( | const ExecInfo & | info, |
| double & | total_mass, | ||
| uint64_t | n_particles, | ||
| MonteCarloUnit & | unit, | ||
| AutoGenerated::ContainerVariant && | container, | ||
| bool | uniform_init ) |
| std::unique_ptr< MonteCarloUnit > MC::init | ( | const std::shared_ptr< IO::Logger > & | _logger, |
| const ExecInfo & | info, | ||
| uint64_t | n_particles, | ||
| std::size_t | seed, | ||
| std::span< double > | volumes, | ||
| std::span< const size_t > | _neighbors, | ||
| bool | uniform_mc_init, | ||
| double & | total_mass ) |
Helper function to initialize a MonteCarloUnit.
Since MonteCarloUnit is not a generic type and the model type is resolved at runtime, no constructors are defined to avoid carrying template functions when using the unit. This function wraps the constructor externally, providing a convenient way to initialize a MonteCarloUnit with the appropriate model type and parameters.
| Model | The particle model type, specified at compile time. |
| RuntimeParameters MC::load_tuning_constant | ( | ) |
| uint64_t MC::master_seed | ( | ) |
|
noexcept |
| void MC::post_init_weight | ( | std::unique_ptr< MonteCarloUnit > & | unit, |
| double | x0, | ||
| double | total_mass ) |
| void MC::resize_first_touch | ( | ViewType & | view, |
| std::size_t | n_alloc, | ||
| std::size_t | n_live, | ||
| std::size_t | npt, | ||
| Extents... | rest ) |
Kokkos::resize, but with the first touch placed by us.
Same observable result as Kokkos::resize – contents preserved up to the overlap, remainder zeroed but the pages of the live range are placed by the threads that will read them.
Like Kokkos::resize, this is a no-op when the leading extent already matches: reallocating would throw away the placement it is here to establish.
| n_live | the range the compute kernels will actually walk, i.e. the used particle count, not the allocation. |
| npt | particles per team, from KernelDispatchOptions::m_p_p_team_move. It must be what CycleFunctors launches the move kernel with, otherwise the touch and the compute walk the array with different partitions and the whole point is lost. |
| KOKKOS_INLINE_FUNCTION auto MC::sample_random_variables | ( | const pool_type & | pool, |
| auto && | functor ) |
|
constexpr |
Number of std::size_t slots reserved per counter.
Counters are updated with atomics from every thread of the node. Packing them contiguously puts all of them on a single cache line, so unrelated tallies (typically Move and Exit) false-share and serialise against each other. One counter per cache line removes that coupling.
|
constexpr |