Basic generalization of a directory for keys referring to a distributed object. Specific use here is to forward consumption requests from one nested paragraph to another. More...
Public Member Functions | |
template<typename TaskMapperParam > | |
nested_pg_directory (task_graph *tg_ptr, TaskMapperParam &&task_mapper_param) | |
nested_pg_directory (nested_pg_directory const &)=delete | |
nested_pg_directory & | operator= (nested_pg_directory const &)=delete |
~nested_pg_directory () | |
bool | has_pending_requests (void) const |
void | add_producer (key_type key, rmi_handle::reference handle, size_t num_succs) |
Forward the handle and successor count of a PARAGRAPH to the managing location for the task in the directory so that it is discoverable by consumers. | |
template<typename T , typename PortFilter , typename ValueFilter , typename LocationMapper > | |
void | setup_flow (key_type producer, rmi_handle::reference consumer_handle, location_type consumer_location, PortFilter port_filter, ValueFilter value_filter, LocationMapper location_mapper) |
Forward request to a producer nested paragraph that it flows its return value to the consumer nested paragraph with rmi_handle::reference consumer . More... | |
template<typename Mapper > | |
void | setup_parent_flow (key_type producer, Mapper mapper) |
Forward request to a producer nested paragraph that it flows its return value to its parent output port using the specified mapper class that remaps indices and filter dataflow if necessary. More... | |
bool | has_perfect_mapper (void) const |
mapper_t const & | key_mapper (void) const |
mapper_t & | key_mapper (void) |
bool | empty (void) const |
Returns true if there are no entries in directory's registry on this location. | |
void | reset (void) |
Clear all local registrations and pending messages in directory. Used by clear() methods of container distributions. | |
bool | try_register_key_local (std::size_t const &key) |
Attempt registration from the managing location. Return true if successful (i.e., not already registered). | |
void | register_key (std::size_t const &key) |
Associate key in directory's registry with the location invoking this method. More... | |
void | register_keys (std::pair< std::size_t, std::size_t > const &keys) |
void | register_apply (std::size_t const &key, Functor &&f) |
Associate key in directory's registry with location invoking this method. Registration location is implicitly set to be caller of this method. More... | |
void | register_apply (std::size_t const &key, Functor &&f, location_type location) |
Associate key in directory's registry with location invoking this method. More... | |
void | unregister_key (std::size_t const &key) |
Unregister key in directory's registry. | |
void | unregister_apply (std::size_t const &key, Functor &&f) |
Unregister key and apply a function object f at location where directory's registry manages key . More... | |
void | invoke_where (Functor &&f, std::size_t const &key) |
Invoke function object at the location where key is currently registered. More... | |
void | try_invoke_where (Functor &&f, std::size_t const &key) |
Invoke function object at the location where key is currently registered if the key is registered. More... | |
void | unordered_invoke_where (Functor &&f, std::size_t const &key) |
Invoke function object at the location where key is currently registered, disregarding RMI causal ordering. More... | |
locality_info | locality (std::size_t const &key) |
Provide locality information about a key managed by the directory. More... | |
runtime::location_md const & | get_location_md (void) const noexcept |
Returns the location metadata of the location this object registered in. | |
runtime::location_md & | get_location_md (void) noexcept |
Returns the location metadata of the location this object registered in. noexcept More... | |
Distributed Object Management | |
rmi_handle::const_reference const & | get_rmi_handle (void) const noexcept |
Returns the associated rmi_handle. | |
rmi_handle::reference const & | get_rmi_handle (void) noexcept |
Returns the associated rmi_handle. | |
size_type | get_location_id (void) const noexcept |
Returns the location id of the local sub-object. | |
size_type | get_num_locations (void) const noexcept |
Returns the number of locations of the gang of this p_object. | |
void | advance_epoch (void) |
Advances the epoch of the object. More... | |
void | unlock (void) |
Used by lock_guard functionality in method of derived classes to request atomicity with respect to incoming RMIs. More... | |
void | lock (void) |
Used by lock_guard functionality in method of derived classes to request atomicity with respect to incoming RMIs. More... | |
bool | try_lock (void) |
Attempt to maintain atomicity with respect to incoming RMIs. More... | |
Public Types | |
using | mapped_type = tuple< rmi_handle::reference, size_t > |
using | manager_type = mapper_t |
using | registry_type = registry_t |
using | key_type = std::size_t |
using | size_type = rmi_handle::size_type |
Public Attributes | |
std::unordered_map< key_type, mapped_type > | m_producers |
std::size_t | m_pending_messages |
task_graph * | m_tg_ptr |
Protected Member Functions | |
void | execute (Functor &&f) |
Internal method, target of RMI called via migrate_impl to invoke functor f at new registration location, post registry update. More... | |
void | invoke_at_manager (std::size_t const &key, void(Directory::*const pmf)(PMFArgs...), Args &&... args) |
Forwards functor and arguments to location managing key . The location managing the key will invoke the method with the supplied arguments. More... | |
void | invoke_at_manager (std::size_t const &key, void(Directory::*const pmf)(PMFArgs...) const, Args &&... args) const |
Forwards const functor and arguments to location managing key . The location managing the key will invoke the method with the supplied arguments. More... | |
void | invoke_at_manager_impl (std::size_t const &key, void(Directory::*const pmf)(PMFArgs...), Args &&... args) |
Implementation of. More... | |
void | invoke_at_manager_impl (std::size_t const &key, void(Directory::*const pmf)(PMFArgs...) const, Args &&... args) const |
Implementation of. More... | |
void | flush_pending (const location_type loc, std::size_t const &key, queue_t &pending) |
Forward all buffered requests for key to location More... | |
void | request_forward (std::size_t const &key, Functor &&f) |
Internal method used to facilitate invocation of f on location where key is currently registered. Called via RMI on directory location where key is managed. More... | |
void | try_request_forward (std::size_t const &key, Functor &&f) |
Internal method used to facilitate invocation of f on location where key is currently registered. If key is not registered, the request is dropped; otherwise, it is called via RMI on directory location where key is managed. This is directed at situations where it is legal for a key to not exist, i.e. erasing non-existent keys in the unordered set container. More... | |
Protected Types | |
using | mapper_t = typename select_parameter< boost::function< std::pair< location_type, loc_qual >(size_t)>, detail::default_key_mapper< std::size_t > >::type |
using | registry_t = typename select_parameter< use_default, boost::unordered_map< std::size_t, location_type, boost::hash< std::size_t >, std::equal_to< std::size_t >, pool_allocator< std::pair< std::size_t const, location_type > > > >::type |
using | transmitter_type = typename select_parameter< use_default, async_transmitter >::type |
using | queue_t = request_queue< request_t > |
using | queues_t = boost::unordered_map< std::size_t, queue_t, stapl::hash< std::size_t >, std::equal_to< std::size_t >, pool_allocator< std::pair< std::size_t const, queue_t > > > |
Protected Attributes | |
registry_t | m_registry |
Stores key to locations mapping. | |
queues_t | m_pending |
Map of queues, indexed by Key . Entry for keys exists when messages arrive and must be buffered prior to registration, during migration, etc. | |
mapper_t | m_key_mapper |
Map a key to location that manages it (i.e., where it has entry in m_registry). | |
bool | m_b_perfect_mapper |
Basic generalization of a directory for keys referring to a distributed object. Specific use here is to forward consumption requests from one nested paragraph to another.
stapl::paragraph_impl::nested_pg_directory::~nested_pg_directory | ( | ) |
void stapl::paragraph_impl::nested_pg_directory::setup_flow | ( | key_type | producer, |
rmi_handle::reference | consumer_handle, | ||
location_type | consumer_location, | ||
PortFilter | port_filter, | ||
ValueFilter | value_filter, | ||
LocationMapper | location_mapper | ||
) |
Forward request to a producer nested paragraph that it flows its return value to the consumer nested paragraph with rmi_handle::reference consumer
.
T | The type of elements stored in the target producer's output port. |
producer | Task identifier of the producer PARAGRAPH in its enclosing / parent PARAGRAPH. |
consumer_handle | RMI handle to the consuming PARAGRAPH. |
consumer_location | location in the consuming PARAGRAPH initiating the point to point consumption request. |
port_filter | Used to select which pins of the producer port are forwarded to this consumer. |
value_filter | Applied to each flowed pin's value, prior to dataflow to the consumer. |
location_mapper | maps producer pin to location in this consumer where it should be flowed. |
void stapl::paragraph_impl::nested_pg_directory::setup_parent_flow | ( | key_type | producer, |
Mapper | mapper | ||
) |
Forward request to a producer nested paragraph that it flows its return value to its parent output port using the specified mapper class that remaps indices and filter dataflow if necessary.
|
protectedinherited |
Internal method, target of RMI called via migrate_impl to invoke functor f
at new registration location, post registry update.
f | Nullary functor to apply. |
|
protectedinherited |
Forwards functor and arguments to location managing key
. The location managing the key will invoke the method with the supplied arguments.
key | Key value whose managing location (i.e., where registry entry is stored) is where pmf will be invoked. |
pmf | Directory member function to be invoked. |
args | variadic list of arguments to be applied. |
This is used to internally encapsulate to forward various method invocations from the requester (e.g., registration, invoke_where, etc) to the location where they can be serviced, forwarded, etc.
|
protectedinherited |
Forwards const functor and arguments to location managing key
. The location managing the key will invoke the method with the supplied arguments.
key | Key value whose managing location (i.e., where registry entry is stored) is where pmf will be invoked. |
pmf | Directory const member function to be invoked. |
args | variadic list of arguments to be applied. |
This is used to internally encapsulate to forward various method invocations from the requester (e.g., registration, invoke_where, etc) to the location where they can be serviced, forwarded, etc.
|
protectedinherited |
Implementation of.
Trans | The transmitter type |
|
protectedinherited |
Implementation of.
Trans | The given transmitter type |
|
protectedinherited |
Forward all buffered requests for key
to location loc
.
loc | Location to send buffered requests to. |
key | Key value buffered requests are for. |
pending | Pending queue associated with Key . |
This is internal method only called on the directory location managing key
.
|
protectedinherited |
Internal method used to facilitate invocation of f
on location where key
is currently registered. Called via RMI on directory location where key
is managed.
key | Key whose registered location determines where f should be executed. |
f | Functor to invoke (unary, key passed as parameter). |
Called by invoke_where and execute (the latter when migration enabled).
|
protectedinherited |
Internal method used to facilitate invocation of f
on location where key
is currently registered. If key
is not registered, the request is dropped; otherwise, it is called via RMI on directory location where key
is managed. This is directed at situations where it is legal for a key to not exist, i.e. erasing non-existent keys in the unordered set container.
key | Key whose registered location determines where f should be executed. |
f | Functor to invoke (unary, key passed as parameter). |
Called by invoke_where and execute (the latter when migration enabled).
|
inherited |
Associate key
in directory's registry with the location invoking this method.
|
inherited |
Associate key
in directory's registry with location invoking this method. Registration location is implicitly set to be caller of this method.
key | Key to register. |
f | Unary function object (receives key ) as parameter to call after registration. |
|
inherited |
Associate key
in directory's registry with location invoking this method.
key | Key to registered. |
f | Unary function object (receives key ) as parameter to call after registration. |
location | Location this key should be mapped to in the registry. |
|
inherited |
Unregister key
and apply a function object f
at location where directory's registry manages key
.
key | Key to unregister. |
f | Unary function object (receives key ) as parameter to call after unregistration. |
|
inherited |
Invoke function object at the location where key is currently registered.
f | Functor to apply. Unary operator, receives key as parameter. |
key | Registered key |
|
inherited |
Invoke function object at the location where key is currently registered if the key is registered.
f | Functor to apply. Unary operator, receives key as parameter. |
key | Key that may not be registered when method is invoked |
|
inherited |
Invoke function object at the location where key is currently registered, disregarding RMI causal ordering.
f | Functor to apply. Unary operator, receives key as parameter. |
key | Registered key |
|
inherited |
Provide locality information about a key managed by the directory.
key | registered key |
|
noexceptinherited |
Returns the location metadata of the location this object registered in. noexcept
noexcept
|
inherited |
Advances the epoch of the object.
Advancing the epoch will flush any pending RMIs. It will also increase the epoch of the current gang if the object is not a named object.
|
inherited |
Used by lock_guard
functionality in method of derived classes to request atomicity with respect to incoming RMIs.
Mutates counter in the associated runqueue.
|
inherited |
Used by lock_guard
functionality in method of derived classes to request atomicity with respect to incoming RMIs.
Mutates counter in the associated runqueue.
|
inherited |
Attempt to maintain atomicity with respect to incoming RMIs.
Mutates counter in the associated runqueue.
true
if the lock was able to be acquired. false
if it is already locked.