Thrill  0.1
ReduceNode< ValueType, KeyExtractor, ReduceFunction, ReduceConfig, KeyHashFunction, KeyEqualFunction, VolatileKey, UseDuplicateDetection > Class Template Referencefinal

Detailed Description

template<typename ValueType, typename KeyExtractor, typename ReduceFunction, typename ReduceConfig, typename KeyHashFunction, typename KeyEqualFunction, const bool VolatileKey, bool UseDuplicateDetection>
class thrill::api::ReduceNode< ValueType, KeyExtractor, ReduceFunction, ReduceConfig, KeyHashFunction, KeyEqualFunction, VolatileKey, UseDuplicateDetection >

A DIANode which performs a Reduce operation.

Reduce groups the elements in a DIA by their key and reduces every key bucket to a single element each. The ReduceNode stores the key_extractor and the reduce_function UDFs. The chainable LOps ahead of the Reduce operation are stored in the Stack. The ReduceNode has the type ValueType, which is the result type of the reduce_function.

Template Parameters
ValueTypeOutput type of the Reduce operation
StackFunction stack, which contains the chained lambdas between the last and this DIANode.
KeyExtractorType of the key_extractor function.
ReduceFunctionType of the reduce_function.
VolatileKeyWhether to reuse the key once extracted in during pre reduce (false) or let the post reduce extract the key again (true).

Definition at line 64 of file reduce_by_key.hpp.

+ Inheritance diagram for ReduceNode< ValueType, KeyExtractor, ReduceFunction, ReduceConfig, KeyHashFunction, KeyEqualFunction, VolatileKey, UseDuplicateDetection >:
+ Collaboration diagram for ReduceNode< ValueType, KeyExtractor, ReduceFunction, ReduceConfig, KeyHashFunction, KeyEqualFunction, VolatileKey, UseDuplicateDetection >:

#include <reduce_by_key.hpp>

Classes

class  Emitter
 Emitter for PostPhase to push elements to next DIA object. More...
 

Public Member Functions

template<typename ParentDIA >
 ReduceNode (const ParentDIA &parent, const char *label, const KeyExtractor &key_extractor, const ReduceFunction &reduce_function, const ReduceConfig &config, const KeyHashFunction &key_hash_function, const KeyEqualFunction &key_equal_function)
 Constructor for a ReduceNode. More...
 
void Dispose () final
 Virtual clear method. Triggers actual disposing in sub-classes. More...
 
void Execute () final
 Virtual execution method. Triggers actual computation in sub-classes. More...
 
DIAMemUse PreOpMemUse () final
 Amount of RAM used by PreOp after StartPreOp() More...
 
void ProcessChannel ()
 process the inbound data in the post reduce phase More...
 
void PushData (bool consume) final
 Virtual method for pushing data. Triggers actual pushing in sub-classes. More...
 
DIAMemUse PushDataMemUse () final
 Amount of RAM used by PushData() More...
 
void StartPreOp (size_t) final
 Virtual method for preparing start of PushData. More...
 
void StopPreOp (size_t) final
 Virtual method for preparing end of PushData. More...
 
- Public Member Functions inherited from DOpNode< ValueType >
 DOpNode (Context &ctx, const char *label, const std::initializer_list< size_t > &parent_ids, const std::initializer_list< DIABasePtr > &parents)
 Constructor for a DOpNode, which sets references to the parent nodes. More...
 
 DOpNode (Context &ctx, const char *label, std::vector< size_t > &&parent_ids, std::vector< DIABasePtr > &&parents)
 Constructor for a DOpNode, which sets references to the parent nodes. More...
 
- Public Member Functions inherited from DIANode< ValueType >
 DIANode (Context &ctx, const char *label, const std::initializer_list< size_t > &parent_ids, const std::initializer_list< DIABasePtr > &parents)
 Constructor for a DIANode, which sets references to the parent nodes. More...
 
 DIANode (Context &ctx, const char *label, std::vector< size_t > &&parent_ids, std::vector< DIABasePtr > &&parents)
 Constructor for a DIANode, which sets references to the parent nodes. More...
 
virtual void AddChild (DIABase *node, const Callback &callback=Callback(), size_t parent_index=0)
 Enables children to push their "folded" function chains to their parent. More...
 
std::vector< DIABase * > children () const override
 Returns the children of this DIABase. More...
 
void PushFile (data::File &file, bool consume) const
 
void PushItem (const ValueType &item) const
 Method for derived classes to Push a single item to all children. More...
 
void RemoveAllChildren () override
 
void RemoveChild (DIABase *node) override
 
void RunPushData () override
 
- Public Member Functions inherited from DIABase
 DIABase (Context &ctx, const char *label, const std::initializer_list< size_t > &parent_ids, const std::initializer_list< DIABasePtr > &parents)
 The constructor for a DIABase. More...
 
 DIABase (Context &ctx, const char *label, std::vector< size_t > &&parent_ids, std::vector< DIABasePtr > &&parents)
 The constructor for a DIABase. More...
 
 DIABase (const DIABase &)=delete
 non-copyable: delete copy-constructor More...
 
 DIABase (DIABase &&)=default
 move-constructor: default More...
 
