1e2019ce2a
This reverts commit cb55c88a8b
.
113 строки
3.3 KiB
Plaintext
113 строки
3.3 KiB
Plaintext
.\" -*- nroff -*-
|
|
.\" Copyright (c) 2015 University of Houston. All rights reserved.
|
|
.\" Copyright (c) 2015 Mellanox Technologies, Inc.
|
|
.\" $COPYRIGHT$
|
|
.de Vb
|
|
.ft CW
|
|
.nf
|
|
..
|
|
.de Ve
|
|
.ft R
|
|
|
|
.fi
|
|
..
|
|
.TH "SHMEM\\_BARRIER" "3" "#OMPI_DATE#" "#PACKAGE_VERSION#" "#PACKAGE_NAME#"
|
|
.SH NAME
|
|
|
|
shmem_barrier \- Performs a barrier operation on a subset of processing elements (PEs).
|
|
.SH SYNOPSIS
|
|
|
|
C or C++:
|
|
.Vb
|
|
#include <mpp/shmem.h>
|
|
|
|
void shmem_barrier(int PE_start, int logPE_stride, int PE_size,
|
|
long *pSync);
|
|
.Ve
|
|
Fortran:
|
|
.Vb
|
|
INCLUDE "mpp/shmem.fh"
|
|
|
|
INTEGER PE_start, logPE_stride, PE_size
|
|
INTEGER pSync(SHMEM_BARRIER_SYNC_SIZE)
|
|
|
|
CALL SHMEM_BARRIER(PE_start, logPE_stride, PE_size, pSync)
|
|
.Ve
|
|
.SH DESCRIPTION
|
|
|
|
The shmem_barrier routine does not return until the subset of PEs specified by
|
|
\fBPE_start\fP,
|
|
\fBlogPE_stride\fP
|
|
and \fBPE_size\fP,
|
|
has entered this routine at the
|
|
same point of the execution path.
|
|
.PP
|
|
As with all SHMEM collective routines, each of these routines assumes that only PEs in the
|
|
active set call the routine. If a PE not in the active set calls a SHMEM collective routine,
|
|
undefined behavior results.
|
|
.PP
|
|
The arguments are as follows:
|
|
.TP
|
|
PE_start
|
|
The lowest virtual PE number of the active set of PEs. PE_start must be of
|
|
type integer. If you are using Fortran, it must be a default integer value.
|
|
.TP
|
|
logPE_stride
|
|
The log (base 2) of the stride between consecutive virtual PE numbers in
|
|
the active set. logPE_stride must be of type integer. If you are using Fortran, it must be a
|
|
default integer value.
|
|
.TP
|
|
PE_size
|
|
The number of PEs in the active set. PE_size must be of type integer. If you
|
|
are using Fortran, it must be a default integer value.
|
|
.TP
|
|
pSync
|
|
A symmetric work array. In C/C++, pSync must be of type int and size
|
|
_SHMEM_BARRIER_SYNC_SIZE. In Fortran, pSync must be of type integer and size
|
|
SHMEM_BARRIER_SYNC_SIZE. If you are using Fortran, it must be a default integer type.
|
|
Every element of this array must be initialized to 0 before any of the PEs in the active set enter
|
|
shmem_barrier the first time.
|
|
.PP
|
|
The values of arguments PE_start, logPE_stride, and PE_size must be equal on all PEs in the
|
|
active set. The same work array must be passed in pSync to all PEs in the active set.
|
|
.PP
|
|
shmem_barrier ensures that all previously issued local stores and previously issued remote
|
|
memory updates done by any of the PEs in the active set (by using SHMEM calls, for
|
|
example \fIshmem_put\fP(3))
|
|
are complete before returning.
|
|
.PP
|
|
The same pSync array may be reused on consecutive calls to shmem_barrier if the same
|
|
active PE set is used.
|
|
.PP
|
|
.SH NOTES
|
|
|
|
The term symmetric is defined in \fIintro_shmem\fP(3)\&.
|
|
.PP
|
|
If the pSync array is initialized at run time, be sure to use some type of synchronization, for
|
|
example, a call to \fIshmem_barrier_all\fP(3),
|
|
before calling shmem_barrier for the first
|
|
time.
|
|
.PP
|
|
If the active set does not change, shmem_barrier can be called repeatedly with the same
|
|
pSync array. No additional synchronization beyond that implied by shmem_barrier itself is
|
|
necessary in this case.
|
|
.PP
|
|
.SH EXAMPLES
|
|
|
|
C/C++ example:
|
|
.Vb
|
|
shmem_barrier(PE_start, logPE_stride, size, pSync);
|
|
.Ve
|
|
Fortran example:
|
|
.Vb
|
|
INTEGER PSYNC(SHMEM_BARRIER_SYNC_SIZE)
|
|
INTEGER PE_START, LOGPE_STRIDE, PE_SIZE, PSYNC
|
|
DATA PSYNC /SHMEM_BARRIER_SYNC_SIZE*0/
|
|
|
|
CALL SHMEM_BARRIER(PE_START, LOGPE_STRIDE, PE_SIZE, PSYNC)
|
|
.Ve
|
|
.SH SEE ALSO
|
|
|
|
\fIintro_shmem\fP(3),
|
|
\fIshmem_barrier_all\fP(3)
|