ndmspc  v1.2.0-0.1.rc3
Ndmspc::NDimensionalExecutor Class Reference

Executes a function over all points in an N-dimensional space, optionally in parallel. More...

#include <NDimensionalExecutor.h>

Classes

struct  IpcSession
 

Public Member Functions

 NDimensionalExecutor (const std::vector< int > &minBounds, const std::vector< int > &maxBounds)
 Constructor from min/max bounds for each dimension. More...
 
 NDimensionalExecutor (THnSparse *hist, bool onlyfilled=false)
 Constructor from THnSparse histogram. More...
 
void SetBounds (const std::vector< int > &minBounds, const std::vector< int > &maxBounds)
 
void Execute (const std::function< void(const std::vector< int > &coords)> &func)
 Execute a function over all coordinates in the N-dimensional space. More...
 
template<typename TObject >
void ExecuteParallel (const std::function< void(const std::vector< int > &coords, TObject &thread_object)> &func, std::vector< TObject > &thread_objects)
 Execute a function in parallel over all coordinates, using thread-local objects. More...
 
size_t ExecuteParallelProcessIpc (std::vector< NThreadData * > &workerObjects, size_t processCount)
 Execute fixed-contract processing in multiple child processes over IPC. More...
 
void StartProcessIpc (std::vector< NThreadData * > &workerObjects, size_t processCount, const std::string &tcpBindEndpoint="", const std::string &jobDir="", const std::string &treeName="ngnt", const std::string &macroList="", const std::string &tmpDir="", const std::string &tmpResultsDir="")
 
size_t ExecuteCurrentBoundsProcessIpc (const std::string &definitionName="", const std::vector< Long64_t > *definitionIds=nullptr, const std::function< void(size_t, size_t)> &progressCallback=nullptr)
 
void FinishProcessIpc (bool abort=false)
 
std::set< size_t > GetRegisteredWorkerIndices () const
 
size_t Dimensions () const
 Returns the number of dimensions. More...
 
const std::vector< int > & GetMinBounds () const
 Returns the minimum bounds for each dimension. More...
 
const std::vector< int > & GetMaxBounds () const
 Returns the maximum bounds for each dimension. More...
 

Private Member Functions

bool Increment ()
 Increment the current coordinates to the next point in the N-dimensional space. More...
 
bool InitTcpWorker (const std::string &identity)
 Sends INIT to a newly-connected TCP worker, waits for ACK, and registers it in identityToWorker / workerIdentityVec.
 
bool HandleBootstrap (const std::string &identity)
 Handles a BOOTSTRAP message from a worker: assigns the next sequential index and replies with a CONFIG frame containing the macro list and env vars.
 

Private Attributes

size_t fNumDimensions
 Number of dimensions.
 
std::vector< int > fMinBounds
 Minimum bounds for each dimension.
 
std::vector< int > fMaxBounds
 Maximum bounds for each dimension.
 
std::vector< int > fCurrentCoords
 Current coordinates during iteration.
 
std::unique_ptr< IpcSessionfIpcSession
 
std::set< size_t > fRegisteredWorkerIndices
 Worker indices that completed registration (TCP mode)
 

Detailed Description

Executes a function over all points in an N-dimensional space, optionally in parallel.

Author
Martin Vala mvala.nosp@m.@cer.nosp@m.n.ch

Definition at line 32 of file NDimensionalExecutor.h.

Constructor & Destructor Documentation

◆ NDimensionalExecutor() [1/2]

Ndmspc::NDimensionalExecutor::NDimensionalExecutor ( const std::vector< int > &  minBounds,
const std::vector< int > &  maxBounds 
)

Constructor from min/max bounds for each dimension.

Parameters
minBoundsMinimum bounds for each dimension.
maxBoundsMaximum bounds for each dimension.

Constructor

Definition at line 116 of file NDimensionalExecutor.cxx.

References fCurrentCoords, fMaxBounds, fMinBounds, and fNumDimensions.

◆ NDimensionalExecutor() [2/2]