virtual ~DIABase ()
 Virtual destructor for a DIABase. More...
 
virtual size_t consume_counter () const
 Returns consume_counter_. More...
 
Contextcontext ()
 Returns the api::Context of this DIABase. More...
 
virtual void DecConsumeCounter (size_t counter)
 
const size_t & dia_id () const
 return unique id of DIANode subclass as stored by StatsNode More...
 
virtual bool ForwardDataOnly () const
 
virtual void IncConsumeCounter (size_t counter)
 
const char * label () const
 return label() of DIANode subclass as stored by StatsNode More...
 
mem::Managermem_manager ()
 Return the Context's memory manager. More...
 
DIABaseoperator= (const DIABase &)=delete
 non-copyable: delete assignment operator More...
 
DIABaseoperator= (DIABase &&)=default
 move-assignment operator: default More...
 
std::vector< size_t > parent_ids () const
 Returns the parents of this DIABase. More...
 
const std::vector< DIABasePtr > & parents () const
 Returns the parents of this DIABase. More...
 
void RemoveParent (DIABase *p)
 Remove a parent. More...
 
virtual bool RequireParentPushData (size_t) const
 
void RunScope ()
 
void set_mem_limit (const DIAMemUse &mem_limit)
 
void set_state (const DIAState &state)
 
virtual void SetConsumeCounter (size_t counter)
 
DIAState state () const
 
virtual bool OnPreOpFile (const data::File &, size_t)
 
virtual DIAMemUse ExecuteMemUse ()
 Amount of RAM used by Execute() More...
 
- Public Member Functions inherited from ReferenceCounter
 ReferenceCounter () noexcept
 new objects have zero reference count More...
 
 ReferenceCounter (const ReferenceCounter &) noexcept
 coping still creates a new object with zero reference count More...
 
 ~ReferenceCounter ()
 
