288 lines
9.6 KiB
Groff
288 lines
9.6 KiB
Groff
.\" Man page generated from reStructuredText.
|
|
.
|
|
.TH "MPI_PACK_EXTERNAL" "3" "Feb 14, 2025" "" "Open MPI"
|
|
.
|
|
.nr rst2man-indent-level 0
|
|
.
|
|
.de1 rstReportMargin
|
|
\\$1 \\n[an-margin]
|
|
level \\n[rst2man-indent-level]
|
|
level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
|
-
|
|
\\n[rst2man-indent0]
|
|
\\n[rst2man-indent1]
|
|
\\n[rst2man-indent2]
|
|
..
|
|
.de1 INDENT
|
|
.\" .rstReportMargin pre:
|
|
. RS \\$1
|
|
. nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin]
|
|
. nr rst2man-indent-level +1
|
|
.\" .rstReportMargin post:
|
|
..
|
|
.de UNINDENT
|
|
. RE
|
|
.\" indent \\n[an-margin]
|
|
.\" old: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
|
.nr rst2man-indent-level -1
|
|
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
|
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
|
|
..
|
|
.sp
|
|
\fI\%MPI_Pack_external\fP — Writes data to a portable format
|
|
.SH SYNTAX
|
|
.SS C Syntax
|
|
.INDENT 0.0
|
|
.INDENT 3.5
|
|
.sp
|
|
.nf
|
|
.ft C
|
|
#include <mpi.h>
|
|
|
|
int MPI_Pack_external(const char *datarep, const void *inbuf,
|
|
int incount, MPI_Datatype datatype,
|
|
void *outbuf, MPI_Aint outsize,
|
|
MPI_Aint *position)
|
|
.ft P
|
|
.fi
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.SS Fortran Syntax
|
|
.INDENT 0.0
|
|
.INDENT 3.5
|
|
.sp
|
|
.nf
|
|
.ft C
|
|
USE MPI
|
|
! or the older form: INCLUDE \(aqmpif.h\(aq
|
|
MPI_PACK_EXTERNAL(DATAREP, INBUF, INCOUNT, DATATYPE,
|
|
OUTBUF, OUTSIZE, POSITION, IERROR)
|
|
|
|
INTEGER INCOUNT, DATATYPE, IERROR
|
|
INTEGER(KIND=MPI_ADDRESS_KIND) OUTSIZE, POSITION
|
|
CHARACTER*(*) DATAREP
|
|
<type> INBUF(*), OUTBUF(*)
|
|
.ft P
|
|
.fi
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.SS Fortran 2008 Syntax
|
|
.INDENT 0.0
|
|
.INDENT 3.5
|
|
.sp
|
|
.nf
|
|
.ft C
|
|
USE mpi_f08
|
|
MPI_Pack_external(datarep, inbuf, incount, datatype, outbuf, outsize,
|
|
position, ierror)
|
|
CHARACTER(LEN=*), INTENT(IN) :: datarep
|
|
TYPE(*), DIMENSION(..), INTENT(IN) :: inbuf
|
|
TYPE(*), DIMENSION(..) :: outbuf
|
|
INTEGER, INTENT(IN) :: incount
|
|
TYPE(MPI_Datatype), INTENT(IN) :: datatype
|
|
INTEGER(KIND=MPI_ADDRESS_KIND), INTENT(IN) :: outsize
|
|
INTEGER(KIND=MPI_ADDRESS_KIND), INTENT(INOUT) :: position
|
|
INTEGER, OPTIONAL, INTENT(OUT) :: ierror
|
|
.ft P
|
|
.fi
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.SH INPUT PARAMETERS
|
|
.INDENT 0.0
|
|
.IP \(bu 2
|
|
\fBdatarep\fP: Data representation (string).
|
|
.IP \(bu 2
|
|
\fBinbuf\fP: Input buffer start (choice).
|
|
.IP \(bu 2
|
|
\fBincount\fP: Number of input data items (integer).
|
|
.IP \(bu 2
|
|
\fBdatatype\fP: Datatype of each input data item (handle).
|
|
.IP \(bu 2
|
|
\fBoutsize\fP: Output buffer size, in bytes (integer).
|
|
.UNINDENT
|
|
.SH INPUT/OUTPUT PARAMETER
|
|
.INDENT 0.0
|
|
.IP \(bu 2
|
|
\fBposition\fP: Current position in buffer, in bytes (integer).
|
|
.UNINDENT
|
|
.SH OUTPUT PARAMETERS
|
|
.INDENT 0.0
|
|
.IP \(bu 2
|
|
\fBoutbuf\fP: Output buffer start (choice).
|
|
.IP \(bu 2
|
|
\fBierror\fP: Fortran only: Error status (integer).
|
|
.UNINDENT
|
|
.SH DESCRIPTION
|
|
.sp
|
|
\fI\%MPI_Pack_external\fP packs data into the external32 format, a universal
|
|
data representation defined by the MPI Forum. This format is useful for
|
|
exchanging data between MPI implementations, or when writing data to a
|
|
file.
|
|
.sp
|
|
The input buffer is specified by \fIinbuf\fP, \fIincount\fP and \fIdatatype\fP, and
|
|
may be any communication buffer allowed in \fI\%MPI_Send\fP\&. The output buffer
|
|
\fIoutbuf\fP must be a contiguous storage area containing \fIoutsize\fP bytes.
|
|
.sp
|
|
The input value of \fIposition\fP is the first position in \fIoutbuf\fP to be
|
|
used for packing (measured in bytes, not elements, relative to the start
|
|
of the buffer). When the function returns, \fIposition\fP is incremented by
|
|
the size of the packed message, so that it points to the first location
|
|
in \fIoutbuf\fP following the packed message. This way it may be used as
|
|
input to a subsequent call to \fI\%MPI_Pack_external\fP\&.
|
|
.sp
|
|
\fBExample:\fP An example using \fI\%MPI_Pack_external\fP:
|
|
.INDENT 0.0
|
|
.INDENT 3.5
|
|
.sp
|
|
.nf
|
|
.ft C
|
|
int position, i;
|
|
double msg[5];
|
|
char buf[1000];
|
|
|
|
\&...
|
|
|
|
MPI_Comm_rank(MPI_COMM_WORLD, &myrank);
|
|
if (myrank == 0) { /* SENDER CODE */
|
|
position = 0;
|
|
i = 5; /* number of doubles in msg[] */
|
|
MPI_Pack_external("external32", &i, 1, MPI_INT,
|
|
buf, 1000, &position);
|
|
MPI_Pack_external("external32", &msg, i, MPI_DOUBLE,
|
|
buf, 1000, &position);
|
|
MPI_Send(buf, position, MPI_BYTE, 1, 0,
|
|
MPI_COMM_WORLD);
|
|
} else { /* RECEIVER CODE */
|
|
MPI_Recv(buf, 1, MPI_BYTE, 0, 0, MPI_COMM_WORLD,
|
|
MPI_STATUS_IGNORE);
|
|
MPI_Unpack_external("external32", buf, 1000,
|
|
MPI_INT, &i, 1, &position);
|
|
MPI_Unpack_external("external32", buf, 1000,
|
|
MPI_DOUBLE, &msg, i, &position);
|
|
}
|
|
.ft P
|
|
.fi
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.SH NOTES
|
|
.sp
|
|
The \fIdatarep\fP argument specifies the data format. The only valid value
|
|
in the current version of MPI is “external32”. The argument is provided
|
|
for future extensibility.
|
|
.sp
|
|
To understand the behavior of pack and unpack, it is convenient to think
|
|
of the data part of a message as being the sequence obtained by
|
|
concatenating the successive values sent in that message. The pack
|
|
operation stores this sequence in the buffer space, as if sending the
|
|
message to that buffer. The unpack operation retrieves this sequence
|
|
from buffer space, as if receiving a message from that buffer. (It is
|
|
helpful to think of internal Fortran files or sscanf in C for a similar
|
|
function.)
|
|
.sp
|
|
Several messages can be successively packed into one packing unit. This
|
|
is effected by several successive related calls to \fI\%MPI_Pack_external\fP,
|
|
where the first call provides \fIposition\fP=0, and each successive call
|
|
inputs the value of \fIposition\fP that was output by the previous call,
|
|
along with the same values for \fIoutbuf\fP and \fIoutcount\fP\&. This packing
|
|
unit now contains the equivalent information that would have been stored
|
|
in a message by one send call with a send buffer that is the
|
|
“concatenation” of the individual send buffers.
|
|
.sp
|
|
A packing unit can be sent using type MPI_BYTE. Any point\-to\-point or
|
|
collective communication function can be used to move the sequence of
|
|
bytes that forms the packing unit from one process to another. This
|
|
packing unit can now be received using any receive operation, with any
|
|
datatype. (The type\-matching rules are relaxed for messages sent with
|
|
type MPI_BYTE.)
|
|
.sp
|
|
A packing unit can be unpacked into several successive messages. This is
|
|
effected by several successive related calls to \fI\%MPI_Unpack_external\fP,
|
|
where the first call provides \fIposition\fP=0, and each successive call
|
|
inputs the value of position that was output by the previous call, and
|
|
the same values for \fIinbuf\fP and \fIinsize\fP\&.
|
|
.sp
|
|
The concatenation of two packing units is not necessarily a packing
|
|
unit; nor is a substring of a packing unit necessarily a packing unit.
|
|
Thus, one cannot concatenate two packing units and then unpack the
|
|
result as one packing unit; nor can one unpack a substring of a packing
|
|
unit as a separate packing unit. Each packing unit that was created by a
|
|
related sequence of pack calls must be unpacked as a unit by a sequence
|
|
of related unpack calls.
|
|
.SH ERRORS
|
|
.sp
|
|
Almost all MPI routines return an error value; C routines as the return result
|
|
of the function and Fortran routines in the last argument.
|
|
.sp
|
|
Before the error value is returned, the current MPI error handler associated
|
|
with the communication object (e.g., communicator, window, file) is called.
|
|
If no communication object is associated with the MPI call, then the call is
|
|
considered attached to MPI_COMM_SELF and will call the associated MPI error
|
|
handler. When MPI_COMM_SELF is not initialized (i.e., before
|
|
\fI\%MPI_Init\fP/\fI\%MPI_Init_thread\fP, after \fI\%MPI_Finalize\fP, or when using the Sessions
|
|
Model exclusively) the error raises the initial error handler. The initial
|
|
error handler can be changed by calling \fI\%MPI_Comm_set_errhandler\fP on
|
|
MPI_COMM_SELF when using the World model, or the mpi_initial_errhandler CLI
|
|
argument to mpiexec or info key to \fI\%MPI_Comm_spawn\fP/\fI\%MPI_Comm_spawn_multiple\fP\&.
|
|
If no other appropriate error handler has been set, then the MPI_ERRORS_RETURN
|
|
error handler is called for MPI I/O functions and the MPI_ERRORS_ABORT error
|
|
handler is called for all other MPI functions.
|
|
.sp
|
|
Open MPI includes three predefined error handlers that can be used:
|
|
.INDENT 0.0
|
|
.IP \(bu 2
|
|
\fBMPI_ERRORS_ARE_FATAL\fP
|
|
Causes the program to abort all connected MPI processes.
|
|
.IP \(bu 2
|
|
\fBMPI_ERRORS_ABORT\fP
|
|
An error handler that can be invoked on a communicator,
|
|
window, file, or session. When called on a communicator, it
|
|
acts as if \fI\%MPI_Abort\fP was called on that communicator. If
|
|
called on a window or file, acts as if \fI\%MPI_Abort\fP was called
|
|
on a communicator containing the group of processes in the
|
|
corresponding window or file. If called on a session,
|
|
aborts only the local process.
|
|
.IP \(bu 2
|
|
\fBMPI_ERRORS_RETURN\fP
|
|
Returns an error code to the application.
|
|
.UNINDENT
|
|
.sp
|
|
MPI applications can also implement their own error handlers by calling:
|
|
.INDENT 0.0
|
|
.IP \(bu 2
|
|
\fI\%MPI_Comm_create_errhandler\fP then \fI\%MPI_Comm_set_errhandler\fP
|
|
.IP \(bu 2
|
|
\fI\%MPI_File_create_errhandler\fP then \fI\%MPI_File_set_errhandler\fP
|
|
.IP \(bu 2
|
|
\fI\%MPI_Session_create_errhandler\fP then \fI\%MPI_Session_set_errhandler\fP or at \fI\%MPI_Session_init\fP
|
|
.IP \(bu 2
|
|
\fI\%MPI_Win_create_errhandler\fP then \fI\%MPI_Win_set_errhandler\fP
|
|
.UNINDENT
|
|
.sp
|
|
Note that MPI does not guarantee that an MPI program can continue past
|
|
an error.
|
|
.sp
|
|
See the \fI\%MPI man page\fP for a full list of \fI\%MPI error codes\fP\&.
|
|
.sp
|
|
See the Error Handling section of the MPI\-3.1 standard for
|
|
more information.
|
|
.sp
|
|
\fBSEE ALSO:\fP
|
|
.INDENT 0.0
|
|
.INDENT 3.5
|
|
.INDENT 0.0
|
|
.IP \(bu 2
|
|
\fI\%MPI_Pack_external_size\fP
|
|
.IP \(bu 2
|
|
\fI\%MPI_Send\fP
|
|
.IP \(bu 2
|
|
\fI\%MPI_Unpack_external\fP
|
|
.IP \(bu 2
|
|
sscanf(3C)
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.SH COPYRIGHT
|
|
2003-2025, The Open MPI Community
|
|
.\" Generated by docutils manpage writer.
|
|
.
|