.\" Man page generated from reStructuredText .\" by the Docutils 0.23 manpage writer. . . .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 .. .TH "SHMEM_SHORT_WAIT_UNTIL" "3" "Oct 09, 2026" "" "Open MPI" .INDENT 0.0 .INDENT 3.5 .UNINDENT .UNINDENT .sp shmem_int_wait \%<#\:shmem-int-wait>(3), shmem_int_wait \%<#\:shmem-int-wait>(3)_until, shmem_int4_wait(3), shmem_int4_wait(3)_until, shmem_int8_wait(3), shmem_int8_wait(3)_until, shmem_long_wait \%<#\:shmem-long-wait>(3), shmem_long_wait \%<#\:shmem-long-wait>(3)_until, shmem_longlong_wait \%<#\:shmem-longlong-wait>(3), shmem_longlong_wait \%<#\:shmem-longlong-wait>(3)_until, shmem_short_wait \%<#\:shmem-short-wait>(3), shmem_short_wait \%<#\:shmem-short-wait>(3)_until, shmem_wait \%<#\:shmem-wait>(3), shmem_wait \%<#\:shmem-wait>(3)_until \- Waits for a variable on the local processing element (PE) to change .SH SYNOPSIS .sp C or C++: .INDENT 0.0 .INDENT 3.5 .sp .EX #include void shmem_int_wait(volatile int *var, int value) void shmem_int_wait_until(volatile int *var, int cond, int value) void shmem_long_wait(volatile long *var, long value) void shmem_long_wait_until(volatile long *var, int cond, long value) void shmem_longlong_wait(volatile long long *var, long long value) void shmem_longlong_wait_until(volatile long long *var, int cond, long long value) void shmem_short_wait(volatile short *var, short value) void shmem_short_wait_until(volatile short *var, int cond, short value) void shmem_wait(volatile long *ivar, long cmp_value) void shmem_wait_until(volatile long *ivar, int cmp, long value) .EE .UNINDENT .UNINDENT .sp Fortran: .INDENT 0.0 .INDENT 3.5 .sp .EX INCLUDE \(dqmpp/shmem.fh\(dq CALL SHMEM_INT4_WAIT(ivar, cmp_value) CALL SHMEM_INT4_WAIT_UNTIL(ivar, cmp, cmp_value) CALL SHMEM_INT8_WAIT(ivar, cmp_value) CALL SHMEM_INT8_WAIT_UNTIL(ivar, cmp, cmp_value) CALL SHMEM_WAIT(ivar, cmp_value) CALL SHMEM_WAIT_UNTIL(ivar, cmp, cmp_value) .EE .UNINDENT .UNINDENT .SH DESCRIPTION .sp shmem_wait \%<#\:shmem-wait> and shmem_wait_until \%<#\:shmem-wait-until> wait for \fBivar\fP to be changed by a remote write or atomic swap issued by a different processor. These routines can be used for point\-to\- point directed synchronization. A call to shmem_wait \%<#\:shmem-wait> does not return until some other processor writes a value, not equal to cmp_value, into \fBivar\fP on the waiting processor. A call to shmem_wait_until \%<#\:shmem-wait-until> does not return until some other processor changes \fBivar\fP to satisfy the condition implied by cmp and cmp_value. This mechanism is useful when a processor needs to tell another processor that it has completed some action. .sp The arguments are as follows: .INDENT 0.0 .TP .B ivar A remotely accessible integer variable that is being updated by another PE. If you are using C/C++, the type of ivar should match that implied in the SYNOPSIS section. If you are using Fortran, ivar must be a specific sized integer type according to the function being called, as follows: .sp shmem_wait \%<#\:shmem-wait>, shmem_wait_until \%<#\:shmem-wait-until>:** default INTEGER .sp shmem_int4_wait, shmem_int4_wait_until:** INTEGER*4 .sp shmem_int8_wait, shmem_int8_wait_until:** INTEGER*8 .TP .B cmp The compare operator that compares ivar with cmp_value. cmp must be of type integer. If you are using Fortran, it must be of default kind. If you are using C/C++, the type of cmp should match that implied in the SYNOPSIS section. The following cmp values are supported: .INDENT 7.0 .TP .B SHMEM_CMP_EQ Equal .TP .B SHMEM_CMP_NE Not equal .TP .B SHMEM_CMP_GT Greater than .TP .B SHMEM_CMP_LE Less than or equal to .TP .B SHMEM_CMP_LT Less than .TP .B SHMEM_CMP_GE Greater than or equal to .UNINDENT .TP .B cmp_value cmp_value must be of type integer. If you are using C/C++, the type of cmp_value should match that implied in the SYNOPSIS section. If you are using Fortran, cmp_value must be an integer of the same size and kind as ivar. The shmem_wait \%<#\:shmem-wait> routines return when ivar is no longer equal to cmp_value. The shmem_wait_until \%<#\:shmem-wait-until> routines return when the compare condition is true. The compare condition is defined by the ivar argument compared with the cmp_value using the comparison operator, cmp. .UNINDENT .SH EXAMPLES .sp \fBExample 1:\fP The following call returns when variable ivar is not equal to 100: .INDENT 0.0 .INDENT 3.5 .sp .EX INTEGER*8 IVAR CALL SHMEM_INT8_WAIT(IVAR, INT8(100)) .EE .UNINDENT .UNINDENT .sp \fBExample 2:\fP The following call to SHMEM_INT8_WAIT_UNTIL is equivalent to the call to SHMEM_INT8_WAIT in example 1: .INDENT 0.0 .INDENT 3.5 .sp .EX INTEGER*8 IVAR CALL SHMEM_INT8_WAIT_UNTIL(IVAR, SHMEM_CMP_NE, INT8(100)) .EE .UNINDENT .UNINDENT .sp \fBExample 3:\fP The following C/C++ call waits until the sign bit in ivar is set by a transfer from a remote PE: .INDENT 0.0 .INDENT 3.5 .sp .EX int ivar; shmem_int_wait_until(&ivar, SHMEM_CMP_LT, 0); .EE .UNINDENT .UNINDENT .sp \fBExample 4:\fP The following Fortran example is in the context of a subroutine: .INDENT 0.0 .INDENT 3.5 .sp .EX SUBROUTINE EXAMPLE() INTEGER FLAG_VAR COMMON/FLAG/FLAG_VAR . . . FLAG_VAR = FLAG_VALUE ! initialize the event variable . . . IF (FLAG_VAR .EQ. FLAG_VALUE) THEN CALL SHMEM_WAIT(FLAG_VAR, FLAG_VALUE) ENDIF FLAG_VAR = FLAG_VALUE ! reset the event variable for next time . . . END .EE .UNINDENT .UNINDENT .sp \fBSee also:\fP .INDENT 0.0 .INDENT 3.5 \fIintro_shmem\fP(3) \fIshmem_put\fP(3) .UNINDENT .UNINDENT .SH Copyright 2003-2026, The Open MPI Community .\" End of generated man page.