SG++-Doxygen-Documentation
|
#include <MPIMethods.hpp>
Static Public Member Functions | |
static void | assignBatch (int workerID, size_t batchOffset, size_t batchSize, bool doCrossValidation) |
Tell a worker to learn from a batch. More... | |
static void | assignSystemMatrixUpdate (int workerID, size_t classIndex) |
Assign the task of updating the system matrix to the specified worker for processing. More... | |
static void | bcastCommandNoArgs (MPI_COMMAND_ID commandId) |
Broadcast a command that does not require any additional information. More... | |
template<typename Iterator > | |
static size_t | fillBufferWithData (void *buffer, void *bufferEnd, Iterator &iterator, Iterator &listEnd) |
Copy data from a specified iterator type into a message's payload. More... | |
static size_t | fillBufferWithLevelIndexData (void *buffer, const void *bufferEnd, std::list< std::vector< LevelIndexPair >>::iterator &iterator, std::list< std::vector< LevelIndexPair >>::const_iterator &listEnd) |
Copy the level index data for as many grid points as possible into the buffer specified. More... | |
static void | finalizeMPI () |
Cancel any remaining requests and shutdown the MPI communicator. More... | |
static size_t | getQueueSize () |
Check how many pending MPI requests have been registered and not completed yet. More... | |
static unsigned int | getWorldSize () |
Get the number of nodes participating in the current problem. More... | |
static bool | hasPendingOutgoingRequests () |
Check whether there are any outgoing open MPI requests that have not completed yet. More... | |
static void | initMPI (LearnerSGDEOnOffParallel *learnerInstance) |
Initializes the MPI setup for the specified learner. More... | |
static bool | isMaster () |
Check whether the current role of this node is master. More... | |
static void | processCompletedMPIRequests () |
Process any asynchronous MPI requests that completed but have not been processed yet. More... | |
static void | processIncomingMPICommands (PendingMPIRequest &pendingMPIRequest) |
Process a specific completed MPI request. More... | |
static void | receiveGridComponentsUpdate (sgpp::datadriven::RefinementResultNetworkMessage *networkMessage) |
Receive potentially segmented message that contains modifications to the grid. More... | |
static void | sendCommandNoArgs (int destinationRank, MPI_COMMAND_ID commandId) |
Send an MPI command using point to point communication without any further payload. More... | |
static PendingMPIRequest & | sendIBcast (MPI_Packet *mpiPacket) |
Send an assembled packet as an MPI Broadcast from the master. More... | |
static PendingMPIRequest & | sendISend (int destinationRank, MPI_Packet *mpiPacket, size_t packetSize=sizeof(MPI_Packet), bool highPriority=false) |
Send an MPI packet to a target destination asynchronously. More... | |
static size_t | sendMergeGridNetworkMessage (size_t classIndex, size_t batchOffset, size_t batchSize, base::DataVector &alphaVector) |
Send the results of training back to the master node for merging. More... | |
static void | sendRefinementUpdates (size_t &classIndex, std::list< size_t > &deletedGridPointsIndices, std::list< LevelIndexVector > &addedGridPoints) |
Send the refinement updates for a specified class to all workers over a broadcast. More... | |
static void | sendSystemMatrixDecomposition (const size_t &classIndex, sgpp::base::DataMatrix &newSystemMatrixDecomposition, int mpiTarget) |
Send a new system matrix decomposition with either broadcast or normal send. More... | |
static void | waitForAnyMPIRequestsToComplete () |
Wait for any of the currently pending MPI requests to complete and process them. More... | |
static void | waitForGridConsistent (size_t classIndex) |
Wait for a specific grid to return to its consistent state before continuing. More... | |
static void | waitForIncomingMessageType (MPI_COMMAND_ID commandId, unsigned int numOccurrences=1, std::function< bool(PendingMPIRequest &)> predicate=[](PendingMPIRequest &request) { return true;}) |
Wait for an incoming message of the specified type. More... | |
Static Protected Member Functions | |
static size_t | calculateTotalPacketSize (size_t containedPacketSize) |
Calculate the size of an MPI_Packet based on the size of its contained payload. More... | |
static PendingMPIRequest & | createPendingMPIRequest (MPI_Packet *mpiPacket, bool isInbound) |
Create a pending MPI request for the specified packet in preparation to sending it. More... | |
static std::list< sgpp::datadriven::MessageTrackRequest >::iterator | createTrackRequest (unsigned int numOccurrences, const std::function< bool(PendingMPIRequest &)> &predicate) |
Create a message track request that tests each message against a predicate until the target number of occurences are found. More... | |
static unsigned int | executeMPIWaitAny () |
Wait for any of the requests in the MPI request pool to complete. More... | |
static std::list< sgpp::datadriven::PendingMPIRequest >::iterator | findPendingMPIRequest (unsigned int completedRequestIndex) |
Find a PendingMPIRequest from the index of the completed MPI_Request structure in the pool storage. More... | |
static void | handleIncomingRequestFromCallback (PendingMPIRequest &request) |
Callback function that processes the request and zeros then memory region afterwards. More... | |
static void | processCompletedMPIRequest (const std::list< sgpp::datadriven::PendingMPIRequest >::iterator &pendingMPIRequestIterator) |
Process a specific completed MPI request from its position in the request list. More... | |
static void | receiveMergeGridNetworkMessage (MergeGridNetworkMessage &networkMessage) |
Receive a packet of changes from the master and apply them to the grid and refinement result or to the system matrix decomposition. More... | |
static void | runBatch (MPI_Packet *assignBatchMessage) |
Learn from a batch based on the instructions in the specified packet. More... | |
Static Protected Attributes | |
static LearnerSGDEOnOffParallel * | learnerInstance |
The instance of the learner for which MPI communications are currently being handled. More... | |
static std::list< MessageTrackRequest > | messageTrackRequests |
Structure to track any pending tracking requests that need to be checked on every incoming message. More... | |
static MPIRequestPool | mpiRequestStorage |
Structure to hold the actual MPI_Request structures in memory sequentially along with the additional information for each request. More... | |
static unsigned int | mpiWorldSize = 0 |
The number of participating nodes for solving the problem. More... | |
static std::list< PendingMPIRequest > | pendingMPIRequests |
Structure to track all pending MPI requests that have been registered but not completed. More... | |
|
static |
Tell a worker to learn from a batch.
workerID | The MPI rank of the worker to command. |
batchOffset | The offset from the start of the training set to learn from. |
batchSize | The size of the batch to learn from. |
doCrossValidation | Whether to apply cross-validation |
References sgpp::datadriven::ASSIGN_BATCH, sgpp::datadriven::AssignBatchNetworkMessage::batchOffset, calculateTotalPacketSize(), sgpp::datadriven::MPI_Packet::commandID, and sendISend().
Referenced by sgpp::datadriven::LearnerSGDEOnOffParallel::assignBatchToWorker().
|
static |
Assign the task of updating the system matrix to the specified worker for processing.
workerID | The MPI rank of the worker to assign to. |
classIndex | The class index of the system matrix to update. |
References calculateTotalPacketSize(), sgpp::datadriven::MPI_Packet::commandID, sgpp::datadriven::COMPUTE_UPDATE_SYSTEM_MATRIX_DECOMPOSITION, sgpp::datadriven::LearnerSGDEOnOffParallel::getLocalGridVersion(), sgpp::datadriven::AssignSystemMatrixUpdateNetworkMessage::gridversion, learnerInstance, and sendISend().
Referenced by sgpp::datadriven::RefinementHandler::updateClassVariablesAfterRefinement().
|
static |
Broadcast a command that does not require any additional information.
commandId | The command to broadcast |
References sgpp::datadriven::MPI_Packet::commandID, and sendIBcast().
Referenced by sgpp::datadriven::LearnerSGDEOnOffParallel::shutdownMPINodes().
|
staticprotected |
Calculate the size of an MPI_Packet based on the size of its contained payload.
containedPacketSize | The size of the contained payload. |
References sgpp::datadriven::MPI_Packet::payload.
Referenced by assignBatch(), and assignSystemMatrixUpdate().
|
staticprotected |
Create a pending MPI request for the specified packet in preparation to sending it.
mpiPacket | The packet of data for the request. |
isInbound | Whether the request is an inbound request. |
References sgpp::datadriven::PendingMPIRequest::buffer, sgpp::datadriven::PendingMPIRequest::callback, D, sgpp::datadriven::PendingMPIRequest::disposeAfterCallback, sgpp::datadriven::PendingMPIRequest::inbound, mpiRequestStorage, and pendingMPIRequests.
Referenced by initMPI(), sendIBcast(), and sendISend().
|
staticprotected |
Create a message track request that tests each message against a predicate until the target number of occurences are found.
numOccurrences | How many successful matches are required. |
predicate | The predicate to test messages against. |
References messageTrackRequests.
Referenced by waitForIncomingMessageType().
|
staticprotected |
Wait for any of the requests in the MPI request pool to complete.
References CHECK_INT_TO_UINT, CHECK_SIZE_T_TO_INT, python.leja::count, D, sgpp::datadriven::MPIRequestPool::getMPIRequests(), mpiRequestStorage, pendingMPIRequests, and sgpp::datadriven::MPIRequestPool::size().
Referenced by waitForAnyMPIRequestsToComplete(), and waitForIncomingMessageType().
|
static |
Copy data from a specified iterator type into a message's payload.
Iterator | The type of iterator used to read values to copy. |
buffer | The start of the buffer to copy to. |
bufferEnd | The end of the buffer to copy to. |
iterator | The start of the data to copy from. |
listEnd | The end of the data to copy from. |
Referenced by sendMergeGridNetworkMessage(), and sendSystemMatrixDecomposition().
|
static |
Copy the level index data for as many grid points as possible into the buffer specified.
buffer | The start of the buffer to copy to. |
bufferEnd | The end of the buffer to copy to. |
iterator | The start of the data to copy. |
listEnd | The end of the data to copy. |
Referenced by sendRefinementUpdates().
|
static |
Cancel any remaining requests and shutdown the MPI communicator.
May be called only once during a programs runtime. Collectives (for example MPI_Ibcast) cannot be cancelled. These must complete before calling this method.
References pendingMPIRequests.
Referenced by sgpp::datadriven::LearnerSGDEOnOffParallel::~LearnerSGDEOnOffParallel().
|
staticprotected |
Find a PendingMPIRequest from the index of the completed MPI_Request structure in the pool storage.
completedRequestIndex | The index of the completed MPI_Request in the MPIRequestPool. |
References pendingMPIRequests.
Referenced by waitForAnyMPIRequestsToComplete(), and waitForIncomingMessageType().
|
static |
Check how many pending MPI requests have been registered and not completed yet.
References pendingMPIRequests.
Referenced by sgpp::datadriven::LearnerSGDEOnOffParallel::trainParallel().
|
static |
Get the number of nodes participating in the current problem.
References mpiWorldSize.
Referenced by sgpp::datadriven::RoundRobinScheduler::assignTaskStaticTaskSize(), and sgpp::datadriven::LearnerSGDEOnOffParallel::shutdownMPINodes().
|
staticprotected |
Callback function that processes the request and zeros then memory region afterwards.
References sgpp::datadriven::PendingMPIRequest::buffer, D, and processIncomingMPICommands().
Referenced by initMPI().
|
static |
Check whether there are any outgoing open MPI requests that have not completed yet.
References pendingMPIRequests.
Referenced by sgpp::datadriven::LearnerSGDEOnOffParallel::trainParallel().
|
static |
Initializes the MPI setup for the specified learner.
This may only be called once, as it calls MPI_Init.
learnerInstance | The instance of the learner to handle MPI communication for. |
References CHECK_INT_TO_UINT, createPendingMPIRequest(), D, handleIncomingRequestFromCallback(), isMaster(), learnerInstance, MPI_MASTER_RANK, MPI_MAX_PROCESSOR_NAME_LENGTH, MPI_TAG_HIGH_PRIORITY_NO_BLOCK, MPI_TAG_STANDARD_COMMAND, and mpiWorldSize.
Referenced by sgpp::datadriven::LearnerSGDEOnOffParallel::LearnerSGDEOnOffParallel().
|
static |
Check whether the current role of this node is master.
References MPI_MASTER_RANK.
Referenced by initMPI(), receiveGridComponentsUpdate(), sgpp::datadriven::LearnerSGDEOnOffParallel::shutdownMPINodes(), sgpp::datadriven::LearnerSGDEOnOffParallel::trainParallel(), and sgpp::datadriven::RefinementHandler::updateClassVariablesAfterRefinement().
|
staticprotected |
Process a specific completed MPI request from its position in the request list.
pendingMPIRequestIterator | The position of the completed MPI request. |
References D, messageTrackRequests, and pendingMPIRequests.
Referenced by processCompletedMPIRequests(), waitForAnyMPIRequestsToComplete(), and waitForIncomingMessageType().
|
static |
Process any asynchronous MPI requests that completed but have not been processed yet.
References D, pendingMPIRequests, and processCompletedMPIRequest().
Referenced by sgpp::datadriven::LearnerSGDEOnOffParallel::trainParallel().
|
static |
Process a specific completed MPI request.
pendingMPIRequest | The completed MPI request. |
References sgpp::datadriven::ASSIGN_BATCH, sgpp::datadriven::PendingMPIRequest::buffer, sgpp::datadriven::MPI_Packet::commandID, sgpp::datadriven::COMPUTE_UPDATE_SYSTEM_MATRIX_DECOMPOSITION, sgpp::datadriven::LearnerSGDEOnOffParallel::computeNewSystemMatrixDecomposition(), D, sgpp::datadriven::PendingMPIRequest::disposeAfterCallback, learnerInstance, sgpp::datadriven::MERGE_GRID, sgpp::datadriven::NULL_COMMAND, sgpp::datadriven::MPI_Packet::payload, receiveGridComponentsUpdate(), receiveMergeGridNetworkMessage(), runBatch(), sgpp::datadriven::SHUTDOWN, sgpp::datadriven::LearnerSGDEOnOffParallel::shutdownMPINodes(), sgpp::datadriven::UPDATE_GRID, and sgpp::datadriven::WORKER_SHUTDOWN_SUCCESS.
Referenced by handleIncomingRequestFromCallback().
|
static |
Receive potentially segmented message that contains modifications to the grid.
Extract the data into a refinement result and apply to grid or apply to system matrix. This includes additions, deletions, and system matrix updates.
networkMessage | The message containing the modification data. |
References sgpp::datadriven::ADDED_GRID_POINTS_LIST, sgpp::datadriven::RefinementResult::addedGridPoints, sgpp::datadriven::ASSIGN_BATCH, sgpp::datadriven::LearnerSGDEOnOffParallel::checkGridStateConsistent(), sgpp::datadriven::RefinementResultNetworkMessage::classIndex, D, sgpp::datadriven::DELETED_GRID_POINTS_LIST, sgpp::datadriven::RefinementResult::deletedGridPointsIndices, sgpp::datadriven::LearnerSGDEOnOffParallel::getDensityFunctions(), sgpp::datadriven::LearnerSGDEOnOffParallel::getDimensionality(), sgpp::datadriven::LearnerSGDEOnOffParallel::getGrid(), sgpp::datadriven::LearnerSGDEOnOffParallel::getLocalGridVersion(), sgpp::datadriven::LearnerSGDEOnOffParallel::getRefinementHandler(), sgpp::datadriven::RefinementHandler::getRefinementResult(), GRID_RECEIVED_ADDED_POINTS, GRID_TEMPORARILY_INCONSISTENT, sgpp::datadriven::RefinementResultNetworkMessage::gridversion, isMaster(), sgpp::datadriven::LearnerSGDEOnOffParallel::isVersionConsistent(), learnerInstance, sgpp::datadriven::RefinementResultNetworkMessage::listLength, sgpp::datadriven::RefinementResultNetworkMessage::payload, sgpp::base::DataMatrix::resizeRowsCols(), sendSystemMatrixDecomposition(), sgpp::datadriven::LearnerSGDEOnOffParallel::setLocalGridVersion(), sgpp::datadriven::SYSTEM_MATRIX_DECOMPOSITION, sgpp::datadriven::RefinementHandler::updateClassVariablesAfterRefinement(), sgpp::datadriven::RefinementResultNetworkMessage::updateType, and waitForIncomingMessageType().
Referenced by processIncomingMPICommands().
|
staticprotected |
Receive a packet of changes from the master and apply them to the grid and refinement result or to the system matrix decomposition.
networkMessage | The packet containing the changes |
References sgpp::datadriven::MergeGridNetworkMessage::alphaTotalSize, sgpp::datadriven::MergeGridNetworkMessage::batchOffset, sgpp::datadriven::MergeGridNetworkMessage::batchSize, sgpp::datadriven::MergeGridNetworkMessage::classIndex, D, sgpp::datadriven::MergeGridNetworkMessage::gridversion, learnerInstance, sgpp::datadriven::LearnerSGDEOnOffParallel::mergeAlphaValues(), sgpp::datadriven::MergeGridNetworkMessage::payload, sgpp::datadriven::MergeGridNetworkMessage::payloadLength, and sgpp::datadriven::MergeGridNetworkMessage::payloadOffset.
Referenced by processIncomingMPICommands().
|
staticprotected |
Learn from a batch based on the instructions in the specified packet.
assignBatchMessage | The packet specifying learning parameters. |
References D, dataset, sgpp::datadriven::LearnerSGDEOnOffParallel::getDimensionality(), learnerInstance, sgpp::datadriven::MPI_Packet::payload, and sgpp::datadriven::LearnerSGDEOnOffParallel::workBatch().
Referenced by processIncomingMPICommands().
|
static |
Send an MPI command using point to point communication without any further payload.
destinationRank | The MPI rank of the receiving node. |
commandId | The command to send. |
References sgpp::datadriven::MPI_Packet::commandID, and sendISend().
Referenced by sgpp::datadriven::LearnerSGDEOnOffParallel::trainParallel().
|
static |
Send an assembled packet as an MPI Broadcast from the master.
mpiPacket | The packet to transmit. |
References createPendingMPIRequest(), D, sgpp::datadriven::PendingMPIRequest::getMPIRequestFromHandle(), and MPI_MASTER_RANK.
Referenced by bcastCommandNoArgs(), sendRefinementUpdates(), and sendSystemMatrixDecomposition().
|
static |
Send an MPI packet to a target destination asynchronously.
destinationRank | The MPI rank of the destination. |
mpiPacket | The MPI packet to send. |
packetSize | The size of the MPI packet to send, defaults to the entire packet. |
highPriority | Whether to send the packet on the high priority no_wait channel. |
References CHECK_SIZE_T_TO_INT, createPendingMPIRequest(), D, sgpp::datadriven::PendingMPIRequest::getMPIRequestFromHandle(), MPI_TAG_HIGH_PRIORITY_NO_BLOCK, and MPI_TAG_STANDARD_COMMAND.
Referenced by assignBatch(), assignSystemMatrixUpdate(), sendCommandNoArgs(), sendMergeGridNetworkMessage(), and sendSystemMatrixDecomposition().
|
static |
Send the results of training back to the master node for merging.
classIndex | The index of the class to send results for. |
batchOffset | The offset from the start of the dataset used in this batch. |
batchSize | The size of the current batch. |
alphaVector | The results vector to transmit. |
References sgpp::datadriven::MergeGridNetworkMessage::classIndex, sgpp::datadriven::MPI_Packet::commandID, D, fillBufferWithData(), sgpp::datadriven::LearnerSGDEOnOffParallel::getLocalGridVersion(), learnerInstance, sgpp::datadriven::MERGE_GRID, MPI_MASTER_RANK, and sendISend().
Referenced by sgpp::datadriven::LearnerSGDEOnOffParallel::workBatch().
|
static |
Send the refinement updates for a specified class to all workers over a broadcast.
classIndex | The index of the modified class. |
deletedGridPointsIndices | The list containing deleted grid points indices. |
addedGridPoints | The coordinates of any added grid points. |
References sgpp::datadriven::ADDED_GRID_POINTS_LIST, sgpp::datadriven::RefinementResultNetworkMessage::classIndex, sgpp::datadriven::MPI_Packet::commandID, D, sgpp::datadriven::DELETED_GRID_POINTS_LIST, fillBufferWithLevelIndexData(), GRID_RECEIVED_ADDED_POINTS, GRID_RECEIVED_DELETED_INDEXES, GRID_TEMPORARILY_INCONSISTENT, sendIBcast(), and sgpp::datadriven::UPDATE_GRID.
Referenced by sgpp::datadriven::RefinementHandler::updateClassVariablesAfterRefinement().
|
static |
Send a new system matrix decomposition with either broadcast or normal send.
classIndex | The class index of the new system matrix decomposition |
newSystemMatrixDecomposition | The new system matrix decomposition |
mpiTarget | The MPI rank to send the decomposition to. Use MPI_ANY_SOURCE for broadcast. |
References sgpp::datadriven::RefinementResultNetworkMessage::classIndex, sgpp::datadriven::MPI_Packet::commandID, D, fillBufferWithData(), sgpp::datadriven::LearnerSGDEOnOffParallel::getLocalGridVersion(), sgpp::base::DataMatrix::getNcols(), sgpp::base::DataMatrix::getNrows(), GRID_TEMPORARILY_INCONSISTENT, learnerInstance, sgpp::datadriven::RefinementResultSystemMatrixNetworkMessage::matrixWidth, sendIBcast(), sendISend(), sgpp::datadriven::SYSTEM_MATRIX_DECOMPOSITION, and sgpp::datadriven::UPDATE_GRID.
Referenced by sgpp::datadriven::LearnerSGDEOnOffParallel::computeNewSystemMatrixDecomposition(), and receiveGridComponentsUpdate().
|
static |
Wait for any of the currently pending MPI requests to complete and process them.
References executeMPIWaitAny(), findPendingMPIRequest(), and processCompletedMPIRequest().
Referenced by sgpp::datadriven::LearnerSGDEOnOffParallel::trainParallel().
|
static |
Wait for a specific grid to return to its consistent state before continuing.
classIndex | The grid's class index. |
References sgpp::datadriven::LearnerSGDEOnOffParallel::checkGridStateConsistent(), D, sgpp::datadriven::LearnerSGDEOnOffParallel::getLocalGridVersion(), learnerInstance, sgpp::datadriven::UPDATE_GRID, and waitForIncomingMessageType().
Referenced by sgpp::datadriven::LearnerSGDEOnOffParallel::mergeAlphaValues(), and sgpp::datadriven::LearnerSGDEOnOffParallel::waitForAllGridsConsistent().
|
static |
Wait for an incoming message of the specified type.
Can optionally include a number of occurences to wait for and a predicate to test each message against.
commandId | The command id of the target packet. |
numOccurrences | The number of specified messages to receive. |
predicate | A predicate to test each message against. |
References sgpp::datadriven::PendingMPIRequest::buffer, sgpp::datadriven::MPI_Packet::commandID, createTrackRequest(), D, executeMPIWaitAny(), findPendingMPIRequest(), sgpp::datadriven::PendingMPIRequest::inbound, messageTrackRequests, and processCompletedMPIRequest().
Referenced by sgpp::datadriven::LearnerSGDEOnOffParallel::computeNewSystemMatrixDecomposition(), sgpp::datadriven::LearnerSGDEOnOffParallel::doRefinementForAll(), receiveGridComponentsUpdate(), sgpp::datadriven::LearnerSGDEOnOffParallel::shutdownMPINodes(), and waitForGridConsistent().
|
staticprotected |
The instance of the learner for which MPI communications are currently being handled.
Referenced by assignSystemMatrixUpdate(), initMPI(), processIncomingMPICommands(), receiveGridComponentsUpdate(), receiveMergeGridNetworkMessage(), runBatch(), sendMergeGridNetworkMessage(), sendSystemMatrixDecomposition(), and waitForGridConsistent().
|
staticprotected |
Structure to track any pending tracking requests that need to be checked on every incoming message.
Referenced by createTrackRequest(), processCompletedMPIRequest(), and waitForIncomingMessageType().
|
staticprotected |
Structure to hold the actual MPI_Request structures in memory sequentially along with the additional information for each request.
Referenced by createPendingMPIRequest(), and executeMPIWaitAny().
|
staticprotected |
The number of participating nodes for solving the problem.
Referenced by getWorldSize(), and initMPI().
|
staticprotected |
Structure to track all pending MPI requests that have been registered but not completed.
Referenced by createPendingMPIRequest(), executeMPIWaitAny(), finalizeMPI(), findPendingMPIRequest(), getQueueSize(), hasPendingOutgoingRequests(), processCompletedMPIRequest(), and processCompletedMPIRequests().