62fe827bdf
for years, were probably tremendously confused by this typo -- trying to code their applications by catching MPI:Exception instances, but failing to compile them. "Why, cruel world, why?!" Now we have fixed the error; all is right with the world again. This commit was SVN r23469.
92 строки
4.3 KiB
Plaintext
92 строки
4.3 KiB
Plaintext
.\"Copyright 2010 Cisco Systems, Inc. All rights reserved.
|
|
.\"Copyright 2006-2008 Sun Microsystems, Inc.
|
|
.\"Copyright (c) 1996 Thinking Machines
|
|
.TH MPI_Cart_shift 3 "#OMPI_DATE#" "#PACKAGE_VERSION#" "#PACKAGE_NAME#"
|
|
.SH NAME
|
|
\fBMPI_Cart_shift \fP \- Returns the shifted source and destination ranks, given a shift direction and amount.
|
|
|
|
.SH SYNTAX
|
|
.ft R
|
|
.SH C Syntax
|
|
.nf
|
|
#include <mpi.h>
|
|
int MPI_Cart_shift(MPI_Comm \fIcomm\fP, int\fI direction\fP, int\fI disp\fP,
|
|
int\fI *rank_source\fP, int\fI *rank_dest\fP)
|
|
|
|
.SH Fortran Syntax
|
|
.nf
|
|
INCLUDE 'mpif.h'
|
|
MPI_CART_SHIFT(\fICOMM, DIRECTION, DISP, RANK_SOURCE,
|
|
RANK_DEST, IERROR\fP)
|
|
INTEGER \fICOMM, DIRECTION, DISP, RANK_SOURCE\fP
|
|
INTEGER \fIRANK_DEST, IERROR\fP
|
|
|
|
.SH C++ Syntax
|
|
.nf
|
|
#include <mpi.h>
|
|
void Cartcomm::Shift(int \fIdirection\fP, int \fIdisp\fP, int& \fIrank_source\fP,
|
|
int& \fIrank_dest\fP) const
|
|
|
|
.SH INPUT PARAMETERS
|
|
.ft R
|
|
.TP 1i
|
|
comm
|
|
Communicator with Cartesian structure (handle).
|
|
.TP 1i
|
|
direction
|
|
Coordinate dimension of shift (integer).
|
|
.TP 1i
|
|
disp
|
|
Displacement ( > 0: upward shift, < 0: downward shift) (integer).
|
|
|
|
.SH OUTPUT PARAMETERS
|
|
.ft R
|
|
.TP 1i
|
|
rank_source
|
|
Rank of source process (integer).
|
|
.TP 1i
|
|
rank_dest
|
|
Rank of destination process (integer).
|
|
.ft R
|
|
.TP 1i
|
|
IERROR
|
|
Fortran only: Error status (integer).
|
|
|
|
.SH DESCRIPTION
|
|
.ft R
|
|
If the process topology is a Cartesian structure, an MPI_Sendrecv operation is likely to be used along a coordinate direction to perform a shift of data. As input, MPI_Sendrecv takes the rank of a source process for the receive, and the rank of a destination process for the send. If the function MPI_Cart_shift is called for a Cartesian process group, it provides the calling process with the above identifiers, which then can be passed to MPI_Sendrecv. The user specifies the coordinate direction and the size of the step (positive or negative). The function is local.
|
|
.sp
|
|
The direction 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
|
|
\fBNote:\fP The direction 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 direction, MPI_Cart_shift provides the identifiers for a circular or an end-off shift. In the case of an end-off shift, the value MPI_PROC_NULL may be returned in rank_source or rank_dest, indicating that the source or the destination for the shift is out of range.
|
|
.sp
|
|
\fBExample:\fP The communicator, comm, 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.
|
|
.sp
|
|
.nf
|
|
\&....
|
|
C find process rank
|
|
CALL MPI_COMM_RANK(comm, rank, ierr))
|
|
C find Cartesian coordinates
|
|
CALL MPI_CART_COORDS(comm, rank, maxdims, coords,
|
|
ierr)
|
|
C compute shift source and destination
|
|
CALL MPI_CART_SHIFT(comm, 0, coords(2), source,
|
|
dest, ierr)
|
|
C skew array
|
|
CALL MPI_SENDRECV_REPLACE(A, 1, MPI_REAL, dest, 0,
|
|
source, 0, comm, status,
|
|
ierr)
|
|
.fi
|
|
|
|
.SH NOTE
|
|
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
|
|
Almost all MPI routines return an error value; C routines as the value of the function and Fortran routines in the last argument. C++ functions do not return errors. If the default error handler is set to MPI::ERRORS_THROW_EXCEPTIONS, then on error the C++ exception mechanism will be used to throw an MPI::Exception object.
|
|
.sp
|
|
Before the error value is returned, the current MPI error handler is
|
|
called. By default, this error handler aborts the MPI job, except for I/O function errors. The error handler may be changed with MPI_Comm_set_errhandler; the predefined error handler MPI_ERRORS_RETURN may be used to cause error values to be returned. Note that MPI does not guarantee that an MPI program can continue past an error.
|
|
|