NAME
Bulk synchronous remote memory access.
DESCRIPTION
One way of performing data communication in the BSP model is
to use Direct Remote Memory Access (DRMA) communication
facilities. Some parallel programming libraries require that
the data structures used in DRMA operations have to be held
at statically allocated memory locations. BSPlib does not
have this restriction, which enables communication in cer-
tain heterogeneous environments, and allows communication
into any type of contiguous data structure including stack
or heap allocated data. This is achieved by only allowing a
process to manipulate certain registered areas of a remote
memory which have been previously made available by the
corresponding processes. In this registration procedure,
processes use the operation bsp_push_reg(3) to announce the
address of the start of a local area which is available for
global remote use.
The operation bsp_put(3) deposits locally held data into a
registered remote memory area on a target process, without
the active participation of the target process. The opera-
tion bsp_get(3) reaches into the registered local memory of
another process to copy data values held there into a data
structure in its own local memory.
Allowing a process to arbitrarily manipulate the memory of
another process, without the involvement of that process, is
potentially dangerous. The mechanisms we propose here exhi-
bit different degrees of safety depending upon the buffering
requirements of the communication operations. The right
choice of buffering depends upon the class of applications
and the desired goals, and has to be made by the user.
There are four forms of buffering with respect to the DRMA
operations:
Buffered on destination:
Writing data into registered areas will happen at the
end of the superstep, once all remote reads have been
performed.
Unbuffered on destination:
Data communication into registered areas can take
effect at any time during the superstep. Therefore, for
safety, no process should change the destination data
structures used during the course of the superstep.
Buffered on source:
If the source data structure is in the memory of the
process that issues a communication action (i.e., a
put), then a copy of the data is made at the time the
communication action is issued; the source data struc-
ture can therefore be changed by the user immediately
after communications are issued. Alternatively, if the
source data structure is on a remote process (i.e., a
get), then the data is read on the remote process at
the end of the superstep, before any remote writes are
performed.
Unbuffered on source
The data transfer resulting from a call to a communica-
tion operation may occur at any time between the time
of issue and the end of the superstep. Therefore, for
safety, no process should change the source data struc-
tures used during the course of the superstep.
The various buffering choices are crucial in determining the
safety of the communication operation, i.e., the conditions
which guarantee correct data delivery as well as its effects
on the processes involved in the operation. However, it
should be noted that even the most cautious choice of
buffering mode does not completely remove non-determinism.
For example, if more than one process transfers data into
overlapping memory locations, then the result at the over-
lapping region will be nondeterministically chosen; it is
implementation dependent which one of the many ``colliding''
communications should be written into the remote memory
area.
SEE ALSO
bsp_push_reg(3), bsp_pop_reg(3), bsp_put(3), bsp_hpput(3),
bsp_get(3), bsp_hpget(3)
``BSPlib: The BSP Programming Library'' Jonathan M. D. Hill,
Bill McColl, Dan C. Stefanescu, Mark W. Goudreau, Kevin
Lang, Satish B. Rao, , Torsten Suel, Thanasis Tsantilas, and
Rob Bisseling. Parallel Computing, to appear 1998. See
http://www.bsp-worldwide.org for more details.
BUGS
Problems and bug reports should be mailed to bsplib-
bugs@comlab.ox.ac.uk
AUTHORS
The Oxford BSP Toolset implementation of BSPlib was written
by Jonathan.Hill@comlab.ox.ac.uk
http://www.comlab.ox.ac.uk/oucl/people/jonathan.hill.html
Man(1) output converted with
man2html