AshanGimhana's picture
Upload folder using huggingface_hub
9375c9a verified
// Copyright (C) 2012 Davis E. King ([email protected])
// License: Boost Software License See LICENSE.txt for the full license.
#undef DLIB_BsP_ABSTRACT_Hh_
#ifdef DLIB_BsP_ABSTRACT_Hh_
#include "../noncopyable.h"
#include "../sockets/sockets_extensions_abstract.h"
#include <vector>
namespace dlib
{
// ----------------------------------------------------------------------------------------
class bsp_context : noncopyable
{
/*!
WHAT THIS OBJECT REPRESENTS
This is a tool used to implement algorithms using the Bulk Synchronous
Parallel (BSP) computing model. A BSP algorithm is composed of a number of
processing nodes, each executing in parallel. The general flow of
execution in each processing node is the following:
1. Do work locally on some data.
2. Send some messages to other nodes.
3. Receive messages from other nodes.
4. Go to step 1 or terminate if complete.
To do this, each processing node needs an API used to send and receive
messages. This API is implemented by the bsp_connect object which provides
these services to a BSP node.
Note that BSP processing nodes are spawned using the bsp_connect() and
bsp_listen() routines defined at the bottom of this file. For example, to
start a BSP algorithm consisting of N processing nodes, you would make N-1
calls to bsp_listen() and one call to bsp_connect(). The call to
bsp_connect() then initiates the computation on all nodes.
Finally, note that there is no explicit barrier synchronization function
you call at the end of step 3. Instead, you can simply call a method such
as try_receive() until it returns false. That is, the bsp_context's
receive methods incorporate a barrier synchronization that happens once all
the BSP nodes are blocked on receive calls and there are no more messages
in flight.
THREAD SAFETY
This object is not thread-safe. In particular, you should only ever have
one thread that works with an instance of this object. This means that,
for example, you should not spawn sub-threads from within a BSP processing
node and have them invoke methods on this object. Instead, you should only
invoke this object's methods from within the BSP processing node's main
thread (i.e. the thread that executes the user supplied function funct()).
!*/
public:
template <typename T>
void send(
const T& item,
unsigned long target_node_id
);
/*!
requires
- item is serializable
- target_node_id < number_of_nodes()
- target_node_id != node_id()
ensures
- sends a copy of item to the node with the given id.
throws
- dlib::socket_error:
This exception is thrown if there is an error which prevents us from
delivering the message to the given node. One way this might happen is
if the target node has already terminated its execution or has lost
network connectivity.
!*/
template <typename T>
void broadcast (
const T& item
);
/*!
ensures
- item is serializable
- sends a copy of item to all other processing nodes.
throws
- dlib::socket_error
This exception is thrown if there is an error which prevents us from
delivering a message to one of the other nodes. This might happen, for
example, if one of the nodes has terminated its execution or has lost
network connectivity.
!*/
unsigned long node_id (
) const;
/*!
ensures
- Returns the id of the current processing node. That is,
returns a number N such that:
- N < number_of_nodes()
- N == the node id of the processing node that called node_id(). This
is a number that uniquely identifies the processing node.
!*/
unsigned long number_of_nodes (
) const;
/*!
ensures
- returns the number of processing nodes participating in the BSP
computation.
!*/
template <typename T>
bool try_receive (
T& item
);
/*!
requires
- item is serializable
ensures
- if (this function returns true) then
- #item == the next message which was sent to the calling processing
node.
- else
- The following must have been true for this function to return false:
- All other nodes were blocked on calls to receive(),
try_receive(), or have terminated.
- There were not any messages in flight between any nodes.
- That is, if all the nodes had continued to block on receive
methods then they all would have blocked forever. Therefore,
this function only returns false once there are no more messages
to process by any node and there is no possibility of more being
generated until control is returned to the callers of receive
methods.
- When one BSP node's receive method returns because of the above
conditions then all of them will also return. That is, it is NOT the
case that just a subset of BSP nodes unblock. Moreover, they all
unblock at the same time.
throws
- dlib::socket_error:
This exception is thrown if some error occurs which prevents us from
communicating with other processing nodes.
- dlib::serialization_error or any exception thrown by the global
deserialize(T) routine:
This is thrown if there is a problem in deserialize(). This might
happen if the message sent doesn't match the type T expected by
try_receive().
!*/
template <typename T>
void receive (
T& item
);
/*!
requires
- item is serializable
ensures
- #item == the next message which was sent to the calling processing
node.
- This function is just a wrapper around try_receive() that throws an
exception if a message is not received (i.e. if try_receive() returns
false).
throws
- dlib::socket_error:
This exception is thrown if some error occurs which prevents us from
communicating with other processing nodes or if there was not a message
to receive.
- dlib::serialization_error or any exception thrown by the global
deserialize(T) routine:
This is thrown if there is a problem in deserialize(). This might
happen if the message sent doesn't match the type T expected by
receive().
!*/
template <typename T>
bool try_receive (
T& item,
unsigned long& sending_node_id
);
/*!
requires
- item is serializable
ensures
- if (this function returns true) then
- #item == the next message which was sent to the calling processing
node.
- #sending_node_id == the node id of the node that sent this message.
- #sending_node_id < number_of_nodes()
- else
- The following must have been true for this function to return false:
- All other nodes were blocked on calls to receive(),
try_receive(), or have terminated.
- There were not any messages in flight between any nodes.
- That is, if all the nodes had continued to block on receive
methods then they all would have blocked forever. Therefore,
this function only returns false once there are no more messages
to process by any node and there is no possibility of more being
generated until control is returned to the callers of receive
methods.
- When one BSP node's receive method returns because of the above
conditions then all of them will also return. That is, it is NOT the
case that just a subset of BSP nodes unblock. Moreover, they all
unblock at the same time.
throws
- dlib::socket_error:
This exception is thrown if some error occurs which prevents us from
communicating with other processing nodes.
- dlib::serialization_error or any exception thrown by the global
deserialize(T) routine:
This is thrown if there is a problem in deserialize(). This might
happen if the message sent doesn't match the type T expected by
try_receive().
!*/
template <typename T>
void receive (
T& item,
unsigned long& sending_node_id
);
/*!
requires
- item is serializable
ensures
- #item == the next message which was sent to the calling processing node.
- #sending_node_id == the node id of the node that sent this message.
- #sending_node_id < number_of_nodes()
- This function is just a wrapper around try_receive() that throws an
exception if a message is not received (i.e. if try_receive() returns
false).
throws
- dlib::socket_error:
This exception is thrown if some error occurs which prevents us from
communicating with other processing nodes or if there was not a message
to receive.
- dlib::serialization_error or any exception thrown by the global
deserialize(T) routine:
This is thrown if there is a problem in deserialize(). This might
happen if the message sent doesn't match the type T expected by
receive().
!*/
void receive (
);
/*!
ensures
- Waits for the following to all be true:
- All other nodes were blocked on calls to receive(), try_receive(), or
have terminated.
- There are not any messages in flight between any nodes.
- That is, if all the nodes had continued to block on receive methods
then they all would have blocked forever. Therefore, this function
only returns once there are no more messages to process by any node
and there is no possibility of more being generated until control is
returned to the callers of receive methods.
- When one BSP node's receive method returns because of the above
conditions then all of them will also return. That is, it is NOT the
case that just a subset of BSP nodes unblock. Moreover, they all unblock
at the same time.
throws
- dlib::socket_error:
This exception is thrown if some error occurs which prevents us from
communicating with other processing nodes or if a message is received
before this function would otherwise return.
!*/
};
// ----------------------------------------------------------------------------------------
// ----------------------------------------------------------------------------------------
template <
typename funct_type
>
void bsp_connect (
const std::vector<network_address>& hosts,
funct_type funct
);
/*!
requires
- let CONTEXT be an instance of a bsp_context object. Then:
- funct(CONTEXT) must be a valid expression
(i.e. funct must be a function or function object)
ensures
- This function spawns a BSP job consisting of hosts.size()+1 processing nodes.
- The processing node with a node ID of 0 will run locally on the machine
calling bsp_connect(). In particular, this node will execute funct(CONTEXT),
which is expected to carry out this node's portion of the BSP computation.
- The other processing nodes are executed on the hosts indicated by the input
argument. In particular, this function interprets hosts as a list addresses
identifying machines running the bsp_listen() or bsp_listen_dynamic_port()
routines.
- This call to bsp_connect() blocks until the BSP computation has completed on
all processing nodes.
throws
- dlib::socket_error
This exception is thrown if there is an error which prevents the BSP
job from executing.
- Any exception thrown by funct() will be propagated out of this call to
bsp_connect().
!*/
// ----------------------------------------------------------------------------------------
template <
typename funct_type,
typename ARG1
>
void bsp_connect (
const std::vector<network_address>& hosts,
funct_type funct,
ARG1 arg1
);
/*!
requires
- let CONTEXT be an instance of a bsp_context object. Then:
- funct(CONTEXT,arg1) must be a valid expression
(i.e. funct must be a function or function object)
ensures
- This function spawns a BSP job consisting of hosts.size()+1 processing nodes.
- The processing node with a node ID of 0 will run locally on the machine
calling bsp_connect(). In particular, this node will execute funct(CONTEXT,arg1),
which is expected to carry out this node's portion of the BSP computation.
- The other processing nodes are executed on the hosts indicated by the input
argument. In particular, this function interprets hosts as a list addresses
identifying machines running the bsp_listen() or bsp_listen_dynamic_port()
routines.
- This call to bsp_connect() blocks until the BSP computation has completed on
all processing nodes.
throws
- dlib::socket_error
This exception is thrown if there is an error which prevents the BSP
job from executing.
- Any exception thrown by funct() will be propagated out of this call to
bsp_connect().
!*/
// ----------------------------------------------------------------------------------------
template <
typename funct_type,
typename ARG1,
typename ARG2
>
void bsp_connect (
const std::vector<network_address>& hosts,
funct_type funct,
ARG1 arg1,
ARG2 arg2
);
/*!
requires
- let CONTEXT be an instance of a bsp_context object. Then:
- funct(CONTEXT,arg1,arg2) must be a valid expression
(i.e. funct must be a function or function object)
ensures
- This function spawns a BSP job consisting of hosts.size()+1 processing nodes.
- The processing node with a node ID of 0 will run locally on the machine
calling bsp_connect(). In particular, this node will execute funct(CONTEXT,arg1,arg2),
which is expected to carry out this node's portion of the BSP computation.
- The other processing nodes are executed on the hosts indicated by the input
argument. In particular, this function interprets hosts as a list addresses
identifying machines running the bsp_listen() or bsp_listen_dynamic_port()
routines.
- This call to bsp_connect() blocks until the BSP computation has completed on
all processing nodes.
throws
- dlib::socket_error
This exception is thrown if there is an error which prevents the BSP
job from executing.
- Any exception thrown by funct() will be propagated out of this call to
bsp_connect().
!*/
// ----------------------------------------------------------------------------------------
template <
typename funct_type,
typename ARG1,
typename ARG2,
typename ARG3
>
void bsp_connect (
const std::vector<network_address>& hosts,
funct_type funct,
ARG1 arg1,
ARG2 arg2,
ARG3 arg3
);
/*!
requires
- let CONTEXT be an instance of a bsp_context object. Then:
- funct(CONTEXT,arg1,arg2,arg3) must be a valid expression
(i.e. funct must be a function or function object)
ensures
- This function spawns a BSP job consisting of hosts.size()+1 processing nodes.
- The processing node with a node ID of 0 will run locally on the machine
calling bsp_connect(). In particular, this node will execute funct(CONTEXT,arg1,arg2,arg3),
which is expected to carry out this node's portion of the BSP computation.
- The other processing nodes are executed on the hosts indicated by the input
argument. In particular, this function interprets hosts as a list addresses
identifying machines running the bsp_listen() or bsp_listen_dynamic_port()
routines.
- This call to bsp_connect() blocks until the BSP computation has completed on
all processing nodes.
throws
- dlib::socket_error
This exception is thrown if there is an error which prevents the BSP
job from executing.
- Any exception thrown by funct() will be propagated out of this call to
bsp_connect().
!*/
// ----------------------------------------------------------------------------------------
template <
typename funct_type,
typename ARG1,
typename ARG2,
typename ARG3,
typename ARG4
>
void bsp_connect (
const std::vector<network_address>& hosts,
funct_type funct,
ARG1 arg1,
ARG2 arg2,
ARG3 arg3,
ARG4 arg4
);
/*!
requires
- let CONTEXT be an instance of a bsp_context object. Then:
- funct(CONTEXT,arg1,arg2,arg3,arg4) must be a valid expression
(i.e. funct must be a function or function object)
ensures
- This function spawns a BSP job consisting of hosts.size()+1 processing nodes.
- The processing node with a node ID of 0 will run locally on the machine
calling bsp_connect(). In particular, this node will execute funct(CONTEXT,arg1,arg2,arg3,arg4),
which is expected to carry out this node's portion of the BSP computation.
- The other processing nodes are executed on the hosts indicated by the input
argument. In particular, this function interprets hosts as a list addresses
identifying machines running the bsp_listen() or bsp_listen_dynamic_port()
routines.
- This call to bsp_connect() blocks until the BSP computation has completed on
all processing nodes.
throws
- dlib::socket_error
This exception is thrown if there is an error which prevents the BSP
job from executing.
- Any exception thrown by funct() will be propagated out of this call to
bsp_connect().
!*/
// ----------------------------------------------------------------------------------------
// ----------------------------------------------------------------------------------------
template <
typename funct_type
>
void bsp_listen (
unsigned short listening_port,
funct_type funct
);
/*!
requires
- listening_port != 0
- let CONTEXT be an instance of a bsp_context object. Then:
- funct(CONTEXT) must be a valid expression
(i.e. funct must be a function or function object)
ensures
- This function listens for a connection from the bsp_connect() routine. Once
this connection is established, funct(CONTEXT) will be executed and it will
then be able to participate in the BSP computation as one of the processing
nodes.
- This function will listen on TCP port listening_port for a connection from
bsp_connect(). Once the connection is established, it will close the
listening port so it is free for use by other applications. The connection
and BSP computation will continue uninterrupted.
- This call to bsp_listen() blocks until the BSP computation has completed on
all processing nodes.
throws
- dlib::socket_error
This exception is thrown if there is an error which prevents the BSP
job from executing.
- Any exception thrown by funct() will be propagated out of this call to
bsp_connect().
!*/
// ----------------------------------------------------------------------------------------
template <
typename funct_type,
typename ARG1
>
void bsp_listen (
unsigned short listening_port,
funct_type funct,
ARG1 arg1
);
/*!
requires
- listening_port != 0
- let CONTEXT be an instance of a bsp_context object. Then:
- funct(CONTEXT,arg1) must be a valid expression
(i.e. funct must be a function or function object)
ensures
- This function listens for a connection from the bsp_connect() routine. Once
this connection is established, funct(CONTEXT,arg1) will be executed and it will
then be able to participate in the BSP computation as one of the processing
nodes.
- This function will listen on TCP port listening_port for a connection from
bsp_connect(). Once the connection is established, it will close the
listening port so it is free for use by other applications. The connection
and BSP computation will continue uninterrupted.
- This call to bsp_listen() blocks until the BSP computation has completed on
all processing nodes.
throws
- dlib::socket_error
This exception is thrown if there is an error which prevents the BSP
job from executing.
- Any exception thrown by funct() will be propagated out of this call to
bsp_connect().
!*/
// ----------------------------------------------------------------------------------------
template <
typename funct_type,
typename ARG1,
typename ARG2
>
void bsp_listen (
unsigned short listening_port,
funct_type funct,
ARG1 arg1,
ARG2 arg2
);
/*!
requires
- listening_port != 0
- let CONTEXT be an instance of a bsp_context object. Then:
- funct(CONTEXT,arg1,arg2) must be a valid expression
(i.e. funct must be a function or function object)
ensures
- This function listens for a connection from the bsp_connect() routine. Once
this connection is established, funct(CONTEXT,arg1,arg2) will be executed and
it will then be able to participate in the BSP computation as one of the
processing nodes.
- This function will listen on TCP port listening_port for a connection from
bsp_connect(). Once the connection is established, it will close the
listening port so it is free for use by other applications. The connection
and BSP computation will continue uninterrupted.
- This call to bsp_listen() blocks until the BSP computation has completed on
all processing nodes.
throws
- dlib::socket_error
This exception is thrown if there is an error which prevents the BSP
job from executing.
- Any exception thrown by funct() will be propagated out of this call to
bsp_connect().
!*/
// ----------------------------------------------------------------------------------------
template <
typename funct_type,
typename ARG1,
typename ARG2,
typename ARG3
>
void bsp_listen (
unsigned short listening_port,
funct_type funct,
ARG1 arg1,
ARG2 arg2,
ARG3 arg3
);
/*!
requires
- listening_port != 0
- let CONTEXT be an instance of a bsp_context object. Then:
- funct(CONTEXT,arg1,arg2,arg3) must be a valid expression
(i.e. funct must be a function or function object)
ensures
- This function listens for a connection from the bsp_connect() routine. Once
this connection is established, funct(CONTEXT,arg1,arg2,arg3) will be
executed and it will then be able to participate in the BSP computation as
one of the processing nodes.
- This function will listen on TCP port listening_port for a connection from
bsp_connect(). Once the connection is established, it will close the
listening port so it is free for use by other applications. The connection
and BSP computation will continue uninterrupted.
- This call to bsp_listen() blocks until the BSP computation has completed on
all processing nodes.
throws
- dlib::socket_error
This exception is thrown if there is an error which prevents the BSP
job from executing.
- Any exception thrown by funct() will be propagated out of this call to
bsp_connect().
!*/
// ----------------------------------------------------------------------------------------
template <
typename funct_type,
typename ARG1,
typename ARG2,
typename ARG3,
typename ARG4
>
void bsp_listen (
unsigned short listening_port,
funct_type funct,
ARG1 arg1,
ARG2 arg2,
ARG3 arg3,
ARG4 arg4
);
/*!
requires
- listening_port != 0
- let CONTEXT be an instance of a bsp_context object. Then:
- funct(CONTEXT,arg1,arg2,arg3,arg4) must be a valid expression
(i.e. funct must be a function or function object)
ensures
- This function listens for a connection from the bsp_connect() routine. Once
this connection is established, funct(CONTEXT,arg1,arg2,arg3,arg4) will be
executed and it will then be able to participate in the BSP computation as
one of the processing nodes.
- This function will listen on TCP port listening_port for a connection from
bsp_connect(). Once the connection is established, it will close the
listening port so it is free for use by other applications. The connection
and BSP computation will continue uninterrupted.
- This call to bsp_listen() blocks until the BSP computation has completed on
all processing nodes.
throws
- dlib::socket_error
This exception is thrown if there is an error which prevents the BSP
job from executing.
- Any exception thrown by funct() will be propagated out of this call to
bsp_connect().
!*/
// ----------------------------------------------------------------------------------------
// ----------------------------------------------------------------------------------------
template <
typename port_notify_function_type,
typename funct_type
>
void bsp_listen_dynamic_port (
unsigned short listening_port,
port_notify_function_type port_notify_function,
funct_type funct
);
/*!
requires
- let CONTEXT be an instance of a bsp_context object. Then:
- funct(CONTEXT) must be a valid expression
(i.e. funct must be a function or function object)
- port_notify_function((unsigned short) 1234) must be a valid expression
(i.e. port_notify_function() must be a function or function object taking an
unsigned short)
ensures
- This function listens for a connection from the bsp_connect() routine. Once
this connection is established, funct(CONTEXT) will be executed and it will
then be able to participate in the BSP computation as one of the processing
nodes.
- if (listening_port != 0) then
- This function will listen on TCP port listening_port for a connection
from bsp_connect().
- else
- An available TCP port number is automatically selected and this function
will listen on it for a connection from bsp_connect().
- Once a listening port is opened, port_notify_function() is called with the
port number used. This provides a mechanism to find out what listening port
has been used if it is automatically selected. It also allows you to find
out when the routine has begun listening for an incoming connection from
bsp_connect().
- Once a connection is established, we will close the listening port so it is
free for use by other applications. The connection and BSP computation will
continue uninterrupted.
- This call to bsp_listen_dynamic_port() blocks until the BSP computation has
completed on all processing nodes.
throws
- dlib::socket_error
This exception is thrown if there is an error which prevents the BSP
job from executing.
- Any exception thrown by funct() will be propagated out of this call to
bsp_connect().
!*/
// ----------------------------------------------------------------------------------------
template <
typename port_notify_function_type,
typename funct_type,
typename ARG1
>
void bsp_listen_dynamic_port (
unsigned short listening_port,
port_notify_function_type port_notify_function,
funct_type funct,
ARG1 arg1
);
/*!
requires
- let CONTEXT be an instance of a bsp_context object. Then:
- funct(CONTEXT,arg1) must be a valid expression
(i.e. funct must be a function or function object)
- port_notify_function((unsigned short) 1234) must be a valid expression
(i.e. port_notify_function() must be a function or function object taking an
unsigned short)
ensures
- This function listens for a connection from the bsp_connect() routine. Once
this connection is established, funct(CONTEXT,arg1) will be executed and it
will then be able to participate in the BSP computation as one of the
processing nodes.
- if (listening_port != 0) then
- This function will listen on TCP port listening_port for a connection
from bsp_connect().
- else
- An available TCP port number is automatically selected and this function
will listen on it for a connection from bsp_connect().
- Once a listening port is opened, port_notify_function() is called with the
port number used. This provides a mechanism to find out what listening port
has been used if it is automatically selected. It also allows you to find
out when the routine has begun listening for an incoming connection from
bsp_connect().
- Once a connection is established, we will close the listening port so it is
free for use by other applications. The connection and BSP computation will
continue uninterrupted.
- This call to bsp_listen_dynamic_port() blocks until the BSP computation has
completed on all processing nodes.
throws
- dlib::socket_error
This exception is thrown if there is an error which prevents the BSP
job from executing.
- Any exception thrown by funct() will be propagated out of this call to
bsp_connect().
!*/
// ----------------------------------------------------------------------------------------
template <
typename port_notify_function_type,
typename funct_type,
typename ARG1,
typename ARG2
>
void bsp_listen_dynamic_port (
unsigned short listening_port,
port_notify_function_type port_notify_function,
funct_type funct,
ARG1 arg1,
ARG2 arg2
);
/*!
requires
- let CONTEXT be an instance of a bsp_context object. Then:
- funct(CONTEXT,arg1,arg2) must be a valid expression
(i.e. funct must be a function or function object)
- port_notify_function((unsigned short) 1234) must be a valid expression
(i.e. port_notify_function() must be a function or function object taking an
unsigned short)
ensures
- This function listens for a connection from the bsp_connect() routine. Once
this connection is established, funct(CONTEXT,arg1,arg2) will be executed and
it will then be able to participate in the BSP computation as one of the
processing nodes.
- if (listening_port != 0) then
- This function will listen on TCP port listening_port for a connection
from bsp_connect().
- else
- An available TCP port number is automatically selected and this function
will listen on it for a connection from bsp_connect().
- Once a listening port is opened, port_notify_function() is called with the
port number used. This provides a mechanism to find out what listening port
has been used if it is automatically selected. It also allows you to find
out when the routine has begun listening for an incoming connection from
bsp_connect().
- Once a connection is established, we will close the listening port so it is
free for use by other applications. The connection and BSP computation will
continue uninterrupted.
- This call to bsp_listen_dynamic_port() blocks until the BSP computation has
completed on all processing nodes.
throws
- dlib::socket_error
This exception is thrown if there is an error which prevents the BSP
job from executing.
- Any exception thrown by funct() will be propagated out of this call to
bsp_connect().
!*/
// ----------------------------------------------------------------------------------------
template <
typename port_notify_function_type,
typename funct_type,
typename ARG1,
typename ARG2,
typename ARG3
>
void bsp_listen_dynamic_port (
unsigned short listening_port,
port_notify_function_type port_notify_function,
funct_type funct,
ARG1 arg1,
ARG2 arg2,
ARG3 arg3
);
/*!
requires
- let CONTEXT be an instance of a bsp_context object. Then:
- funct(CONTEXT,arg1,arg2,arg3) must be a valid expression
(i.e. funct must be a function or function object)
- port_notify_function((unsigned short) 1234) must be a valid expression
(i.e. port_notify_function() must be a function or function object taking an
unsigned short)
ensures
- This function listens for a connection from the bsp_connect() routine. Once
this connection is established, funct(CONTEXT,arg1,arg2,arg3) will be
executed and it will then be able to participate in the BSP computation as
one of the processing nodes.
- if (listening_port != 0) then
- This function will listen on TCP port listening_port for a connection
from bsp_connect().
- else
- An available TCP port number is automatically selected and this function
will listen on it for a connection from bsp_connect().
- Once a listening port is opened, port_notify_function() is called with the
port number used. This provides a mechanism to find out what listening port
has been used if it is automatically selected. It also allows you to find
out when the routine has begun listening for an incoming connection from
bsp_connect().
- Once a connection is established, we will close the listening port so it is
free for use by other applications. The connection and BSP computation will
continue uninterrupted.
- This call to bsp_listen_dynamic_port() blocks until the BSP computation has
completed on all processing nodes.
throws
- dlib::socket_error
This exception is thrown if there is an error which prevents the BSP
job from executing.
- Any exception thrown by funct() will be propagated out of this call to
bsp_connect().
!*/
// ----------------------------------------------------------------------------------------
template <
typename port_notify_function_type,
typename funct_type,
typename ARG1,
typename ARG2,
typename ARG3,
typename ARG4
>
void bsp_listen_dynamic_port (
unsigned short listening_port,
port_notify_function_type port_notify_function,
funct_type funct,
ARG1 arg1,
ARG2 arg2,
ARG3 arg3,
ARG4 arg4
);
/*!
requires
- let CONTEXT be an instance of a bsp_context object. Then:
- funct(CONTEXT,arg1,arg2,arg3,arg4) must be a valid expression
(i.e. funct must be a function or function object)
- port_notify_function((unsigned short) 1234) must be a valid expression
(i.e. port_notify_function() must be a function or function object taking an
unsigned short)
ensures
- This function listens for a connection from the bsp_connect() routine. Once
this connection is established, funct(CONTEXT,arg1,arg2,arg3,arg4) will be
executed and it will then be able to participate in the BSP computation as
one of the processing nodes.
- if (listening_port != 0) then
- This function will listen on TCP port listening_port for a connection
from bsp_connect().
- else
- An available TCP port number is automatically selected and this function
will listen on it for a connection from bsp_connect().
- Once a listening port is opened, port_notify_function() is called with the
port number used. This provides a mechanism to find out what listening port
has been used if it is automatically selected. It also allows you to find
out when the routine has begun listening for an incoming connection from
bsp_connect().
- Once a connection is established, we will close the listening port so it is
free for use by other applications. The connection and BSP computation will
continue uninterrupted.
- This call to bsp_listen_dynamic_port() blocks until the BSP computation has
completed on all processing nodes.
throws
- dlib::socket_error
This exception is thrown if there is an error which prevents the BSP
job from executing.
- Any exception thrown by funct() will be propagated out of this call to
bsp_connect().
!*/
// ----------------------------------------------------------------------------------------
// ----------------------------------------------------------------------------------------
}
#endif // DLIB_BsP_ABSTRACT_Hh_