|
SpECTRE
2021.08.02
|
MockDistributedObject mocks the AlgorithmImpl class. It should not be considered as part of the user interface. More...
#include <MockDistributedObject.hpp>
Classes | |
| struct | get_databox_types |
Public Types | |
| using | phase_dependent_action_lists = typename Component::phase_dependent_action_list |
| using | all_actions_list = tmpl::flatten< tmpl::transform< phase_dependent_action_lists, Parallel::get_action_list_from_phase_dep_action_list< tmpl::_1 > > > |
| using | metavariables = typename Component::metavariables |
| using | inbox_tags_list = Parallel::get_inbox_tags< tmpl::push_front< all_actions_list, Component > > |
| using | array_index = typename Parallel::get_array_index< typename Component::chare_type >::template f< Component > |
| using | parallel_component = Component |
| using | PhaseType = typename tmpl::front< phase_dependent_action_lists >::phase_type |
| using | all_cache_tags = Parallel::get_const_global_cache_tags< metavariables > |
| using | initialization_tags = typename detail::get_initialization_tags_from_component< Component >::type |
| using | initial_tags = tmpl::flatten< tmpl::list< Parallel::Tags::MetavariablesImpl< metavariables >, Parallel::Tags::GlobalCacheImpl< metavariables >, initialization_tags, db::wrap_tags_in< Parallel::Tags::FromGlobalCache, all_cache_tags > > > |
| using | initial_databox = db::compute_databox_type< initial_tags > |
| using | databox_phase_types = typename Parallel::Algorithm_detail::build_databox_types< tmpl::list<>, phase_dependent_action_lists, initial_databox, inbox_tags_list, metavariables, typename Component::array_index, Component >::type |
| using | databox_types = tmpl::flatten< tmpl::transform< databox_phase_types, get_databox_types< tmpl::_1 > > > |
| using | variant_boxes = tmpl::remove_duplicates< tmpl::push_front< databox_types, db::DataBox< tmpl::list<> > > > |
Public Member Functions | |
| template<typename... Options> | |
| MockDistributedObject (const NodeId node_id, const LocalCoreId local_core_id, std::unordered_map< NodeId, std::unordered_map< LocalCoreId, GlobalCoreId > > mock_global_cores, std::unordered_map< GlobalCoreId, std::pair< NodeId, LocalCoreId > > mock_nodes_and_local_cores, const array_index &index, Parallel::GlobalCache< typename Component::metavariables > *cache, tuples::tagged_tuple_from_typelist< inbox_tags_list > *inboxes, Options &&... opts) | |
| void | set_phase (PhaseType phase) noexcept |
| PhaseType | get_phase () const noexcept |
| void | set_terminate (bool t) noexcept |
| bool | get_terminate () const noexcept |
| void | perform_algorithm () noexcept |
| size_t | number_of_actions_in_phase (const PhaseType phase) const noexcept |
| template<typename Tag > | |
| const auto & | get_databox_tag () const noexcept |
| Walks through the variant of DataBoxes and retrieves the tag from the current one, if the current DataBox has the tag. If the current DataBox does not have the requested tag it is an error. | |
| template<typename Tag > | |
| bool | box_contains () const noexcept |
| template<typename Tag > | |
| bool | tag_is_retrievable () const noexcept |
| void | force_next_action_to_be (const size_t next_action_id) noexcept |
Force the next action invoked to be the next_action_idth action in the current phase. | |
| size_t | get_next_action_index () const noexcept |
| Returns which action (by integer) will be invoked next in the current phase. | |
| void | next_action () noexcept |
| Invoke the next action in the action list for the current phase, failing if it was not ready. | |
| bool | next_action_if_ready () noexcept |
| Invoke the next action in the action list for the current phase, returning whether the action was ready. | |
| template<typename Action , typename... Args> | |
| Action::return_type | local_synchronous_action (Args &&... args) noexcept |
| bool | is_simple_action_queue_empty () const noexcept |
| size_t | simple_action_queue_size () const noexcept |
| void | invoke_queued_simple_action () noexcept |
| bool | is_threaded_action_queue_empty () const noexcept |
| size_t | threaded_action_queue_size () const noexcept |
| void | invoke_queued_threaded_action () noexcept |
| template<typename InboxTag , typename Data > | |
| void | receive_data (const typename InboxTag::temporal_id &id, Data &&data, const bool enable_if_disabled=false) |
| Parallel::GlobalCache< typename Component::metavariables > & | cache () noexcept |
| template<typename AdditionalTagsList > | |
| auto & | get_databox () noexcept |
Returns the DataBox with the tags set from the GlobalCache and the tags in AdditionalTagsList. If the DataBox type is incorrect std::terminate is called. | |
| template<typename AdditionalTagsList > | |
| const auto & | get_databox () const noexcept |
Returns the DataBox with the tags set from the GlobalCache and the tags in AdditionalTagsList. If the DataBox type is incorrect std::terminate is called. | |
| auto & | get_variant_box () noexcept |
Returns the boost::variant of DataBoxes. | |
| const auto & | get_variant_box () const noexcept |
Returns the boost::variant of DataBoxes. | |
| int | number_of_procs () const noexcept |
| Wrappers for charm++ informational functions. More... | |
| int | my_proc () const noexcept |
| Global Index of my processing element. | |
| int | number_of_nodes () const noexcept |
| Number of nodes. | |
| int | my_node () const noexcept |
| Index of my node. | |
| int | procs_on_node (int node_index) const noexcept |
| Number of processing elements on the given node. | |
| int | my_local_rank () const noexcept |
| The local index of my processing element on my node. This is in the interval 0, ..., procs_on_node(my_node()) - 1. | |
| int | first_proc_on_node (int node_index) const noexcept |
| Index of first processing element on the given node. | |
| int | node_of (int proc_index) const noexcept |
| Index of the node for the given processing element. | |
| int | local_rank_of (int proc_index) const noexcept |
| The local index for the given processing element on its node. | |
MockDistributedObject mocks the AlgorithmImpl class. It should not be considered as part of the user interface.
MockDistributedObject represents an object on a supercomputer that can have methods invoked on it (possibly) remotely; this is standard nomenclature in the HPC community, based on the idea that such objects get distributed among the cores/nodes on an HPC (even though each object typically lives on only one core). For example, an element of an array chare in charm++ is a mock distributed object, whereas the entire array chare is a collection of mock distributed objects, each with its own array index. MockDistributedObject is a modified implementation of AlgorithmImpl and so some of the code is shared between the two. The main difference is that MockDistributedObject has support for introspection. For example, it is possible to check how many simple actions are queued, to look at the inboxes, etc. Another key difference is that MockDistributedObject runs only one action in the action list at a time. This is done in order to provide opportunity for introspection and checking statements before and after actions are invoked.
|
noexcept |
Wrappers for charm++ informational functions.
Number of processing elements