Back to SYMPHONY Home Page
Next: The LP Engine
Up: Advanced Development
Previous: User-defined Data Structures
Inter-process Communication for Distributed Computing
While the implementation of SYMPHONY strives to shield the user from having to
know anything about communications protocols or the specifics of inter-process
communication, it may be necessary for the user to pass information from one
module to another in order to implement a parallel application. For instance,
the user may want to pass data describing the problem instance to the LP
process after reading them in from a file in the master process. For the
purpose of passing user data from the master process to other processes, a
customization function called
user_send_*_data() is provided in the master module, along with a
corresponding function called user_receive_*_data() in the module
*. These two functions work in tandem to transport the user's data
from the maser, where it can be read in from a file, to the proper module for
processing. There are also a number of other tandem pairs of send and
receive functions that are used to transport user data from place to
place.
All data are sent in the form of arrays of either type char, int,
or double, or as strings. To send an array, the user has simply to
invoke the function send_XXX_array(XXX *array, int length) where
XXX is one of the previously listed types. To receive that array,
there is a corresponding function called receive_?_array(? *array, int
length). When receiving an array, the user must first allocate the
appropriate amount of memory. In cases where variable length arrays need to be
passed, the user must first pass the length of the array (as a separate array
of length one) and then the array itself. In the receive function, this allows
the length to be received first so that the proper amount of space can be
allocated before receiving the array itself. Note that data must be received
in exactly the same order as it was passed, as data is read linearly into and
out of the message buffer. The easiest way to ensure this is done properly is
to simply copy the send statements into the receive function and change the
function names. It may then be necessary to add some allocation statements in
between the receive function calls.
Next: The LP Engine
Up: Advanced Development
Previous: User-defined Data Structures
Ted Ralphs
2003-10-16