First an explanation of the working of fhostA.f and fnodeA.f.
These combined are an example of a master/slave PVM model. A master program "spawns" and directs slave programs which in turn may perform calculations.
The routine pvmfserror
sets automatic error message
printing for all subsequent PVM calls by the calling process.
The master program - fhostA.f - calls pvmfmytid
to enroll
this process into PVM on its first call and generates a unique
tid
(task identifier) if the process was not started with
pvmfspawn
. The call to pvmfspawn
is made to
execute a given number of slave programs on other machines.
The call pvmfinitsend
clears the SEND buffer and prepares
it for packing a new message. pvmfpack
packs a given data
type into the active SEND buffer. pvmfsend
labels the
message with an integer identifier or message tag and sends it
immediately to process task tid
.
pvmfrecv
is a blocking receive routine which will wait
until a message with the correct label arrives from tid
.
A single Fortran subroutine handles all the unpacking functions. Unpacking must be performed in the same order as the corresponding pack.
Finally, pvmfexit
tells the local PVM daemon that this
process is leaving PVM.
Now consider the slave program fnodeA.f
pvmfparent
returns the tid
of the process that
spawned the calling process. The routines pvmfrecv
and
pvmfunpack
have already been explained - this time the
slave is waiting to receive from the master.
A very simple computation by the slave then follows. Initiating the SEND buffer, PACKing the message, and SENDing to the master follows the same procedure as in fhostA.f