Ndmspc::NDimensionalExecutor::NDimensionalExecutor ( THnSparse *  hist,
bool  onlyfilled = false 
)

Constructor from THnSparse histogram.

Parameters
histPointer to THnSparse histogram.
onlyfilledIf true, iterate only filled bins.

Constructor with THnSparse input

Definition at line 169 of file NDimensionalExecutor.cxx.

References fCurrentCoords, fMaxBounds, fMinBounds, and fNumDimensions.

Member Function Documentation

◆ Dimensions()

size_t Ndmspc::NDimensionalExecutor::Dimensions ( ) const
inline

Returns the number of dimensions.

Returns
Number of dimensions.

Definition at line 90 of file NDimensionalExecutor.h.

References fNumDimensions.

◆ Execute()

void Ndmspc::NDimensionalExecutor::Execute ( const std::function< void(const std::vector< int > &coords)> &  func)

Execute a function over all coordinates in the N-dimensional space.

Parameters
funcFunction to execute, taking coordinates as argument.

Sequential Execution

Definition at line 201 of file NDimensionalExecutor.cxx.

References fCurrentCoords, fMinBounds, fNumDimensions, and Increment().

Referenced by Ndmspc::NBinningDef::RefreshContentFromIds(), Ndmspc::NBinningDef::RefreshIdsFromContent(), and Ndmspc::NGnNavigator::Reshape().

◆ ExecuteParallel()

template<typename TObject >
template void Ndmspc::NDimensionalExecutor::ExecuteParallel< NGnThreadData > ( const std::function< void(const std::vector< int > &coords, TObject &thread_object)> &  func,
std::vector< TObject > &  thread_objects 
)

Execute a function in parallel over all coordinates, using thread-local objects.

Execute a function in parallel over all coordinates, using thread-local objects. Handles task distribution, synchronization, and exception propagation.

Template Parameters
TObjectType of thread-local object.
Parameters
funcFunction to execute, taking coordinates and thread-local object.
thread_objectsVector of thread-local objects, one per thread.
Exceptions
std::exceptionIf any worker thread throws, the first exception is rethrown after joining.

Definition at line 224 of file NDimensionalExecutor.cxx.

References fCurrentCoords, fMinBounds, fNumDimensions, Ndmspc::NThreadData::GetAssignedIndex(), Increment(), and Ndmspc::NLogger::SetThreadName().

Referenced by Ndmspc::NGnTree::Process().

◆ ExecuteParallelProcessIpc()

size_t Ndmspc::NDimensionalExecutor::ExecuteParallelProcessIpc ( std::vector< NThreadData * > &  workerObjects,
size_t  processCount 
)

Execute fixed-contract processing in multiple child processes over IPC.

Parameters
workerObjectsWorker objects (NThreadData-derived) used by child processes.
processCountNumber of worker processes to use.
Returns
Number of processed tasks acknowledged by workers.

Definition at line 394 of file NDimensionalExecutor.cxx.

◆ GetMaxBounds()

const std::vector<int>& Ndmspc::NDimensionalExecutor::GetMaxBounds ( ) const
inline

Returns the maximum bounds for each dimension.

Returns
Vector of maximum bounds.

Definition at line 102 of file NDimensionalExecutor.h.

References fMaxBounds.

◆ GetMinBounds()

const std::vector<int>& Ndmspc::NDimensionalExecutor::GetMinBounds ( ) const
inline

Returns the minimum bounds for each dimension.

Returns
Vector of minimum bounds.

Definition at line 96 of file NDimensionalExecutor.h.

References fMinBounds.

◆ Increment()

bool Ndmspc::NDimensionalExecutor::Increment ( )
private

Increment the current coordinates to the next point in the N-dimensional space.

Returns
True if increment was successful, false if end reached.

Definition at line 104 of file NDimensionalExecutor.cxx.

References fCurrentCoords, fMaxBounds, fMinBounds, and fNumDimensions.

Referenced by Execute(), and ExecuteParallel().


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