MCAST(3PVM)							  MCAST(3PVM)

NAME
  pvm_mcast - Multicasts the data in the active	message	buffer to a set	of
  tasks.

SYNOPSIS
  C	  int info = pvm_mcast(	int *tids, int ntask, int msgtag )

  Fortran call pvmfmcast( ntask, tids, msgtag, info )

PARAMETERS

  ntask	  Integer specifying the number	of tasks to be sent to.

  tids	  Integer array	of length ntask	containing the task IDs	of the tasks
	  to be	sent to.

  msgtag  Integer message tag supplied by the user.  msgtag should be >= 0.
	  It allows the	user's program to distinguish between different	kinds
	  of messages .

  info	  Integer status code returned by the routine.	Values less than zero
	  indicate an error.

DISCUSSION
  The routine pvm_mcast	multicasts a message stored in the active send buffer
  to ntask tasks specified in the tids array.  The message is not sent to the
  caller even if listed	in the array of	tids.  The content of the message can
  be distinguished by msgtag. If pvm_mcast is successful, info will be 0. If
  some error occurs then info will be <	0.

  The receiving	processes can call either pvm_recv or pvm_nrecv	to receive
  their	copy of	the multicast.	pvm_mcast is asynchronous and based on a
  minimum spanning tree	algorithm between the pvmds.  Computation on the
  sending processor resumes as soon as the message is safely on	its way	to
  the receiving	processors.  This is in	contrast to synchronous	communica-
  tion,	during which computation on the	sending	processor halts	until the
  matching receive is executed by the receiving	processor.

  pvm_mcast first determines which other pvmds contain the specified tasks.
  Then passes the message to these pvmds which in turn distribute the message
  to their local tasks without further network traffic.

  Multicasting is not supported	by most	multiprocessor vendors.	 Typically
  their	native calls only support broadcasting to {\m all the user's
  processes on a multiprocessor. Because of this omission, pvm_mcast may not
  be an	efficient communication	method on some multiprocessors except in the
  special case of broadcasting to all PVM processes.

EXAMPLES
  C:
	  info = pvm_initsend( PvmDataRaw );
	  info = pvm_pkint( array, 10, 1 );
	  msgtag = 5 ;
	  info = pvm_mcast( tids, ntask, msgtag	);

  Fortran:
	  CALL PVMFINITSEND(PVMDEFAULT)
	  CALL PVMFPACK( REAL4,	DATA, 100, 1, INFO )
	  CALL PVMFMCAST( NPROC, TIDS, 5, INFO )

ERRORS
  These	error conditions can be	returned by pvm_mcast
       PvmBadParam    giving a msgtag <	0.
       PvmSysErr      pvmd not responding.
       PvmNoBuf	      no send buffer.

SEE ALSO
  pvm_psend(3PVM), pvm_recv(3PVM), pvm_send(3PVM)


Back to the alphabetical listing
Back to the listing of routines for sending and receiving messages