\hypertarget{ompi__module__exchange_8h}{\section{ompi/runtime/ompi\+\_\+module\+\_\+exchange.h File Reference}
\label{ompi__module__exchange_8h}\index{ompi/runtime/ompi\+\_\+module\+\_\+exchange.\+h@{ompi/runtime/ompi\+\_\+module\+\_\+exchange.\+h}}
}


Open M\+P\+I module-\/related data transfer mechanism.  


{\ttfamily \#include \char`\"{}ompi\+\_\+config.\+h\char`\"{}}\\*
{\ttfamily \#include \char`\"{}opal/dss/dss\+\_\+types.\+h\char`\"{}}\\*
{\ttfamily \#include \char`\"{}opal/mca/mca.\+h\char`\"{}}\\*
\subsection*{Functions}
\begin{DoxyCompactItemize}
\item 
B\+E\+G\+I\+N\+\_\+\+C\+\_\+\+D\+E\+C\+L\+S O\+M\+P\+I\+\_\+\+D\+E\+C\+L\+S\+P\+E\+C int \hyperlink{ompi__module__exchange_8h_a2b9a27750560e4fc316a31514a1da589}{ompi\+\_\+modex\+\_\+send} (\hyperlink{mca_8h_a8ec1d0b303938c31727745037481d1bf}{mca\+\_\+base\+\_\+component\+\_\+t} $\ast$source\+\_\+component, const void $\ast$buffer, size\+\_\+t size)
\begin{DoxyCompactList}\small\item\em \hyperlink{structSend}{Send} a module-\/specific buffer to all other corresponding M\+C\+A modules in peer processes. \end{DoxyCompactList}\item 
O\+M\+P\+I\+\_\+\+D\+E\+C\+L\+S\+P\+E\+C int \hyperlink{ompi__module__exchange_8h_a822f3e5fc3dbb2e877c9512f24aaddd0}{ompi\+\_\+modex\+\_\+send\+\_\+string} (const char $\ast$key, const void $\ast$buffer, size\+\_\+t size)
\begin{DoxyCompactList}\small\item\em \hyperlink{structSend}{Send} a buffer to all other corresponding peer process. \end{DoxyCompactList}\item 
O\+M\+P\+I\+\_\+\+D\+E\+C\+L\+S\+P\+E\+C int \hyperlink{ompi__module__exchange_8h_ae2d96e3de4300f881155f3ce2ad19746}{ompi\+\_\+modex\+\_\+send\+\_\+key\+\_\+value} (const char $\ast$key, const void $\ast$value, opal\+\_\+data\+\_\+type\+\_\+t dtype)
\begin{DoxyCompactList}\small\item\em \hyperlink{structSend}{Send} a value to all other corresponding peer process. \end{DoxyCompactList}\item 
O\+M\+P\+I\+\_\+\+D\+E\+C\+L\+S\+P\+E\+C int \hyperlink{ompi__module__exchange_8h_a359e0023ca30f1604e9af688bcc2033b}{ompi\+\_\+modex\+\_\+recv} (\hyperlink{mca_8h_a8ec1d0b303938c31727745037481d1bf}{mca\+\_\+base\+\_\+component\+\_\+t} $\ast$dest\+\_\+component, struct \hyperlink{structompi__proc__t}{ompi\+\_\+proc\+\_\+t} $\ast$source\+\_\+proc, void $\ast$$\ast$buffer, size\+\_\+t $\ast$size)
\begin{DoxyCompactList}\small\item\em Receive a module-\/specific buffer from a corresponding M\+C\+A module in a specific peer process. \end{DoxyCompactList}\item 
O\+M\+P\+I\+\_\+\+D\+E\+C\+L\+S\+P\+E\+C int \hyperlink{ompi__module__exchange_8h_a50e3287c6db6b824f771ad2b1fb251be}{ompi\+\_\+modex\+\_\+recv\+\_\+string} (const char $\ast$key, struct \hyperlink{structompi__proc__t}{ompi\+\_\+proc\+\_\+t} $\ast$source\+\_\+proc, void $\ast$$\ast$buffer, size\+\_\+t $\ast$size)
\begin{DoxyCompactList}\small\item\em Receive a buffer from a given peer. \end{DoxyCompactList}\item 
O\+M\+P\+I\+\_\+\+D\+E\+C\+L\+S\+P\+E\+C int \hyperlink{ompi__module__exchange_8h_af59c3e094a3e1fd26b969b63f508879d}{ompi\+\_\+modex\+\_\+recv\+\_\+key\+\_\+value} (const char $\ast$key, struct \hyperlink{structompi__proc__t}{ompi\+\_\+proc\+\_\+t} $\ast$source\+\_\+proc, void $\ast$value, opal\+\_\+data\+\_\+type\+\_\+t dtype)
\begin{DoxyCompactList}\small\item\em Recv a value from a given peer. \end{DoxyCompactList}\end{DoxyCompactItemize}


\subsection{Detailed Description}
Open M\+P\+I module-\/related data transfer mechanism. 

A system for publishing module-\/related data for global initialization. Known simply as the \char`\"{}modex\char`\"{}, this interface provides a system for sharing data, particularly data related to modules and their availability on the system.

The modex system is tightly integrated into the general run-\/time initialization system and takes advantage of global update periods to minimize the amount of network traffic. All updates are also stored in the general purpose registry, and can be read at any time during the life of the process. Care should be taken to not call the blocking receive during the first stage of global initialization, as data will not be available the process will likely hang.

\begin{DoxyNote}{Note}
For the purpose of this interface, two components are \char`\"{}corresponding\char`\"{} if\+:
\begin{DoxyItemize}
\item they share the same major and minor M\+C\+A version number
\item they have the same type name string
\item they share the same major and minor type version number
\item they have the same component name string
\item they share the same major and minor component version number 
\end{DoxyItemize}
\end{DoxyNote}


\subsection{Function Documentation}
\hypertarget{ompi__module__exchange_8h_a359e0023ca30f1604e9af688bcc2033b}{\index{ompi\+\_\+module\+\_\+exchange.\+h@{ompi\+\_\+module\+\_\+exchange.\+h}!ompi\+\_\+modex\+\_\+recv@{ompi\+\_\+modex\+\_\+recv}}
\index{ompi\+\_\+modex\+\_\+recv@{ompi\+\_\+modex\+\_\+recv}!ompi\+\_\+module\+\_\+exchange.\+h@{ompi\+\_\+module\+\_\+exchange.\+h}}
\subsubsection[{ompi\+\_\+modex\+\_\+recv}]{\setlength{\rightskip}{0pt plus 5cm}O\+M\+P\+I\+\_\+\+D\+E\+C\+L\+S\+P\+E\+C int ompi\+\_\+modex\+\_\+recv (
\begin{DoxyParamCaption}
\item[{{\bf mca\+\_\+base\+\_\+component\+\_\+t} $\ast$}]{dest\+\_\+component, }
\item[{struct {\bf ompi\+\_\+proc\+\_\+t} $\ast$}]{source\+\_\+proc, }
\item[{void $\ast$$\ast$}]{buffer, }
\item[{size\+\_\+t $\ast$}]{size}
\end{DoxyParamCaption}
)}}\label{ompi__module__exchange_8h_a359e0023ca30f1604e9af688bcc2033b}


Receive a module-\/specific buffer from a corresponding M\+C\+A module in a specific peer process. 

This is the corresponding \char`\"{}get\char`\"{} call to \hyperlink{ompi__module__exchange_8h_a2b9a27750560e4fc316a31514a1da589}{ompi\+\_\+modex\+\_\+send()}. After selection, modules can call this function to receive the buffer sent by their corresponding module on the process source\+\_\+proc.

If a buffer from a corresponding module is found, buffer will be filled with a pointer to a copy of the buffer that was sent by the peer process. It is the caller's responsibility to free this buffer. The size will be filled in with the total size of the buffer.

\begin{DoxyNote}{Note}
If the modex system has received information from a given process, but has not yet received information for the given component, \hyperlink{ompi__module__exchange_8h_a359e0023ca30f1604e9af688bcc2033b}{ompi\+\_\+modex\+\_\+recv()} will return no data. This can not happen to a process that has gone through the normal startup proceedure, but if you believe this can happen with your component, you should use ompi\+\_\+modex\+\_\+recv\+\_\+nb() to receive updates when the information becomes available.
\end{DoxyNote}

\begin{DoxyParams}[1]{Parameters}
\mbox{\tt in}  & {\em dest\+\_\+component} & A pointer to this module's component struct \\
\hline
\mbox{\tt in}  & {\em source\+\_\+proc} & Peer process to receive from \\
\hline
\mbox{\tt out}  & {\em buffer} & A pointer to a (void$\ast$) that will be filled with a pointer to the received buffer \\
\hline
\mbox{\tt out}  & {\em size} & Pointer to a size\+\_\+t that will be filled with the number of bytes in the buffer\\
\hline
\end{DoxyParams}

\begin{DoxyRetVals}{Return values}
{\em O\+M\+P\+I\+\_\+\+S\+U\+C\+C\+E\+S\+S} & If a corresponding module buffer is found and successfully returned to the caller. \\
\hline
{\em O\+M\+P\+I\+\_\+\+E\+R\+R\+\_\+\+N\+O\+T\+\_\+\+I\+M\+P\+L\+E\+M\+E\+N\+T\+E\+D} & Modex support is not available in this build of Open M\+P\+I (systems like the Cray X\+T) \\
\hline
{\em O\+M\+P\+I\+\_\+\+E\+R\+R\+\_\+\+O\+U\+T\+\_\+\+O\+F\+\_\+\+R\+E\+S\+O\+U\+R\+C\+E} & No memory could be allocated for the buffer. \\
\hline
\end{DoxyRetVals}


References ompi\+\_\+proc\+\_\+t\+::proc\+\_\+name.

\hypertarget{ompi__module__exchange_8h_af59c3e094a3e1fd26b969b63f508879d}{\index{ompi\+\_\+module\+\_\+exchange.\+h@{ompi\+\_\+module\+\_\+exchange.\+h}!ompi\+\_\+modex\+\_\+recv\+\_\+key\+\_\+value@{ompi\+\_\+modex\+\_\+recv\+\_\+key\+\_\+value}}
\index{ompi\+\_\+modex\+\_\+recv\+\_\+key\+\_\+value@{ompi\+\_\+modex\+\_\+recv\+\_\+key\+\_\+value}!ompi\+\_\+module\+\_\+exchange.\+h@{ompi\+\_\+module\+\_\+exchange.\+h}}
\subsubsection[{ompi\+\_\+modex\+\_\+recv\+\_\+key\+\_\+value}]{\setlength{\rightskip}{0pt plus 5cm}O\+M\+P\+I\+\_\+\+D\+E\+C\+L\+S\+P\+E\+C int ompi\+\_\+modex\+\_\+recv\+\_\+key\+\_\+value (
\begin{DoxyParamCaption}
\item[{const char $\ast$}]{key, }
\item[{struct {\bf ompi\+\_\+proc\+\_\+t} $\ast$}]{source\+\_\+proc, }
\item[{void $\ast$}]{value, }
\item[{opal\+\_\+data\+\_\+type\+\_\+t}]{dtype}
\end{DoxyParamCaption}
)}}\label{ompi__module__exchange_8h_af59c3e094a3e1fd26b969b63f508879d}


Recv a value from a given peer. 

Similar to \hyperlink{ompi__module__exchange_8h_a359e0023ca30f1604e9af688bcc2033b}{ompi\+\_\+modex\+\_\+recv()}, but uses a char$\ast$ key instead of a component name for indexing, and performs all required conditioning to deal with heterogeneity.


\begin{DoxyParams}[1]{Parameters}
\mbox{\tt in}  & {\em key} & A unique key for data storage / lookup \\
\hline
\mbox{\tt in}  & {\em source\+\_\+proc} & Peer process to receive from \\
\hline
\mbox{\tt in}  & {\em value} & A pointer to the address where the data value will be stored \\
\hline
\mbox{\tt in}  & {\em dtype} & Data type of the value\\
\hline
\end{DoxyParams}

\begin{DoxyRetVals}{Return values}
{\em O\+M\+P\+I\+\_\+\+S\+U\+C\+C\+E\+S\+S} & If a corresponding module value is found and successfully returned to the caller. \\
\hline
{\em O\+M\+P\+I\+\_\+\+E\+R\+R\+\_\+\+N\+O\+T\+\_\+\+I\+M\+P\+L\+E\+M\+E\+N\+T\+E\+D} & Modex support is not available in this build of Open M\+P\+I (systems like the Cray X\+T) \\
\hline
\end{DoxyRetVals}


References O\+B\+J\+\_\+\+C\+O\+N\+S\+T\+R\+U\+C\+T, O\+B\+J\+\_\+\+D\+E\+S\+T\+R\+U\+C\+T, and ompi\+\_\+proc\+\_\+t\+::proc\+\_\+name.



Referenced by ompi\+\_\+proc\+\_\+complete\+\_\+init().

\hypertarget{ompi__module__exchange_8h_a50e3287c6db6b824f771ad2b1fb251be}{\index{ompi\+\_\+module\+\_\+exchange.\+h@{ompi\+\_\+module\+\_\+exchange.\+h}!ompi\+\_\+modex\+\_\+recv\+\_\+string@{ompi\+\_\+modex\+\_\+recv\+\_\+string}}
\index{ompi\+\_\+modex\+\_\+recv\+\_\+string@{ompi\+\_\+modex\+\_\+recv\+\_\+string}!ompi\+\_\+module\+\_\+exchange.\+h@{ompi\+\_\+module\+\_\+exchange.\+h}}
\subsubsection[{ompi\+\_\+modex\+\_\+recv\+\_\+string}]{\setlength{\rightskip}{0pt plus 5cm}O\+M\+P\+I\+\_\+\+D\+E\+C\+L\+S\+P\+E\+C int ompi\+\_\+modex\+\_\+recv\+\_\+string (
\begin{DoxyParamCaption}
\item[{const char $\ast$}]{key, }
\item[{struct {\bf ompi\+\_\+proc\+\_\+t} $\ast$}]{source\+\_\+proc, }
\item[{void $\ast$$\ast$}]{buffer, }
\item[{size\+\_\+t $\ast$}]{size}
\end{DoxyParamCaption}
)}}\label{ompi__module__exchange_8h_a50e3287c6db6b824f771ad2b1fb251be}


Receive a buffer from a given peer. 

Similar to \hyperlink{ompi__module__exchange_8h_a359e0023ca30f1604e9af688bcc2033b}{ompi\+\_\+modex\+\_\+recv()}, but uses a char$\ast$ key instead of a component name for indexing. All other semantics apply.

\begin{DoxyNote}{Note}
If the modex system has received information from a given process, but has not yet received information for the given component, \hyperlink{ompi__module__exchange_8h_a50e3287c6db6b824f771ad2b1fb251be}{ompi\+\_\+modex\+\_\+recv\+\_\+string()} will return no data. This can not happen to a process that has gone through the normal startup proceedure, but if you believe this can happen with your component, you should use ompi\+\_\+modex\+\_\+recv\+\_\+string\+\_\+nb() to receive updates when the information becomes available.
\end{DoxyNote}

\begin{DoxyParams}[1]{Parameters}
\mbox{\tt in}  & {\em key} & A unique key for data storage / lookup \\
\hline
\mbox{\tt in}  & {\em source\+\_\+proc} & Peer process to receive from \\
\hline
\mbox{\tt out}  & {\em buffer} & A pointer to a (void$\ast$) that will be filled with a pointer to the received buffer \\
\hline
\mbox{\tt out}  & {\em size} & Pointer to a size\+\_\+t that will be filled with the number of bytes in the buffer\\
\hline
\end{DoxyParams}

\begin{DoxyRetVals}{Return values}
{\em O\+M\+P\+I\+\_\+\+S\+U\+C\+C\+E\+S\+S} & If a corresponding module buffer is found and successfully returned to the caller. \\
\hline
{\em O\+M\+P\+I\+\_\+\+E\+R\+R\+\_\+\+N\+O\+T\+\_\+\+I\+M\+P\+L\+E\+M\+E\+N\+T\+E\+D} & Modex support is not available in this build of Open M\+P\+I (systems like the Cray X\+T) \\
\hline
{\em O\+M\+P\+I\+\_\+\+E\+R\+R\+\_\+\+O\+U\+T\+\_\+\+O\+F\+\_\+\+R\+E\+S\+O\+U\+R\+C\+E} & No memory could be allocated for the buffer. \\
\hline
\end{DoxyRetVals}


References ompi\+\_\+proc\+\_\+t\+::proc\+\_\+name.

\hypertarget{ompi__module__exchange_8h_a2b9a27750560e4fc316a31514a1da589}{\index{ompi\+\_\+module\+\_\+exchange.\+h@{ompi\+\_\+module\+\_\+exchange.\+h}!ompi\+\_\+modex\+\_\+send@{ompi\+\_\+modex\+\_\+send}}
\index{ompi\+\_\+modex\+\_\+send@{ompi\+\_\+modex\+\_\+send}!ompi\+\_\+module\+\_\+exchange.\+h@{ompi\+\_\+module\+\_\+exchange.\+h}}
\subsubsection[{ompi\+\_\+modex\+\_\+send}]{\setlength{\rightskip}{0pt plus 5cm}B\+E\+G\+I\+N\+\_\+\+C\+\_\+\+D\+E\+C\+L\+S O\+M\+P\+I\+\_\+\+D\+E\+C\+L\+S\+P\+E\+C int ompi\+\_\+modex\+\_\+send (
\begin{DoxyParamCaption}
\item[{{\bf mca\+\_\+base\+\_\+component\+\_\+t} $\ast$}]{source\+\_\+component, }
\item[{const void $\ast$}]{buffer, }
\item[{size\+\_\+t}]{size}
\end{DoxyParamCaption}
)}}\label{ompi__module__exchange_8h_a2b9a27750560e4fc316a31514a1da589}


\hyperlink{structSend}{Send} a module-\/specific buffer to all other corresponding M\+C\+A modules in peer processes. 

This function takes a contiguous buffer of network-\/ordered data and makes it available to all other M\+C\+A processes during the selection process. Modules sent by one source\+\_\+component can only be received by a corresponding module with the same component name.

This function is indended to be used during M\+C\+A module initialization {\itshape before} {\itshape selection} (the selection process is defined differently for each component type). Each module will provide a buffer containing meta information and/or parameters that it wants to share with its corresponding modules in peer processes. This information typically contains location / contact information for establishing communication between processes (in a manner that is specific to that module). For example, a T\+C\+P-\/based module could provide its I\+P address and T\+C\+P port where it is waiting on listen(). The peer process receiving this buffer can therefore open a socket to the indicated I\+P address and T\+C\+P port.

During the selection process, the M\+C\+A framework will effectively perform an \char`\"{}allgather\char`\"{} operation of all modex buffers; every buffer will be available to every peer process (see \hyperlink{ompi__module__exchange_8h_a359e0023ca30f1604e9af688bcc2033b}{ompi\+\_\+modex\+\_\+recv()}).

The buffer is copied during the send call and may be modified or free()'ed immediately after the return from this function call.

\begin{DoxyNote}{Note}
Buffer contents is transparent to the M\+C\+A framework -- it {\itshape must} already either be in network order or be in some format that peer processes will be able to read it, regardless of pointer sizes or endian bias.
\end{DoxyNote}

\begin{DoxyParams}[1]{Parameters}
\mbox{\tt in}  & {\em source\+\_\+component} & A pointer to this module's component structure \\
\hline
\mbox{\tt in}  & {\em buffer} & A pointer to the beginning of the buffer to send \\
\hline
\mbox{\tt in}  & {\em size} & Number of bytes in the buffer\\
\hline
\end{DoxyParams}

\begin{DoxyRetVals}{Return values}
{\em O\+M\+P\+I\+\_\+\+S\+U\+C\+C\+E\+S\+S} & On success \\
\hline
{\em O\+M\+P\+I\+\_\+\+E\+R\+R\+O\+R} & An unspecified error occurred \\
\hline
\end{DoxyRetVals}


Referenced by mca\+\_\+btl\+\_\+elan\+\_\+component\+\_\+init(), and mca\+\_\+btl\+\_\+mx\+\_\+component\+\_\+init().

\hypertarget{ompi__module__exchange_8h_ae2d96e3de4300f881155f3ce2ad19746}{\index{ompi\+\_\+module\+\_\+exchange.\+h@{ompi\+\_\+module\+\_\+exchange.\+h}!ompi\+\_\+modex\+\_\+send\+\_\+key\+\_\+value@{ompi\+\_\+modex\+\_\+send\+\_\+key\+\_\+value}}
\index{ompi\+\_\+modex\+\_\+send\+\_\+key\+\_\+value@{ompi\+\_\+modex\+\_\+send\+\_\+key\+\_\+value}!ompi\+\_\+module\+\_\+exchange.\+h@{ompi\+\_\+module\+\_\+exchange.\+h}}
\subsubsection[{ompi\+\_\+modex\+\_\+send\+\_\+key\+\_\+value}]{\setlength{\rightskip}{0pt plus 5cm}O\+M\+P\+I\+\_\+\+D\+E\+C\+L\+S\+P\+E\+C int ompi\+\_\+modex\+\_\+send\+\_\+key\+\_\+value (
\begin{DoxyParamCaption}
\item[{const char $\ast$}]{key, }
\item[{const void $\ast$}]{value, }
\item[{opal\+\_\+data\+\_\+type\+\_\+t}]{dtype}
\end{DoxyParamCaption}
)}}\label{ompi__module__exchange_8h_ae2d96e3de4300f881155f3ce2ad19746}


\hyperlink{structSend}{Send} a value to all other corresponding peer process. 

Similar to \hyperlink{ompi__module__exchange_8h_a2b9a27750560e4fc316a31514a1da589}{ompi\+\_\+modex\+\_\+send()}, but uses a char$\ast$ key instead of a component name for indexing, and performs all required conditioning to deal with heterogeneity.


\begin{DoxyParams}[1]{Parameters}
\mbox{\tt in}  & {\em key} & A unique key for data storage / lookup \\
\hline
\mbox{\tt in}  & {\em value} & A pointer to data value \\
\hline
\mbox{\tt in}  & {\em dtype} & Data type of the value\\
\hline
\end{DoxyParams}

\begin{DoxyRetVals}{Return values}
{\em O\+M\+P\+I\+\_\+\+S\+U\+C\+C\+E\+S\+S} & On success \\
\hline
{\em O\+M\+P\+I\+\_\+\+E\+R\+R\+O\+R} & An unspecified error occurred \\
\hline
\end{DoxyRetVals}


References O\+B\+J\+\_\+\+C\+O\+N\+S\+T\+R\+U\+C\+T, and O\+B\+J\+\_\+\+D\+E\+S\+T\+R\+U\+C\+T.



Referenced by ompi\+\_\+proc\+\_\+init().

\hypertarget{ompi__module__exchange_8h_a822f3e5fc3dbb2e877c9512f24aaddd0}{\index{ompi\+\_\+module\+\_\+exchange.\+h@{ompi\+\_\+module\+\_\+exchange.\+h}!ompi\+\_\+modex\+\_\+send\+\_\+string@{ompi\+\_\+modex\+\_\+send\+\_\+string}}
\index{ompi\+\_\+modex\+\_\+send\+\_\+string@{ompi\+\_\+modex\+\_\+send\+\_\+string}!ompi\+\_\+module\+\_\+exchange.\+h@{ompi\+\_\+module\+\_\+exchange.\+h}}
\subsubsection[{ompi\+\_\+modex\+\_\+send\+\_\+string}]{\setlength{\rightskip}{0pt plus 5cm}O\+M\+P\+I\+\_\+\+D\+E\+C\+L\+S\+P\+E\+C int ompi\+\_\+modex\+\_\+send\+\_\+string (
\begin{DoxyParamCaption}
\item[{const char $\ast$}]{key, }
\item[{const void $\ast$}]{buffer, }
\item[{size\+\_\+t}]{size}
\end{DoxyParamCaption}
)}}\label{ompi__module__exchange_8h_a822f3e5fc3dbb2e877c9512f24aaddd0}


\hyperlink{structSend}{Send} a buffer to all other corresponding peer process. 

Similar to \hyperlink{ompi__module__exchange_8h_a2b9a27750560e4fc316a31514a1da589}{ompi\+\_\+modex\+\_\+send()}, but uses a char$\ast$ key instead of a component name for indexing. All other semantics apply.

\begin{DoxyNote}{Note}
Buffer contents is transparent to the modex -- it {\itshape must} already either be in network order or be in some format that peer processes will be able to read it, regardless of pointer sizes or endian bias.
\end{DoxyNote}

\begin{DoxyParams}[1]{Parameters}
\mbox{\tt in}  & {\em key} & A unique key for data storage / lookup \\
\hline
\mbox{\tt in}  & {\em buffer} & A pointer to the beginning of the buffer to send \\
\hline
\mbox{\tt in}  & {\em size} & Number of bytes in the buffer\\
\hline
\end{DoxyParams}

\begin{DoxyRetVals}{Return values}
{\em O\+M\+P\+I\+\_\+\+S\+U\+C\+C\+E\+S\+S} & On success \\
\hline
{\em O\+M\+P\+I\+\_\+\+E\+R\+R\+O\+R} & An unspecified error occurred \\
\hline
\end{DoxyRetVals}


Referenced by ompi\+\_\+mpi\+\_\+init().

