---
name: "pvm_psend"
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_psend"
---

# pvm\_psend(3)

Pack and send data in one call.

## NAME

pvm\_psend - Pack and send data in one call.

## SYNOPSIS

```
C	int info = pvm_psend( int tid, int msgtag, char *buf,
	                      int len, int datatype )
Fortran	call pvmfpsend( tid, msgtag, buf, len, datatype,
                        info )
```

## PARAMETERS

- tid

  **Integer task identifier of destination process.**\

- msgtag

  **Integer message tag supplied by the user.** **msgtag should be \>= 0.**\

- buf

  **Pointer to a buffer to send.**\

- len

  **Length of buffer (in multiple of data type size).**\

- datatype

  **Type of data to which buf points (see below).**\

- info

  **Integer status code returned by the routine.**

## DESCRIPTION

**The routine** *pvm\_psend* **takes a pointer to a buffer** *buf* **its length** *len* **and its data type** *datatype* **and** **sends this data directly to the PVM task identified by** *tid.* *msgtag* **is used to label the content of the message.** **If pvm\_psend is successful,** *info* **will be 0. If some error occurs then** *info* **will be \< 0.**

**pvm\_psend data can be received by pvm\_precv, pvm\_recv, pvm\_trecv, or pvm\_nrecv.**

**The pvm\_psend routine is asynchronous.** **Computation on the sending processor resumes as soon as the buffer**  **is safe for reuse.** **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.**

**In C the** *datatype* parameter must be one of the following, depending on the type of data to be sent: \[Version 3.3.0 - This parameter only determines message length, not data conversion.  It only sends raw bytes\]

```
	datatype	Data Type
	PVM_STR	string
	PVM_BYTE	byte
	PVM_SHORT	short
	PVM_INT	int
	PVM_FLOAT	real
	PVM_CPLX	complex
	PVM_DOUBLE	double
	PVM_DCPLX	double complex
	PVM_LONG	long integer
	PVM_USHORT	unsigned short int
	PVM_UINT	unsigned int
	PVM_ULONG	unsigned long int
```

In Fortran the same data types specified for pack should be used.

The PVM model guarantees the following about message order. If task 1 sends message A to task 2, then task 1 sends message B to task 2, message A will arrive at task 2 before message B. Moreover, if both messages arrive before task 2 does a receive, then a wildcard receive will always return message A.

pvm\_psend does not affect the state of the current outgoing message buffer (created by pvm\_initsend and used by pvm\_send).

## WARNINGS

In some versions of PVM (CM5, I860 and PGON), messages sent using pvm\_psend must be received only by pvm\_precv, likewise those sent with pvm\_send must be received by pvm\_recv, pvm\_nrecv or pvm\_trecv. pvm\_psend is not compatible with pvm\_recv (nor pvm\_send with pvm\_precv). In addition, pvm\_probe is not interoperable with pvm\_psend.

This problem occurs because nonstandard message headers are used for efficiency in the pvm\_psend function. In the generic Unix version of PVM, the calls are fully interoperable.

The message tag space is shared between pvm\_send and pvm\_psend, so you must be careful to avoid selecting the wrong message (for example by using a wildcard to match the message).

## EXAMPLES

```
C:
	info = pvm_psend( tid, msgtag, array, 1000, PVM_FLOAT );

Fortran:
	CALL PVMFPSEND( TID, MSGTAG, BUF, CNT, REAL4, INFO )
```

## ERRORS

These error conditions can be returned by *pvm\_psend*

- PvmBadParam

  giving an invalid tid, msgtag, or datatype.

- PvmSysErr

  pvmd not responding.

## SEE ALSO

pvm\_precv(3PVM), pvm\_send(3PVM)
