---
name: "pvm_mcast"
section: "3"
platform: "linux"
package: "pvm-dev"
version: "3.4.2-8"
release: "Debian 3.0 (Woody)"
platforms: ["linux"]
url: "https://new.carta.tech/pvm_mcast"
---

# pvm\_mcast(3)

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

## 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.**

## DESCRIPTION

**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 communication, 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)**
