PSEND(3PVM)							  PSEND(3PVM)

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.

DISCUSSION
  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 identi-
  fied 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 proces-
  sor resumes as soon as the buffer is safe for	reuse.	This is	in contrast
  to synchronous communication,	during which computation on the	sending	pro-
  cessor halts until the matching receive is executed by the receiving pro-
  cessor.

  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 compati-
  ble 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 effi-
  ciency 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)


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