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.
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.
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
pvmfrecv is a blocking receive routine which will wait
until a message with the correct label arrives from
A single Fortran subroutine handles all the unpacking functions. Unpacking must be performed in the same order as the corresponding pack.
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
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