pvm_initsend - Clear default send buffer and specify message encoding.
C int bufid = pvm_initsend( int encoding )
Fortran call pvmfinitsend( encoding, bufid )
- encoding
- Integer specifying the next message's encoding scheme.
Options in C are:
Encoding value MEANING
PvmDataDefault 0 XDR
PvmDataRaw 1 no encoding
PvmDataInPlace 2 data left in place
Option names are in Fortran are:
Encoding value MEANING
PVMDEFAULT 0 XDR
PVMRAW 1 no encoding
PVMINPLACE 2 data left in place
- bufid
- Integer returned containing the message buffer identifier. Values less
than zero indicate an error.
The routine pvm_initsend clears the send buffer and prepares it for
packing a new message. The encoding scheme used for the packing is set by
encoding. XDR encoding is used by default because PVM can not know if
the user is going to add a heterogeneous machine before this message is sent.
If the user knows that the next message will only be sent to a machine that
understands the native format, then he can use PvmDataRaw encoding and
save on encoding costs.
PvmDataInPlace encoding specifies that data be left in place
during packing. The message buffer only contains the sizes and pointers to
the items to be sent. When pvm_send is called the items are copied directly
out of the user's memory. This option decreases the number of times a
message is copied at the expense of requiring the user to not modify the
items between the time they are packed and the time they are sent.
If pvm_initsend is successful, then bufid will contain the
message buffer identifier. If some error occurs then bufid will be
< 0.
PvmDataInPlace allows only dense (stride = 1) data in version 3.3. It cannot be
used on shared memory (*MP) architectures; a PvmNotImpl error will occur at
send time.
C:
bufid = pvm_initsend( PvmDataDefault );
info = pvm_pkint( array, 10, 1 );
msgtag = 3 ;
info = pvm_send( tid, msgtag );
Fortran:
CALL PVMFINITSEND(PVMRAW, BUFID)
CALL PVMFPACK( REAL4, DATA, 100, 1, INFO )
CALL PVMFSEND( TID, 3, INFO )
These error conditions can be returned by pvm_initsend
- PvmBadParam
- giving an invalid encoding value
- PvmNoMem
- Malloc has failed. There is not enough memory to create the buffer