bool dec_reference () const noexcept
 Call whenever resetting (i.e. More...
 
void inc_reference () const noexcept
 Call whenever setting a pointer to the object. More...
 
ReferenceCounteroperator= (const ReferenceCounter &) noexcept
 assignment operator, leaves pointers unchanged More...
 
size_t reference_count () const noexcept
 Return the number of references to this object (for debugging) More...
 
bool unique () const noexcept
 Test if the ReferenceCounter is referenced by only one CountingPtr. More...
 

Private Types

using HashIndexFunction = core::ReduceByHash< Key, KeyHashFunction >
 
using Key = typename common::FunctionTraits< KeyExtractor >::result_type
 
using Super = DOpNode< ValueType >
 
using TableItem = typename std::conditional< VolatileKey, std::pair< Key, ValueType >, ValueType >::type
 

Private Attributes

data::CatStreamPtr cat_stream_
 
data::Stream::Writers emitters_
 
data::MixStreamPtr mix_stream_
 
core::ReduceByHashPostPhase< TableItem, Key, ValueType, KeyExtractor, ReduceFunction, Emitter, VolatileKey, ReduceConfig, HashIndexFunction, KeyEqualFunction > post_phase_
 
core::ReducePrePhase< TableItem, Key, ValueType, KeyExtractor, ReduceFunction, VolatileKey, data::Stream::Writer, ReduceConfig, HashIndexFunction, KeyEqualFunction, KeyHashFunction, UseDuplicateDetection > pre_phase_
 
bool reduced_ = false
 
std::thread thread_
 handle to additional thread for post phase More...
 

Static Private Attributes

static constexpr bool debug = false
 
static constexpr bool use_mix_stream_ = ReduceConfig::use_mix_stream_
 
static constexpr bool use_post_thread_ = ReduceConfig::use_post_thread_
 

Additional Inherited Members

- Public Types inherited from DOpNode< ValueType >
using Super = DIANode< ValueType >
 
- Public Types inherited from DIANode< ValueType >
using Callback = tlx::delegate< void(const ValueType &)>
 
- Public Types inherited from DIABase
using DIABasePtr = tlx::CountingPtr< DIABase >
 
- Public Attributes inherited from DIABase
common::JsonLogger logger_
 
- Static Public Attributes inherited from DIABase
static constexpr size_t kNeverConsume = static_cast<size_t>(-1)
 Never full consume. More...
 
- Protected Attributes inherited from DIANode< ValueType >
std::vector< Childchildren_
 Callback functions from the child nodes. More...
 
- Protected Attributes inherited from DIABase
Contextcontext_
 associated Context More...
 
const size_t dia_id_
 DIA serial id. More...
 
const char *const label_
 DOp node static label. More...
 
DIAState state_ = DIAState::NEW
 State of the DIANode. State is NEW on creation. More...
 
std::vector< DIABasePtrparents_
 Parents of this DIABase. More...
 
DIAMemUse mem_limit_ = 0
 
size_t consume_counter_ = 1
 

Member Typedef Documentation

◆ HashIndexFunction

using HashIndexFunction = core::ReduceByHash<Key, KeyHashFunction>
private

Definition at line 78 of file reduce_by_key.hpp.

◆ Key

using Key = typename common::FunctionTraits<KeyExtractor>::result_type
private

Definition at line 72 of file reduce_by_key.hpp.

◆ Super

using Super = DOpNode<ValueType>
private

Definition at line 69 of file reduce_by_key.hpp.

◆ TableItem

using TableItem = typename std::conditional< VolatileKey, std::pair<Key, ValueType>, ValueType>::type
private

Definition at line 76 of file reduce_by_key.hpp.

Constructor & Destructor Documentation

◆ ReduceNode()

ReduceNode ( const ParentDIA &  parent,
const char *  label,
const KeyExtractor &  key_extractor,
const ReduceFunction &  reduce_function,
const ReduceConfig &  config,
const KeyHashFunction &  key_hash_function,
const KeyEqualFunction &  key_equal_function 
)
inline

Constructor for a ReduceNode.

Sets the parent, stack, key_extractor and reduce_function.

Definition at line 101 of file reduce_by_key.hpp.

References DIANode< ValueType >::AddChild().

Member Function Documentation

◆ Dispose()

void Dispose ( )
inlinefinalvirtual

Virtual clear method. Triggers actual disposing in sub-classes.

Reimplemented from DIABase.

Definition at line 213 of file reduce_by_key.hpp.

◆ Execute()

void Execute ( )
inlinefinalvirtual

Virtual execution method. Triggers actual computation in sub-classes.

Implements DIABase.

Definition at line 170 of file reduce_by_key.hpp.

◆ PreOpMemUse()

DIAMemUse PreOpMemUse ( )
inlinefinalvirtual

Amount of RAM used by PreOp after StartPreOp()

Reimplemented from DIABase.

Definition at line 136 of file reduce_by_key.hpp.

References DIAMemUse::Max().

◆ ProcessChannel()

void ProcessChannel ( )
inline

process the inbound data in the post reduce phase

Definition at line 192 of file reduce_by_key.hpp.

References sLOG.

◆ PushData()

void PushData ( bool  consume)
inlinefinalvirtual

Virtual method for pushing data. Triggers actual pushing in sub-classes.

Implements DIABase.

Definition at line 176 of file reduce_by_key.hpp.

References DIABase::mem_limit_.

◆ PushDataMemUse()

DIAMemUse PushDataMemUse ( )
inlinefinalvirtual

Amount of RAM used by PushData()

Reimplemented from DIABase.

Definition at line 172 of file reduce_by_key.hpp.

References DIAMemUse::Max().

◆ StartPreOp()

void StartPreOp ( size_t  )
inlinefinalvirtual

Virtual method for preparing start of PushData.

Reimplemented from DIABase.

Definition at line 142 of file reduce_by_key.hpp.

References thrill::common::CreateThread(), LOG, and DIABase::mem_limit_.

◆ StopPreOp()

void StopPreOp ( size_t  )
inlinefinalvirtual

Virtual method for preparing end of PushData.

Reimplemented from DIABase.

Definition at line 157 of file reduce_by_key.hpp.

References LOG.

Member Data Documentation

◆ cat_stream_

data::CatStreamPtr cat_stream_
private

Definition at line 221 of file reduce_by_key.hpp.

◆ debug

constexpr bool debug = false
staticprivate

Definition at line 67 of file reduce_by_key.hpp.

◆ emitters_

data::Stream::Writers emitters_
private

Definition at line 223 of file reduce_by_key.hpp.

◆ mix_stream_

data::MixStreamPtr mix_stream_
private

Definition at line 220 of file reduce_by_key.hpp.

◆ post_phase_

core::ReduceByHashPostPhase< TableItem, Key, ValueType, KeyExtractor, ReduceFunction, Emitter, VolatileKey, ReduceConfig, HashIndexFunction, KeyEqualFunction> post_phase_
private

Definition at line 236 of file reduce_by_key.hpp.

◆ pre_phase_

core::ReducePrePhase< TableItem, Key, ValueType, KeyExtractor, ReduceFunction, VolatileKey, data::Stream::Writer, ReduceConfig, HashIndexFunction, KeyEqualFunction, KeyHashFunction, UseDuplicateDetection> pre_phase_
private

Definition at line 231 of file reduce_by_key.hpp.

◆ reduced_

bool reduced_ = false
private

Definition at line 238 of file reduce_by_key.hpp.

◆ thread_

std::thread thread_
private

handle to additional thread for post phase

Definition at line 225 of file reduce_by_key.hpp.

◆ use_mix_stream_

constexpr bool use_mix_stream_ = ReduceConfig::use_mix_stream_
staticprivate

Definition at line 80 of file reduce_by_key.hpp.

◆ use_post_thread_

constexpr bool use_post_thread_ = ReduceConfig::use_post_thread_
staticprivate

Definition at line 81 of file reduce_by_key.hpp.


The documentation for this class was generated from the following file: