222 lines
7.1 KiB
Groff
222 lines
7.1 KiB
Groff
.\" Man page generated from reStructuredText.
|
|
.
|
|
.TH "MPI_CART_SHIFT" "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_Cart_shift\fP — Returns the shifted source and destination ranks,
|
|
given a shift direction and amount.
|
|
.SH SYNTAX
|
|
.SS C Syntax
|
|
.INDENT 0.0
|
|
.INDENT 3.5
|
|
.sp
|
|
.nf
|
|
.ft C
|
|
#include <mpi.h>
|
|
|
|
int MPI_Cart_shift(MPI_Comm comm, int direction, int disp,
|
|
int *rank_source, int *rank_dest)
|
|
.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_CART_SHIFT(COMM, DIRECTION, DISP, RANK_SOURCE,
|
|
RANK_DEST, IERROR)
|
|
INTEGER COMM, DIRECTION, DISP, RANK_SOURCE
|
|
INTEGER RANK_DEST, IERROR
|
|
.ft P
|
|
.fi
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.SS Fortran 2008 Syntax
|
|
.INDENT 0.0
|
|
.INDENT 3.5
|
|
.sp
|
|
.nf
|
|
.ft C
|
|
USE mpi_f08
|
|
|
|
MPI_Cart_shift(comm, direction, disp, rank_source, rank_dest, ierror)
|
|
TYPE(MPI_Comm), INTENT(IN) :: comm
|
|
INTEGER, INTENT(IN) :: direction, disp
|
|
INTEGER, INTENT(OUT) :: rank_source, rank_dest
|
|
INTEGER, OPTIONAL, INTENT(OUT) :: ierror
|
|
.ft P
|
|
.fi
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.SH INPUT PARAMETERS
|
|
.INDENT 0.0
|
|
.IP \(bu 2
|
|
\fBcomm\fP : Communicator with Cartesian structure (handle).
|
|
.IP \(bu 2
|
|
\fBdirection\fP : Coordinate dimension of shift (integer).
|
|
.IP \(bu 2
|
|
.INDENT 2.0
|
|
.TP
|
|
.B \fBdisp\fP
|
|
Displacement ( > 0: upward shift, < 0: downward shift)
|
|
(integer).
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.SH OUTPUT PARAMETERS
|
|
.INDENT 0.0
|
|
.IP \(bu 2
|
|
\fBrank_source\fP : Rank of source process (integer).
|
|
.IP \(bu 2
|
|
\fBrank_dest\fP : Rank of destination process (integer).
|
|
.IP \(bu 2
|
|
\fBierror\fP : Fortran only: Error status (integer).
|
|
.UNINDENT
|
|
.SH DESCRIPTION
|
|
.sp
|
|
If the process topology is a Cartesian structure, an \fI\%MPI_Sendrecv\fP
|
|
operation is likely to be used along a coordinate \fBdirection\fP to
|
|
perform a shift of data. As input, \fI\%MPI_Sendrecv\fP takes the rank of a
|
|
source process for the receive, and the rank of a destination process
|
|
for the send. If the function \fI\%MPI_Cart_shift\fP is called for a
|
|
Cartesian process group, it provides the calling process with the above
|
|
identifiers, which then can be passed to \fI\%MPI_Sendrecv\fP\&. The user
|
|
specifies the coordinate \fBdirection\fP and the size of the step
|
|
(positive or negative). The function is local.
|
|
.sp
|
|
The \fBdirection\fP argument indicates the dimension of the shift, i.e.,
|
|
the coordinate whose value is modified by the shift. The coordinates are
|
|
numbered from 0 to ndims\-1, where ndims is the number of dimensions.
|
|
.sp
|
|
Note: The \fBdirection\fP argument is in the range [0, n\-1] for an
|
|
n\-dimensional Cartesian mesh.
|
|
.sp
|
|
Depending on the periodicity of the Cartesian group in the specified
|
|
coordinate \fBdirection\fP, \fI\%MPI_Cart_shift\fP provides the identifiers
|
|
for a circular or an end\-off shift. In the case of an end\-off shift, the
|
|
value \fBMPI_PROC_NULL\fP may be returned in \fBrank_source\fP or
|
|
\fBrank_dest\fP, indicating that the source or the destination for the
|
|
shift is out of range.
|
|
.sp
|
|
Example: The \fBcomm\fPunicator, \fBcomm\fP, has a two\-dimensional,
|
|
periodic, Cartesian topology associated with it. A two\-dimensional array
|
|
of REALs is stored one element per process, in variable A. One wishes to
|
|
skew this array, by shifting column i (vertically, i.e., along the
|
|
column) by i steps.
|
|
.INDENT 0.0
|
|
.INDENT 3.5
|
|
.sp
|
|
.nf
|
|
.ft C
|
|
! find process rank
|
|
CALL MPI_COMM_RANK(comm, rank, ierr)
|
|
! find Cartesian coordinates
|
|
CALL MPI_CART_COORDS(comm, rank, maxdims, coords, ierr)
|
|
! compute shift source and destination
|
|
CALL MPI_CART_SHIFT(comm, 0, coords(2), source, dest, ierr)
|
|
! skew array
|
|
CALL MPI_SENDRECV_REPLACE(A, 1, MPI_REAL, dest, 0, source, 0, comm, status,
|
|
ierr)
|
|
.ft P
|
|
.fi
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.SH NOTE
|
|
.sp
|
|
In Fortran, the dimension indicated by DIRECTION = i has DIMS(i+1)
|
|
nodes, where DIMS is the array that was used to create the grid. In C,
|
|
the dimension indicated by direction = i is the dimension specified by
|
|
dims[i].
|
|
.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.
|
|
.SH COPYRIGHT
|
|
2003-2025, The Open MPI Community
|
|
.\" Generated by docutils manpage writer.
|
|
.
|