\hypertarget{coll__sm__module_8c}{\section{ompi/mca/coll/sm/coll\+\_\+sm\+\_\+module.c File Reference}
\label{coll__sm__module_8c}\index{ompi/mca/coll/sm/coll\+\_\+sm\+\_\+module.\+c@{ompi/mca/coll/sm/coll\+\_\+sm\+\_\+module.\+c}}
}


Warning\+: this is not for the faint of heart -- don't even bother reading this source code if you don't have a strong understanding of nested data structures and pointer math (remember that associativity and order of C operations is {\itshape critical} in terms of pointer math!).  


{\ttfamily \#include \char`\"{}ompi\+\_\+config.\+h\char`\"{}}\\*
{\ttfamily \#include $<$stdio.\+h$>$}\\*
{\ttfamily \#include $<$sys/types.\+h$>$}\\*
{\ttfamily \#include \char`\"{}mpi.\+h\char`\"{}}\\*
{\ttfamily \#include \char`\"{}opal\+\_\+stdint.\+h\char`\"{}}\\*
{\ttfamily \#include \char`\"{}opal/mca/maffinity/maffinity.\+h\char`\"{}}\\*
{\ttfamily \#include \char`\"{}opal/mca/maffinity/base/base.\+h\char`\"{}}\\*
{\ttfamily \#include \char`\"{}opal/util/os\+\_\+path.\+h\char`\"{}}\\*
{\ttfamily \#include \char`\"{}orte/util/proc\+\_\+info.\+h\char`\"{}}\\*
{\ttfamily \#include \char`\"{}orte/util/name\+\_\+fns.\+h\char`\"{}}\\*
{\ttfamily \#include \char`\"{}ompi/communicator/communicator.\+h\char`\"{}}\\*
{\ttfamily \#include \char`\"{}ompi/group/group.\+h\char`\"{}}\\*
{\ttfamily \#include \char`\"{}ompi/mca/coll/coll.\+h\char`\"{}}\\*
{\ttfamily \#include \char`\"{}ompi/mca/coll/base/base.\+h\char`\"{}}\\*
{\ttfamily \#include \char`\"{}ompi/proc/proc.\+h\char`\"{}}\\*
{\ttfamily \#include \char`\"{}coll\+\_\+sm.\+h\char`\"{}}\\*
\subsection*{Functions}
\begin{DoxyCompactItemize}
\item 
\hypertarget{coll__sm__module_8c_ae70e14e507061a90e613442ca87f05a0}{static int {\bfseries sm\+\_\+module\+\_\+enable} (\hyperlink{coll_8h_aa26d67e9c1a6d83345102a7ef73ea7d1}{mca\+\_\+coll\+\_\+base\+\_\+module\+\_\+t} $\ast$module, struct \hyperlink{structompi__communicator__t}{ompi\+\_\+communicator\+\_\+t} $\ast$comm)}\label{coll__sm__module_8c_ae70e14e507061a90e613442ca87f05a0}

\item 
\hypertarget{coll__sm__module_8c_ae8154c41ddeea87a343b2f2c7b7d3c42}{static bool {\bfseries have\+\_\+local\+\_\+peers} (\hyperlink{structompi__group__t}{ompi\+\_\+group\+\_\+t} $\ast$group, size\+\_\+t size)}\label{coll__sm__module_8c_ae8154c41ddeea87a343b2f2c7b7d3c42}

\item 
\hypertarget{coll__sm__module_8c_a7a7e223bf2744d80e24bbe4e64419c63}{static int {\bfseries bootstrap\+\_\+comm} (\hyperlink{structompi__communicator__t}{ompi\+\_\+communicator\+\_\+t} $\ast$comm, \hyperlink{structmca__coll__sm__module__t}{mca\+\_\+coll\+\_\+sm\+\_\+module\+\_\+t} $\ast$module)}\label{coll__sm__module_8c_a7a7e223bf2744d80e24bbe4e64419c63}

\item 
\hypertarget{coll__sm__module_8c_a8b09648a838d64886610e1eb61c3a0fb}{static void {\bfseries mca\+\_\+coll\+\_\+sm\+\_\+module\+\_\+construct} (\hyperlink{structmca__coll__sm__module__t}{mca\+\_\+coll\+\_\+sm\+\_\+module\+\_\+t} $\ast$module)}\label{coll__sm__module_8c_a8b09648a838d64886610e1eb61c3a0fb}

\item 
\hypertarget{coll__sm__module_8c_a93dfaadc9af047f79a63d8bd0a2cb03e}{static void {\bfseries mca\+\_\+coll\+\_\+sm\+\_\+module\+\_\+destruct} (\hyperlink{structmca__coll__sm__module__t}{mca\+\_\+coll\+\_\+sm\+\_\+module\+\_\+t} $\ast$module)}\label{coll__sm__module_8c_a93dfaadc9af047f79a63d8bd0a2cb03e}

\item 
\hypertarget{coll__sm__module_8c_ac2da2a5d98bec75dd06f7257a5ef6a76}{{\bfseries O\+B\+J\+\_\+\+C\+L\+A\+S\+S\+\_\+\+I\+N\+S\+T\+A\+N\+C\+E} (\hyperlink{structmca__coll__sm__module__t}{mca\+\_\+coll\+\_\+sm\+\_\+module\+\_\+t}, \hyperlink{coll_8h_aa26d67e9c1a6d83345102a7ef73ea7d1}{mca\+\_\+coll\+\_\+base\+\_\+module\+\_\+t}, mca\+\_\+coll\+\_\+sm\+\_\+module\+\_\+construct, mca\+\_\+coll\+\_\+sm\+\_\+module\+\_\+destruct)}\label{coll__sm__module_8c_ac2da2a5d98bec75dd06f7257a5ef6a76}

\item 
\hypertarget{coll__sm__module_8c_abccc35e92b6880cf1a163c86e785bb0e}{int {\bfseries mca\+\_\+coll\+\_\+sm\+\_\+init\+\_\+query} (bool enable\+\_\+progress\+\_\+threads, bool enable\+\_\+mpi\+\_\+threads)}\label{coll__sm__module_8c_abccc35e92b6880cf1a163c86e785bb0e}

\item 
\hypertarget{coll__sm__module_8c_a68dc9e24f6ecd2ff070d58b55458e4b4}{\hyperlink{coll_8h_aa26d67e9c1a6d83345102a7ef73ea7d1}{mca\+\_\+coll\+\_\+base\+\_\+module\+\_\+t} $\ast$ {\bfseries mca\+\_\+coll\+\_\+sm\+\_\+comm\+\_\+query} (struct \hyperlink{structompi__communicator__t}{ompi\+\_\+communicator\+\_\+t} $\ast$comm, int $\ast$priority)}\label{coll__sm__module_8c_a68dc9e24f6ecd2ff070d58b55458e4b4}

\item 
\hypertarget{coll__sm__module_8c_ad2119827a74d2b3c282ac91634337c9e}{int {\bfseries ompi\+\_\+coll\+\_\+sm\+\_\+lazy\+\_\+enable} (\hyperlink{coll_8h_aa26d67e9c1a6d83345102a7ef73ea7d1}{mca\+\_\+coll\+\_\+base\+\_\+module\+\_\+t} $\ast$module, struct \hyperlink{structompi__communicator__t}{ompi\+\_\+communicator\+\_\+t} $\ast$comm)}\label{coll__sm__module_8c_ad2119827a74d2b3c282ac91634337c9e}

\item 
\hypertarget{coll__sm__module_8c_af5f4d546a31eac0356b59830e5f5e0f3}{int {\bfseries mca\+\_\+coll\+\_\+sm\+\_\+ft\+\_\+event} (int state)}\label{coll__sm__module_8c_af5f4d546a31eac0356b59830e5f5e0f3}

\end{DoxyCompactItemize}
\subsection*{Variables}
\begin{DoxyCompactItemize}
\item 
\hypertarget{coll__sm__module_8c_a6038218fc738d4b0ad9bcf6e8db49d6d}{uint32\+\_\+t \hyperlink{coll__sm__module_8c_a6038218fc738d4b0ad9bcf6e8db49d6d}{mca\+\_\+coll\+\_\+sm\+\_\+one} = 1}\label{coll__sm__module_8c_a6038218fc738d4b0ad9bcf6e8db49d6d}

\begin{DoxyCompactList}\small\item\em Global variables used in the macros (essentially constants, so these are thread safe) \end{DoxyCompactList}\end{DoxyCompactItemize}


\subsection{Detailed Description}
Warning\+: this is not for the faint of heart -- don't even bother reading this source code if you don't have a strong understanding of nested data structures and pointer math (remember that associativity and order of C operations is {\itshape critical} in terms of pointer math!). 

