1
1
openmpi/ompi/mpi/man/man3/MPI_Cart_shift.3in

108 строки
4.7 KiB
Plaintext
Исходник Обычный вид История

.\" -*- nroff -*-
.\" Copyright 2010 Cisco Systems, Inc. All rights reserved.
.\" Copyright 2006-2008 Sun Microsystems, Inc.
.\" Copyright (c) 1996 Thinking Machines
.\" $COPYRIGHT$
.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>
2015-06-23 20:59:57 -07:00
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)
.fi
.SH Fortran Syntax
.nf
USE MPI
! or the older form: 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
.fi
.SH Fortran 2008 Syntax
.nf
USE mpi_f08
MPI_Cart_shift(\fIcomm\fP, \fIdirection\fP, \fIdisp\fP, \fIrank_source\fP, \fIrank_dest\fP, \fIierror\fP)
TYPE(MPI_Comm), INTENT(IN) :: \fIcomm\fP
INTEGER, INTENT(IN) :: \fIdirection\fP, \fIdisp\fP
INTEGER, INTENT(OUT) :: \fIrank_source\fP, \fIrank_dest\fP
INTEGER, OPTIONAL, INTENT(OUT) :: \fIierror\fP
.fi
.SH C++ Syntax
.nf
#include <mpi.h>
2015-06-23 20:59:57 -07:00
void Cartcomm::Shift(int \fIdirection\fP, int \fIdisp\fP, int& \fIrank_source\fP,
int& \fIrank_dest\fP) const
.fi
.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
2015-06-23 20:59:57 -07:00
Fortran only: Error status (integer).
.SH DESCRIPTION
.ft R
2015-06-23 20:59:57 -07:00
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
2015-06-23 20:59:57 -07:00
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
2015-06-23 20:59:57 -07:00
\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
2015-06-23 20:59:57 -07:00
\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
2015-06-23 20:59:57 -07:00
\&....
C find process rank
CALL MPI_COMM_RANK(comm, rank, ierr))
2015-06-23 20:59:57 -07:00
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
2015-06-23 20:59:57 -07:00
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
2015-06-23 20:59:57 -07:00
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.