NAME¶
pvm_freezegroup - Freezes dynamic group membership and caches info locally
SYNOPSIS¶
C int info = pvm_freezegroup( char *group , int size)
Fortran call pvmffreezegroup( group, size, info )
PARAMETERS¶
- group
- Character string group name of an existing group.
- size
- Size of the group when it is frozen
- info
- size of group on success. Values less than 0 indicate and error.
DESCRIPTION¶
The routine
pvm_freezegroup makes a dynamic group named
group
static. The group information is then "cached" by all group members.
pvm_freezegroup is a synchronizing routine and must be called by all group
members to complete.
size indicates the size the dynamic group should
be when made static. A value of -1 indicates that the current size of the
group should be used.
info returns error information.
Once a dynamic group has been frozen with
pvm_freezegroup , all
subsequent operations that can be satisfied with local data use the locally
held information. For processes that are outside of the group, the first group
call, e.g., pvm_bcast(), will cause the static group information to be copied
to the calling process. Subsequent operations then use the local information.
Barriers are still arbitrated by the group server.
Group members should call
pvm_lvgroup to leave the group and free any
allocated structures that hold the group information. Processes not in the
group may call
pvm_lvgroup to free any locally allocated structures.
In this case, an error code of PvmNotInGroup or PvmNoGroup will be returned to
the caller.
Barrier are always arbitrated by the group server, even if the group has been
made static with
pvm_freezegroup. If a process leaves a static group
while other process are waiting at a barrier, then
PvmNoGroup is
returned to all processes waiting at the barrier. Future barrier calls with
the defunct static group, return the same error.
EXAMPLES¶
C:
inum = pvm_joingroup("worker");
info = pvm_freezegroup( "worker", size );
Fortran:
CALL PVMFJOINGROUP('group2', inum)
CALL PVMFFREEZEGROUP( 'group2', size, info )
ERRORS¶
These error conditions can be returned by
pvm_freezegroup
- PvmSysErr
- pvmd was not started or has crashed.
- PvmBadParam
- giving a NULL group name.
- PvmDupGroup
- trying to freeze a group that is already frozen.
- PvmNotInGroup
- trying to freeze a group that you are not in.
BUGS¶
There is no way to unfreeze a group.
Processes are not notified if a frozen group becomes invalid.
Having a non-member process call pvm_lvgroup to free structures is a bit
strange.
SEE ALSO¶
pvm_barrier(3PVM), pvm_lvgroup(3PVM)