\hypertarget{mtl_8h}{\section{ompi/mca/mtl/mtl.h File Reference}
\label{mtl_8h}\index{ompi/mca/mtl/mtl.\+h@{ompi/mca/mtl/mtl.\+h}}
}


Matching Transport Layer.  


{\ttfamily \#include \char`\"{}ompi\+\_\+config.\+h\char`\"{}}\\*
{\ttfamily \#include \char`\"{}mpi.\+h\char`\"{}}\\*
{\ttfamily \#include \char`\"{}opal/mca/mca.\+h\char`\"{}}\\*
{\ttfamily \#include \char`\"{}ompi/mca/pml/pml.\+h\char`\"{}}\\*
{\ttfamily \#include \char`\"{}ompi/request/request.\+h\char`\"{}}\\*
\subsection*{Data Structures}
\begin{DoxyCompactItemize}
\item 
struct \hyperlink{structmca__mtl__request__t}{mca\+\_\+mtl\+\_\+request\+\_\+t}
\item 
struct \hyperlink{structmca__mtl__base__component__2__0__0__t}{mca\+\_\+mtl\+\_\+base\+\_\+component\+\_\+2\+\_\+0\+\_\+0\+\_\+t}
\item 
struct \hyperlink{structmca__mtl__base__module__t}{mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+t}
\begin{DoxyCompactList}\small\item\em M\+T\+L module interface functions and attributes. \end{DoxyCompactList}\end{DoxyCompactItemize}
\subsection*{Macros}
\begin{DoxyCompactItemize}
\item 
\#define {\bfseries M\+C\+A\+\_\+\+M\+T\+L\+\_\+\+B\+A\+S\+E\+\_\+\+V\+E\+R\+S\+I\+O\+N\+\_\+2\+\_\+0\+\_\+0}
\item 
\hypertarget{mtl_8h_a7a101bdc4c0e3ae59f50cb7a01521cc6}{\#define {\bfseries O\+M\+P\+I\+\_\+\+M\+T\+L\+\_\+\+C\+A\+L\+L}(a)~ompi\+\_\+mtl-\/$>$mtl\+\_\+ \#\# a}\label{mtl_8h_a7a101bdc4c0e3ae59f50cb7a01521cc6}

\end{DoxyCompactItemize}
\subsection*{Typedefs}
\begin{DoxyCompactItemize}
\item 
\hypertarget{mtl_8h_ab949754a272c9f414450373d239e3572}{typedef struct \hyperlink{structmca__mtl__request__t}{mca\+\_\+mtl\+\_\+request\+\_\+t} {\bfseries mca\+\_\+mtl\+\_\+request\+\_\+t}}\label{mtl_8h_ab949754a272c9f414450373d239e3572}

\item 
typedef struct \\*
\hyperlink{structmca__mtl__base__module__t}{mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+t} $\ast$($\ast$ \hyperlink{mtl_8h_a88a8bbaf65945b21107db2708d0626d8}{mca\+\_\+mtl\+\_\+base\+\_\+component\+\_\+init\+\_\+fn\+\_\+t} )(bool enable\+\_\+progress\+\_\+threads, bool enable\+\_\+mpi\+\_\+threads)
\begin{DoxyCompactList}\small\item\em Initialization routine for M\+T\+L component. \end{DoxyCompactList}\item 
\hypertarget{mtl_8h_a6698bd4b22940e42d4fd27d0db65dc25}{typedef struct \\*
\hyperlink{structmca__mtl__base__component__2__0__0__t}{mca\+\_\+mtl\+\_\+base\+\_\+component\+\_\+2\+\_\+0\+\_\+0\+\_\+t} {\bfseries mca\+\_\+mtl\+\_\+base\+\_\+component\+\_\+2\+\_\+0\+\_\+0\+\_\+t}}\label{mtl_8h_a6698bd4b22940e42d4fd27d0db65dc25}

\item 
\hypertarget{mtl_8h_a5b60e7ceb6c07c3a7797ef3ed544a91b}{typedef struct \\*
\hyperlink{structmca__mtl__base__component__2__0__0__t}{mca\+\_\+mtl\+\_\+base\+\_\+component\+\_\+2\+\_\+0\+\_\+0\+\_\+t} {\bfseries mca\+\_\+mtl\+\_\+base\+\_\+component\+\_\+t}}\label{mtl_8h_a5b60e7ceb6c07c3a7797ef3ed544a91b}

\item 
typedef int($\ast$ \hyperlink{mtl_8h_abc68960d7fb6c6f14503c7fbc69ddb66}{mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+finalize\+\_\+fn\+\_\+t} )(struct \hyperlink{structmca__mtl__base__module__t}{mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+t} $\ast$mtl)
\begin{DoxyCompactList}\small\item\em M\+C\+A-\/$>$M\+T\+L Clean up any resources held by M\+T\+L module. \end{DoxyCompactList}\item 
typedef int($\ast$ \hyperlink{mtl_8h_afd296ccb70afc739bdd1c51d530bb1f0}{mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+add\+\_\+procs\+\_\+fn\+\_\+t} )(struct \hyperlink{structmca__mtl__base__module__t}{mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+t} $\ast$mtl, size\+\_\+t nprocs, struct \hyperlink{structompi__proc__t}{ompi\+\_\+proc\+\_\+t} $\ast$$\ast$procs, struct \hyperlink{structmca__mtl__base__endpoint__t}{mca\+\_\+mtl\+\_\+base\+\_\+endpoint\+\_\+t} $\ast$$\ast$mtl\+\_\+peer\+\_\+data)
\begin{DoxyCompactList}\small\item\em P\+M\+L-\/$>$M\+T\+L notification of change in the process list. \end{DoxyCompactList}\item 
typedef int($\ast$ \hyperlink{mtl_8h_aee378861b7b949085ffe117939816aee}{mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+del\+\_\+procs\+\_\+fn\+\_\+t} )(struct \hyperlink{structmca__mtl__base__module__t}{mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+t} $\ast$mtl, size\+\_\+t nprocs, struct \hyperlink{structompi__proc__t}{ompi\+\_\+proc\+\_\+t} $\ast$$\ast$procs, struct \hyperlink{structmca__mtl__base__endpoint__t}{mca\+\_\+mtl\+\_\+base\+\_\+endpoint\+\_\+t} $\ast$$\ast$mtl\+\_\+peer\+\_\+data)
\begin{DoxyCompactList}\small\item\em Notification of change to the process list. \end{DoxyCompactList}\item 
typedef int($\ast$ \hyperlink{mtl_8h_a6d1179055923805c0a32484b964d0ec1}{mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+send\+\_\+fn\+\_\+t} )(struct \hyperlink{structmca__mtl__base__module__t}{mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+t} $\ast$mtl, struct \hyperlink{structompi__communicator__t}{ompi\+\_\+communicator\+\_\+t} $\ast$comm, int dest, int tag, struct \hyperlink{structopal__convertor__t}{opal\+\_\+convertor\+\_\+t} $\ast$convertor, mca\+\_\+pml\+\_\+base\+\_\+send\+\_\+mode\+\_\+t mode)
\begin{DoxyCompactList}\small\item\em Blocking send to peer. \end{DoxyCompactList}\item 
typedef int($\ast$ \hyperlink{mtl_8h_a133c687e701e8da625a62731c14830f4}{mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+isend\+\_\+fn\+\_\+t} )(struct \hyperlink{structmca__mtl__base__module__t}{mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+t} $\ast$mtl, struct \hyperlink{structompi__communicator__t}{ompi\+\_\+communicator\+\_\+t} $\ast$comm, int dest, int tag, struct \hyperlink{structopal__convertor__t}{opal\+\_\+convertor\+\_\+t} $\ast$convertor, mca\+\_\+pml\+\_\+base\+\_\+send\+\_\+mode\+\_\+t mode, bool blocking, \hyperlink{structmca__mtl__request__t}{mca\+\_\+mtl\+\_\+request\+\_\+t} $\ast$mtl\+\_\+request)
\begin{DoxyCompactList}\small\item\em Non-\/blocking send to peer. \end{DoxyCompactList}\item 
typedef int($\ast$ \hyperlink{mtl_8h_acef0f5b00269511b1d62218a3610db43}{mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+irecv\+\_\+fn\+\_\+t} )(struct \hyperlink{structmca__mtl__base__module__t}{mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+t} $\ast$mtl, struct \hyperlink{structompi__communicator__t}{ompi\+\_\+communicator\+\_\+t} $\ast$comm, int src, int tag, struct \hyperlink{structopal__convertor__t}{opal\+\_\+convertor\+\_\+t} $\ast$convertor, struct \hyperlink{structmca__mtl__request__t}{mca\+\_\+mtl\+\_\+request\+\_\+t} $\ast$mtl\+\_\+request)
\begin{DoxyCompactList}\small\item\em Non-\/blocking receive. \end{DoxyCompactList}\item 
typedef int($\ast$ \hyperlink{mtl_8h_ae79b2e79f58538e9d4f1ee815fb8275c}{mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+iprobe\+\_\+fn\+\_\+t} )(struct \hyperlink{structmca__mtl__base__module__t}{mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+t} $\ast$mtl, struct \hyperlink{structompi__communicator__t}{ompi\+\_\+communicator\+\_\+t} $\ast$comm, int src, int tag, int $\ast$flag, struct \hyperlink{structompi__status__public__t}{ompi\+\_\+status\+\_\+public\+\_\+t} $\ast$status)
\begin{DoxyCompactList}\small\item\em Non-\/blocking probe. \end{DoxyCompactList}\item 
\hypertarget{mtl_8h_a4b466fb27fe8d0555781db45a212cf3a}{typedef int($\ast$ {\bfseries mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+imrecv\+\_\+fn\+\_\+t} )(struct \hyperlink{structmca__mtl__base__module__t}{mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+t} $\ast$mtl, struct \hyperlink{structopal__convertor__t}{opal\+\_\+convertor\+\_\+t} $\ast$convertor, struct \hyperlink{structompi__message__t}{ompi\+\_\+message\+\_\+t} $\ast$$\ast$message, struct \hyperlink{structmca__mtl__request__t}{mca\+\_\+mtl\+\_\+request\+\_\+t} $\ast$mtl\+\_\+request)}\label{mtl_8h_a4b466fb27fe8d0555781db45a212cf3a}

\item 
\hypertarget{mtl_8h_a9f61e2a3457ff36ac6d2026bc459d861}{typedef int($\ast$ {\bfseries mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+improbe\+\_\+fn\+\_\+t} )(struct \hyperlink{structmca__mtl__base__module__t}{mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+t} $\ast$mtl, struct \hyperlink{structompi__communicator__t}{ompi\+\_\+communicator\+\_\+t} $\ast$comm, int src, int tag, int $\ast$matched, struct \hyperlink{structompi__message__t}{ompi\+\_\+message\+\_\+t} $\ast$$\ast$message, struct \hyperlink{structompi__status__public__t}{ompi\+\_\+status\+\_\+public\+\_\+t} $\ast$status)}\label{mtl_8h_a9f61e2a3457ff36ac6d2026bc459d861}

\item 
typedef int($\ast$ \hyperlink{mtl_8h_a279c4323293ee52d98510446d6630c00}{mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+cancel\+\_\+fn\+\_\+t} )(struct \hyperlink{structmca__mtl__base__module__t}{mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+t} $\ast$mtl, \hyperlink{structmca__mtl__request__t}{mca\+\_\+mtl\+\_\+request\+\_\+t} $\ast$mtl\+\_\+request, int flag)
\begin{DoxyCompactList}\small\item\em Cancel an existing request. \end{DoxyCompactList}\item 
typedef int($\ast$ \hyperlink{mtl_8h_a3e963c8a3620a6a2b36c7228cdfa1281}{mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+add\+\_\+comm\+\_\+fn\+\_\+t} )(struct \hyperlink{structmca__mtl__base__module__t}{mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+t} $\ast$mtl, struct \hyperlink{structompi__communicator__t}{ompi\+\_\+communicator\+\_\+t} $\ast$comm)
\begin{DoxyCompactList}\small\item\em Downcall from P\+M\+L layer when a new communicator is created. \end{DoxyCompactList}\item 
typedef int($\ast$ \hyperlink{mtl_8h_a76f341826353d0df92d5e306e21d7ea6}{mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+del\+\_\+comm\+\_\+fn\+\_\+t} )(struct \hyperlink{structmca__mtl__base__module__t}{mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+t} $\ast$mtl, struct \hyperlink{structompi__communicator__t}{ompi\+\_\+communicator\+\_\+t} $\ast$comm)
\begin{DoxyCompactList}\small\item\em Downcall from P\+M\+L layer when a communicator is destroyed. \end{DoxyCompactList}\item 
\hypertarget{mtl_8h_a784c6b8036a98580e1715c246d6845ec}{typedef struct \\*
\hyperlink{structmca__mtl__base__module__t}{mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+t} {\bfseries mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+t}}\label{mtl_8h_a784c6b8036a98580e1715c246d6845ec}

\end{DoxyCompactItemize}
\subsection*{Variables}
\begin{DoxyCompactItemize}
\item 
\hypertarget{mtl_8h_a18eec4675373e0dc09c42f450550dfd0}{O\+M\+P\+I\+\_\+\+D\+E\+C\+L\+S\+P\+E\+C \\*
\hyperlink{structmca__mtl__base__module__t}{mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+t} $\ast$ {\bfseries ompi\+\_\+mtl}}\label{mtl_8h_a18eec4675373e0dc09c42f450550dfd0}

\end{DoxyCompactItemize}


\subsection{Detailed Description}
Matching Transport Layer. 

The Matching Transport Layer (M\+T\+L) provides device-\/layer support for transfer of M\+P\+I point-\/to-\/point messages over devices that support hardware / library message matching. This layer is used with the M\+T\+L P\+M\+L component to provide lowest latency and highest bandwidth on given architectures. Features found in other P\+M\+L interfaces, such as message fragmenting, multi-\/device support, and N\+I\+C failover are not provided by the upper layers.

In general, this interface should not be used for transport layer support. Instead, the B\+T\+L interface should be used. The B\+T\+L interface allows for multiplexing between multiple users (point-\/to-\/point, one-\/sided, etc.) and provides many features not found in this interface (R\+D\+M\+A from arbitrary buffers, active messaging, reasonable pinned memory caching, etc.) 

\subsection{Macro Definition Documentation}
\hypertarget{mtl_8h_a302978c630c43aec595b9b4e8324ccdc}{\index{mtl.\+h@{mtl.\+h}!M\+C\+A\+\_\+\+M\+T\+L\+\_\+\+B\+A\+S\+E\+\_\+\+V\+E\+R\+S\+I\+O\+N\+\_\+2\+\_\+0\+\_\+0@{M\+C\+A\+\_\+\+M\+T\+L\+\_\+\+B\+A\+S\+E\+\_\+\+V\+E\+R\+S\+I\+O\+N\+\_\+2\+\_\+0\+\_\+0}}
\index{M\+C\+A\+\_\+\+M\+T\+L\+\_\+\+B\+A\+S\+E\+\_\+\+V\+E\+R\+S\+I\+O\+N\+\_\+2\+\_\+0\+\_\+0@{M\+C\+A\+\_\+\+M\+T\+L\+\_\+\+B\+A\+S\+E\+\_\+\+V\+E\+R\+S\+I\+O\+N\+\_\+2\+\_\+0\+\_\+0}!mtl.\+h@{mtl.\+h}}
\subsubsection[{M\+C\+A\+\_\+\+M\+T\+L\+\_\+\+B\+A\+S\+E\+\_\+\+V\+E\+R\+S\+I\+O\+N\+\_\+2\+\_\+0\+\_\+0}]{\setlength{\rightskip}{0pt plus 5cm}\#define M\+C\+A\+\_\+\+M\+T\+L\+\_\+\+B\+A\+S\+E\+\_\+\+V\+E\+R\+S\+I\+O\+N\+\_\+2\+\_\+0\+\_\+0}}\label{mtl_8h_a302978c630c43aec595b9b4e8324ccdc}
{\bfseries Value\+:}
\begin{DoxyCode}
MCA\_BASE\_VERSION\_2\_0\_0, \(\backslash\)
  \textcolor{stringliteral}{"mtl"}, 2, 0, 0
\end{DoxyCode}


\subsection{Typedef Documentation}
\hypertarget{mtl_8h_a88a8bbaf65945b21107db2708d0626d8}{\index{mtl.\+h@{mtl.\+h}!mca\+\_\+mtl\+\_\+base\+\_\+component\+\_\+init\+\_\+fn\+\_\+t@{mca\+\_\+mtl\+\_\+base\+\_\+component\+\_\+init\+\_\+fn\+\_\+t}}
\index{mca\+\_\+mtl\+\_\+base\+\_\+component\+\_\+init\+\_\+fn\+\_\+t@{mca\+\_\+mtl\+\_\+base\+\_\+component\+\_\+init\+\_\+fn\+\_\+t}!mtl.\+h@{mtl.\+h}}
\subsubsection[{mca\+\_\+mtl\+\_\+base\+\_\+component\+\_\+init\+\_\+fn\+\_\+t}]{\setlength{\rightskip}{0pt plus 5cm}typedef struct {\bf mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+t}$\ast$($\ast$ mca\+\_\+mtl\+\_\+base\+\_\+component\+\_\+init\+\_\+fn\+\_\+t)(bool enable\+\_\+progress\+\_\+threads, bool enable\+\_\+mpi\+\_\+threads)}}\label{mtl_8h_a88a8bbaf65945b21107db2708d0626d8}


Initialization routine for M\+T\+L component. 

Initialization routine for M\+T\+L component. This function should allocate resources for communication and try to do all local setup. It should not attempt to contract it's peers, as that should be done at add\+\_\+procs time. Contact information should be published during this initialization function. It will be made available during add\+\_\+procs().


\begin{DoxyParams}{Parameters}
{\em enable\+\_\+progress\+\_\+threads} & (I\+N) \hyperlink{structProgress}{Progress} threads have been enabled by the user and the component must be capable of making asycnhronous progress (either with its own thread, with the kernel, or with the event library. \\
\hline
{\em enable\+\_\+mpi\+\_\+threads} & (I\+N) M\+P\+I threads have been enabled by the user and the component must be capable of coping with threads. If the component can cope with M\+P\+I\+\_\+\+T\+H\+R\+E\+A\+D\+\_\+\+M\+U\+L\+T\+I\+P\+L\+E, enable\+\_\+mpi\+\_\+thread\+\_\+multiple should be set to true. Otherwise, it is assumed that only T\+H\+R\+E\+A\+D\+\_\+\+F\+U\+N\+N\+E\+L\+L\+E\+D and T\+H\+R\+E\+A\+D\+\_\+\+S\+E\+R\+I\+A\+L\+I\+Z\+E\+D can be used. \\
\hline
{\em enable\+\_\+mpi\+\_\+thread\+\_\+multiple} & (O\+U\+T) Component does / does not support M\+P\+I\+\_\+\+T\+H\+R\+E\+A\+D\+\_\+\+M\+U\+L\+T\+I\+P\+L\+E. This variable only needs to be set if enable\+\_\+mpi\+\_\+threads is true. Otherwise, the return value will be ignored.\\
\hline
\end{DoxyParams}

\begin{DoxyRetVals}{Return values}
{\em N\+U\+L\+L} & component can not operate on the current machine \\
\hline
{\em non-\/\+N\+U\+L\+L} & component interface function \\
\hline
\end{DoxyRetVals}
\hypertarget{mtl_8h_a3e963c8a3620a6a2b36c7228cdfa1281}{\index{mtl.\+h@{mtl.\+h}!mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+add\+\_\+comm\+\_\+fn\+\_\+t@{mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+add\+\_\+comm\+\_\+fn\+\_\+t}}
\index{mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+add\+\_\+comm\+\_\+fn\+\_\+t@{mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+add\+\_\+comm\+\_\+fn\+\_\+t}!mtl.\+h@{mtl.\+h}}
\subsubsection[{mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+add\+\_\+comm\+\_\+fn\+\_\+t}]{\setlength{\rightskip}{0pt plus 5cm}typedef int($\ast$ mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+add\+\_\+comm\+\_\+fn\+\_\+t)(struct {\bf mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+t} $\ast$mtl, struct {\bf ompi\+\_\+communicator\+\_\+t} $\ast$comm)}}\label{mtl_8h_a3e963c8a3620a6a2b36c7228cdfa1281}


Downcall from P\+M\+L layer when a new communicator is created. 


\begin{DoxyParams}{Parameters}
{\em comm} & Communicator \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
O\+M\+P\+I\+\_\+\+S\+U\+C\+C\+E\+S\+S or failure status.
\end{DoxyReturn}
Provides the M\+T\+L the opportunity to initialize/cache a data structure on the communicator. \hypertarget{mtl_8h_afd296ccb70afc739bdd1c51d530bb1f0}{\index{mtl.\+h@{mtl.\+h}!mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+add\+\_\+procs\+\_\+fn\+\_\+t@{mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+add\+\_\+procs\+\_\+fn\+\_\+t}}
\index{mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+add\+\_\+procs\+\_\+fn\+\_\+t@{mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+add\+\_\+procs\+\_\+fn\+\_\+t}!mtl.\+h@{mtl.\+h}}
\subsubsection[{mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+add\+\_\+procs\+\_\+fn\+\_\+t}]{\setlength{\rightskip}{0pt plus 5cm}typedef int($\ast$ mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+add\+\_\+procs\+\_\+fn\+\_\+t)(struct {\bf mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+t} $\ast$mtl, size\+\_\+t nprocs, struct {\bf ompi\+\_\+proc\+\_\+t} $\ast$$\ast$procs, struct {\bf mca\+\_\+mtl\+\_\+base\+\_\+endpoint\+\_\+t} $\ast$$\ast$mtl\+\_\+peer\+\_\+data)}}\label{mtl_8h_afd296ccb70afc739bdd1c51d530bb1f0}


P\+M\+L-\/$>$M\+T\+L notification of change in the process list. 

The \hyperlink{mtl_8h_afd296ccb70afc739bdd1c51d530bb1f0}{mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+add\+\_\+procs\+\_\+fn\+\_\+t()} is used by the P\+M\+L to notify the M\+T\+L that new processes are connected to the current process. Any addressing information exported by the peer via the \hyperlink{ompi__module__exchange_8h_a2b9a27750560e4fc316a31514a1da589}{ompi\+\_\+modex\+\_\+send()} function should be available during this call via the corresponding \hyperlink{ompi__module__exchange_8h_a359e0023ca30f1604e9af688bcc2033b}{ompi\+\_\+modex\+\_\+recv()} function. The M\+T\+L may utilize this information to determine reachability of each peer process.

It is an error for a proc to not be reachable by the given M\+T\+L, and an error should be returned if that case is detected. The P\+M\+L provides the M\+T\+L the option to return a pointer to a data structure defined by the M\+T\+L that is passed in with all communication functions. The array of procinfo pointers will be allocated by the P\+M\+L, but it is up to the M\+T\+L module to create the memory for the procinfo structure itself. The procinfo structure is opaque to the P\+M\+L and is only used internally by the M\+T\+L.


\begin{DoxyParams}{Parameters}
{\em mtl} & (I\+N) M\+T\+L module \\
\hline
{\em nprocs} & (I\+N) Number of processes \\
\hline
{\em procs} & (I\+N) Set of processes \\
\hline
{\em endpoint} & (O\+U\+T) Array of (optional) mca\+\_\+mtl\+\_\+base\+\_\+procinfo\+\_\+t structures, one per proc in procs\\
\hline
\end{DoxyParams}

\begin{DoxyRetVals}{Return values}
{\em O\+M\+P\+I\+\_\+\+S\+U\+C\+C\+E\+S\+S} & successfully connected to processes \\
\hline
{\em other} & failure during setup \\
\hline
\end{DoxyRetVals}
\hypertarget{mtl_8h_a279c4323293ee52d98510446d6630c00}{\index{mtl.\+h@{mtl.\+h}!mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+cancel\+\_\+fn\+\_\+t@{mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+cancel\+\_\+fn\+\_\+t}}
\index{mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+cancel\+\_\+fn\+\_\+t@{mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+cancel\+\_\+fn\+\_\+t}!mtl.\+h@{mtl.\+h}}
\subsubsection[{mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+cancel\+\_\+fn\+\_\+t}]{\setlength{\rightskip}{0pt plus 5cm}typedef int($\ast$ mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+cancel\+\_\+fn\+\_\+t)(struct {\bf mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+t} $\ast$mtl, {\bf mca\+\_\+mtl\+\_\+request\+\_\+t} $\ast$mtl\+\_\+request, int flag)}}\label{mtl_8h_a279c4323293ee52d98510446d6630c00}


Cancel an existing request. 

Attempt to cancel an existing request. The (poorly defined) semantics for M\+P\+I\+\_\+\+C\+A\+N\+C\+E\+L must be implemented by this call. This, of course, allows the M\+T\+L module to do nothing at all. Implementations of the M\+T\+L should make a good faith effort to cancel receive requests that have not been started, as the \char`\"{}post a
receive for control messages\char`\"{} paradigm is a common one in loosely coupled M\+P\+I applications.


\begin{DoxyParams}{Parameters}
{\em \hyperlink{structrequest}{request(\+I\+N)}} & \hyperlink{classRequest}{Request} that should be cancelled \\
\hline
{\em flag} & Unknown exactly what this does. \\
\hline
\end{DoxyParams}
\hypertarget{mtl_8h_a76f341826353d0df92d5e306e21d7ea6}{\index{mtl.\+h@{mtl.\+h}!mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+del\+\_\+comm\+\_\+fn\+\_\+t@{mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+del\+\_\+comm\+\_\+fn\+\_\+t}}
\index{mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+del\+\_\+comm\+\_\+fn\+\_\+t@{mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+del\+\_\+comm\+\_\+fn\+\_\+t}!mtl.\+h@{mtl.\+h}}
\subsubsection[{mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+del\+\_\+comm\+\_\+fn\+\_\+t}]{\setlength{\rightskip}{0pt plus 5cm}typedef int($\ast$ mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+del\+\_\+comm\+\_\+fn\+\_\+t)(struct {\bf mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+t} $\ast$mtl, struct {\bf ompi\+\_\+communicator\+\_\+t} $\ast$comm)}}\label{mtl_8h_a76f341826353d0df92d5e306e21d7ea6}


Downcall from P\+M\+L layer when a communicator is destroyed. 


\begin{DoxyParams}{Parameters}
{\em comm} & Communicator \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
O\+M\+P\+I\+\_\+\+S\+U\+C\+C\+E\+S\+S or failure status.
\end{DoxyReturn}
Provides the M\+T\+L the opportunity to cleanup any datastructures associated with the communicator. \hypertarget{mtl_8h_aee378861b7b949085ffe117939816aee}{\index{mtl.\+h@{mtl.\+h}!mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+del\+\_\+procs\+\_\+fn\+\_\+t@{mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+del\+\_\+procs\+\_\+fn\+\_\+t}}
\index{mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+del\+\_\+procs\+\_\+fn\+\_\+t@{mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+del\+\_\+procs\+\_\+fn\+\_\+t}!mtl.\+h@{mtl.\+h}}
\subsubsection[{mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+del\+\_\+procs\+\_\+fn\+\_\+t}]{\setlength{\rightskip}{0pt plus 5cm}typedef int($\ast$ mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+del\+\_\+procs\+\_\+fn\+\_\+t)(struct {\bf mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+t} $\ast$mtl, size\+\_\+t nprocs, struct {\bf ompi\+\_\+proc\+\_\+t} $\ast$$\ast$procs, struct {\bf mca\+\_\+mtl\+\_\+base\+\_\+endpoint\+\_\+t} $\ast$$\ast$mtl\+\_\+peer\+\_\+data)}}\label{mtl_8h_aee378861b7b949085ffe117939816aee}


Notification of change to the process list. 

When the process list changes, the P\+M\+L notifies the M\+T\+L of the change, to provide the opportunity to cleanup or release any resources associated with the peer.


\begin{DoxyParams}{Parameters}
{\em mtl} & (I\+N) M\+T\+L module \\
\hline
{\em nprocs} & (I\+N) Number of processes \\
\hline
{\em proc} & (I\+N) Set of processes \\
\hline
{\em peer} & (I\+N) Set of peer addressing information.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
\hyperlink{classStatus}{Status} indicating if cleanup was successful 
\end{DoxyReturn}
\hypertarget{mtl_8h_abc68960d7fb6c6f14503c7fbc69ddb66}{\index{mtl.\+h@{mtl.\+h}!mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+finalize\+\_\+fn\+\_\+t@{mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+finalize\+\_\+fn\+\_\+t}}
\index{mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+finalize\+\_\+fn\+\_\+t@{mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+finalize\+\_\+fn\+\_\+t}!mtl.\+h@{mtl.\+h}}
\subsubsection[{mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+finalize\+\_\+fn\+\_\+t}]{\setlength{\rightskip}{0pt plus 5cm}typedef int($\ast$ mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+finalize\+\_\+fn\+\_\+t)(struct {\bf mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+t} $\ast$mtl)}}\label{mtl_8h_abc68960d7fb6c6f14503c7fbc69ddb66}


M\+C\+A-\/$>$M\+T\+L Clean up any resources held by M\+T\+L module. 

Opposite of module\+\_\+init. Called when communication will no longer be necessary. ussually this is during M\+P\+I\+\_\+\+F\+I\+N\+A\+L\+I\+Z\+E, but it can be earlier if the component was not selected to run. Assuming module\+\_\+init was called, finalize will always be called before the component\+\_\+close function is called.


\begin{DoxyParams}{Parameters}
{\em mtl} & (I\+N) M\+T\+L module returned from call to initialize\\
\hline
\end{DoxyParams}

\begin{DoxyRetVals}{Return values}
{\em O\+M\+P\+I\+\_\+\+S\+U\+C\+C\+E\+S\+S} & cleanup finished successfully \\
\hline
{\em other} & failure during cleanup \\
\hline
\end{DoxyRetVals}
\hypertarget{mtl_8h_ae79b2e79f58538e9d4f1ee815fb8275c}{\index{mtl.\+h@{mtl.\+h}!mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+iprobe\+\_\+fn\+\_\+t@{mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+iprobe\+\_\+fn\+\_\+t}}
\index{mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+iprobe\+\_\+fn\+\_\+t@{mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+iprobe\+\_\+fn\+\_\+t}!mtl.\+h@{mtl.\+h}}
\subsubsection[{mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+iprobe\+\_\+fn\+\_\+t}]{\setlength{\rightskip}{0pt plus 5cm}typedef int($\ast$ mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+iprobe\+\_\+fn\+\_\+t)(struct {\bf mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+t} $\ast$mtl, struct {\bf ompi\+\_\+communicator\+\_\+t} $\ast$comm, int src, int tag, int $\ast$flag, struct {\bf ompi\+\_\+status\+\_\+public\+\_\+t} $\ast$status)}}\label{mtl_8h_ae79b2e79f58538e9d4f1ee815fb8275c}


Non-\/blocking probe. 

Non-\/blocking probe function. Standard M\+P\+I semantics for M\+P\+I\+\_\+\+I\+P\+R\+O\+B\+E must be implemented by this call.


\begin{DoxyParams}{Parameters}
{\em comm} & (I\+N) Communicator used for operation \\
\hline
{\em src} & (I\+N) Source rank for send (relative to comm) \\
\hline
{\em tag} & (I\+N) M\+P\+I tag used for sending. See note below. \\
\hline
{\em flag} & (O\+U\+T) true if message available, false otherwise \\
\hline
{\em status} & (O\+U\+T) \hyperlink{classStatus}{Status} structure for information on available message\\
\hline
\end{DoxyParams}
\begin{DoxyNote}{Note}
While M\+P\+I does not allow users to specify negative tags, they are used internally in Open M\+P\+I to provide a unique channel for collective operations. Therefore, the M\+T\+L can {\itshape not} cause an error if a negative tag is used. Further, M\+P\+I\+\_\+\+A\+N\+Y\+\_\+\+T\+A\+G should {\itshape not} match against negative tags. 
\end{DoxyNote}
\hypertarget{mtl_8h_acef0f5b00269511b1d62218a3610db43}{\index{mtl.\+h@{mtl.\+h}!mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+irecv\+\_\+fn\+\_\+t@{mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+irecv\+\_\+fn\+\_\+t}}
\index{mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+irecv\+\_\+fn\+\_\+t@{mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+irecv\+\_\+fn\+\_\+t}!mtl.\+h@{mtl.\+h}}
\subsubsection[{mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+irecv\+\_\+fn\+\_\+t}]{\setlength{\rightskip}{0pt plus 5cm}typedef int($\ast$ mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+irecv\+\_\+fn\+\_\+t)(struct {\bf mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+t} $\ast$mtl, struct {\bf ompi\+\_\+communicator\+\_\+t} $\ast$comm, int src, int tag, struct {\bf opal\+\_\+convertor\+\_\+t} $\ast$convertor, struct {\bf mca\+\_\+mtl\+\_\+request\+\_\+t} $\ast$mtl\+\_\+request)}}\label{mtl_8h_acef0f5b00269511b1d62218a3610db43}


Non-\/blocking receive. 

Non-\/blocking receive function. Standard M\+P\+I semantics for M\+P\+I\+\_\+\+Irecv must be implemented by this call.

The P\+M\+L will handle creation of the request, leaving the number of bytes requested in teh module structure available for the M\+T\+L, directly after the \hyperlink{structompi__request__t}{ompi\+\_\+request\+\_\+t} structure. The P\+M\+L will handle proper destruction of the request once it can safely be destroyed (it has been completed and free'ed by a call to R\+E\+Q\+U\+E\+S\+T\+\_\+\+F\+R\+E\+E or T\+E\+S\+T/\+W\+A\+I\+T). The M\+T\+L should remove all resources associated with the request when it is marked as completed.


\begin{DoxyParams}{Parameters}
{\em comm} & (I\+N) Communicator used for operation \\
\hline
{\em src} & (I\+N) Source rank for send (relative to comm) \\
\hline
{\em tag} & (I\+N) M\+P\+I tag used for sending. See note below. \\
\hline
{\em convertor} & (I\+N) \hyperlink{classDatatype}{Datatype} convertor describing receive datatype. Already prepared for receive. \\
\hline
{\em mtl\+\_\+request} & (I\+N) Pointer to mtl\+\_\+request. The ompi\+\_\+req field will be populated with an initialized \hyperlink{structompi__request__t}{ompi\+\_\+request\+\_\+t} before calling.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
O\+M\+P\+I\+\_\+\+S\+U\+C\+C\+E\+S\+S or error value
\end{DoxyReturn}
\begin{DoxyNote}{Note}
While M\+P\+I does not allow users to specify negative tags, they are used internally in Open M\+P\+I to provide a unique channel for collective operations. Therefore, the M\+T\+L can {\itshape not} cause an error if a negative tag is used. Further, M\+P\+I\+\_\+\+A\+N\+Y\+\_\+\+T\+A\+G should {\itshape not} match against negative tags. 
\end{DoxyNote}
\hypertarget{mtl_8h_a133c687e701e8da625a62731c14830f4}{\index{mtl.\+h@{mtl.\+h}!mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+isend\+\_\+fn\+\_\+t@{mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+isend\+\_\+fn\+\_\+t}}
\index{mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+isend\+\_\+fn\+\_\+t@{mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+isend\+\_\+fn\+\_\+t}!mtl.\+h@{mtl.\+h}}
\subsubsection[{mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+isend\+\_\+fn\+\_\+t}]{\setlength{\rightskip}{0pt plus 5cm}typedef int($\ast$ mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+isend\+\_\+fn\+\_\+t)(struct {\bf mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+t} $\ast$mtl, struct {\bf ompi\+\_\+communicator\+\_\+t} $\ast$comm, int dest, int tag, struct {\bf opal\+\_\+convertor\+\_\+t} $\ast$convertor, mca\+\_\+pml\+\_\+base\+\_\+send\+\_\+mode\+\_\+t mode, bool blocking, {\bf mca\+\_\+mtl\+\_\+request\+\_\+t} $\ast$mtl\+\_\+request)}}\label{mtl_8h_a133c687e701e8da625a62731c14830f4}


Non-\/blocking send to peer. 

Non-\/blocking send to peer. Standard M\+P\+I semantics must be met by this call, as mandated in the mode argument. There is one special mode argument, M\+C\+A\+\_\+\+P\+M\+L\+\_\+\+B\+A\+S\+E\+\_\+\+S\+E\+N\+D\+\_\+\+C\+O\+M\+P\+L\+E\+T\+E, which requires local completion before the request is marked as complete.

The P\+M\+L will handle creation of the request, leaving the number of bytes requested in the module structure available for the M\+T\+L directly after the \hyperlink{structompi__request__t}{ompi\+\_\+request\+\_\+t} structure. The P\+M\+L will handle proper destruction of the request once it can safely be destructed (it has been completed and freeed by a call to R\+E\+Q\+U\+E\+S\+T\+\_\+\+F\+Re\+E or T\+E\+S\+T/\+W\+A\+I\+T). The M\+T\+L should remove all resources associated with the request when it is marked as completed.


\begin{DoxyParams}{Parameters}
{\em comm} & (I\+N) Communicator used for operation \\
\hline
{\em dest} & (I\+N) Destination rank for send (relative to comm) \\
\hline
{\em tag} & (I\+N) M\+P\+I tag used for sending. See note below. \\
\hline
{\em convertor} & (I\+N) \hyperlink{classDatatype}{Datatype} convertor describing send datatype. Already prepared for send. \\
\hline
{\em mode} & (I\+N) Mode for send operation (see \hyperlink{pml_8h}{pml.\+h}) \\
\hline
{\em blocking} & (I\+N) True if the call originated from a blocking call, but the P\+M\+L decided to use a non-\/blocking operation, likely for internal performance decisions This is an optimization flag and is not needed for correctness. \\
\hline
{\em mtl\+\_\+request} & (I\+N) Pointer to mtl\+\_\+request. The ompi\+\_\+req field will be populated with an initialized \hyperlink{structompi__request__t}{ompi\+\_\+request\+\_\+t} before calling.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
O\+M\+P\+I\+\_\+\+S\+U\+C\+C\+E\+S\+S or error value
\end{DoxyReturn}
\begin{DoxyNote}{Note}
While M\+P\+I does not allow users to specify negative tags, they are used internally in Open M\+P\+I to provide a unique channel for collective operations. Therefore, the M\+T\+L can {\itshape not} cause an error if a negative tag is used. 
\end{DoxyNote}
\hypertarget{mtl_8h_a6d1179055923805c0a32484b964d0ec1}{\index{mtl.\+h@{mtl.\+h}!mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+send\+\_\+fn\+\_\+t@{mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+send\+\_\+fn\+\_\+t}}
\index{mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+send\+\_\+fn\+\_\+t@{mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+send\+\_\+fn\+\_\+t}!mtl.\+h@{mtl.\+h}}
\subsubsection[{mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+send\+\_\+fn\+\_\+t}]{\setlength{\rightskip}{0pt plus 5cm}typedef int($\ast$ mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+send\+\_\+fn\+\_\+t)(struct {\bf mca\+\_\+mtl\+\_\+base\+\_\+module\+\_\+t} $\ast$mtl, struct {\bf ompi\+\_\+communicator\+\_\+t} $\ast$comm, int dest, int tag, struct {\bf opal\+\_\+convertor\+\_\+t} $\ast$convertor, mca\+\_\+pml\+\_\+base\+\_\+send\+\_\+mode\+\_\+t mode)}}\label{mtl_8h_a6d1179055923805c0a32484b964d0ec1}


Blocking send to peer. 

Blocking send (Call should not return until the user buffer may be used again). Standard M\+P\+I semantics must be met by this call, as mandated in the mode argument. There is one special mode argument, M\+C\+A\+\_\+\+P\+M\+L\+\_\+\+B\+A\+S\+E\+\_\+\+S\+E\+N\+D\+\_\+\+C\+O\+M\+P\+L\+E\+T\+E, which requires local completion before the function can return. This is an optimization for coillective routines that can otherwise lead to degenerate performance for broadcast-\/based collectives.


\begin{DoxyParams}{Parameters}
{\em comm} & (I\+N) Communicator used for operation \\
\hline
{\em dest} & (I\+N) Destination rank for send (relative to comm) \\
\hline
{\em tag} & (I\+N) M\+P\+I tag used for sending. See note below. \\
\hline
{\em convertor} & (I\+N) \hyperlink{classDatatype}{Datatype} convertor describing send datatype. Already prepared for send. \\
\hline
{\em mode} & (I\+N) Mode for send operation\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
O\+M\+P\+I\+\_\+\+S\+U\+C\+C\+E\+S\+S or error value
\end{DoxyReturn}
\begin{DoxyNote}{Note}
Open M\+P\+I is built around non-\/blocking operations. This function is provided for networks where progressing events outside of point-\/to-\/point (for example, collectives, I/\+O, one-\/sided) can occur without a progress function regularily being triggered.

While M\+P\+I does not allow users to specify negative tags, they are used internally in Open M\+P\+I to provide a unique channel for collective operations. Therefore, the M\+T\+L can {\itshape not} cause an error if a negative tag is used. 
\end{DoxyNote}
