\doxysection{gko::\+experimental::\+distributed::\+Row\+Gatherer\texorpdfstring{$<$}{<} Local\+Index\+Type \texorpdfstring{$>$}{>} Class Template Reference}
\hypertarget{classgko_1_1experimental_1_1distributed_1_1RowGatherer}{}\label{classgko_1_1experimental_1_1distributed_1_1RowGatherer}\index{gko::experimental::distributed::RowGatherer$<$ LocalIndexType $>$@{gko::experimental::distributed::RowGatherer$<$ LocalIndexType $>$}}


The \doxylink{classgko_1_1experimental_1_1distributed_1_1RowGatherer}{distributed::\+\+Row\+Gatherer} gathers the rows of \doxylink{classgko_1_1experimental_1_1distributed_1_1Vector}{distributed::\+\+Vector} that are located on other processes.  




{\ttfamily \+\#include $<$ginkgo/\+core/\+distributed/\+row\+\_\+gatherer.\+hpp$>$}



Inheritance diagram for gko::\+experimental::\+distributed::\+Row\+Gatherer\texorpdfstring{$<$}{<} Local\+Index\+Type \texorpdfstring{$>$}{>}:\+
\nopagebreak
\begin{figure}[H]
\begin{center}
\leavevmode
\includegraphics[width=350pt]{classgko_1_1experimental_1_1distributed_1_1RowGatherer__inherit__graph}
\end{center}
\end{figure}


Collaboration diagram for gko::\+experimental::\+distributed::\+Row\+Gatherer\texorpdfstring{$<$}{<} Local\+Index\+Type \texorpdfstring{$>$}{>}:\+
\nopagebreak
\begin{figure}[H]
\begin{center}
\leavevmode
\includegraphics[width=350pt]{classgko_1_1experimental_1_1distributed_1_1RowGatherer__coll__graph}
\end{center}
\end{figure}
\doxysubsubsection*{Public Member Functions}
\begin{DoxyCompactItemize}
\item 
\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1request}{mpi::\+request}} \doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1RowGatherer_a343e46f2f6203db8ddcdb7234cf86878}{apply\+\_\+async}} (\doxymbox{\hyperlink{classgko_1_1ptr__param}{ptr\+\_\+param}}$<$ const \doxymbox{\hyperlink{classgko_1_1LinOp}{Lin\+Op}} $>$ b, \doxymbox{\hyperlink{classgko_1_1ptr__param}{ptr\+\_\+param}}$<$ \doxymbox{\hyperlink{classgko_1_1LinOp}{Lin\+Op}} $>$ x) const
\begin{DoxyCompactList}\small\item\em Asynchronous version of \doxylink{classgko_1_1LinOp_a8aba659b97d7bb9ad0c1a0d385c28f28}{Lin\+Op::\+apply}. \end{DoxyCompactList}\item 
\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1request}{mpi::\+request}} \doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1RowGatherer_a0e139c37e5e1f795ec873b55c8a83650}{apply\+\_\+async}} (\doxymbox{\hyperlink{classgko_1_1ptr__param}{ptr\+\_\+param}}$<$ const \doxymbox{\hyperlink{classgko_1_1LinOp}{Lin\+Op}} $>$ b, \doxymbox{\hyperlink{classgko_1_1ptr__param}{ptr\+\_\+param}}$<$ \doxymbox{\hyperlink{classgko_1_1LinOp}{Lin\+Op}} $>$ x, \doxymbox{\hyperlink{classgko_1_1array}{array}}$<$ char $>$ \&workspace) const
\begin{DoxyCompactList}\small\item\em Asynchronous version of \doxylink{classgko_1_1LinOp_a8aba659b97d7bb9ad0c1a0d385c28f28}{Lin\+Op::\+apply}. \end{DoxyCompactList}\item 
\Hypertarget{classgko_1_1experimental_1_1distributed_1_1RowGatherer_ab77e6eea3b61cf64646e738da537b07b}\label{classgko_1_1experimental_1_1distributed_1_1RowGatherer_ab77e6eea3b61cf64646e738da537b07b} 
\doxymbox{\hyperlink{structgko_1_1dim}{dim}}$<$ 2 $>$ {\bfseries get\+\_\+size} () const
\begin{DoxyCompactList}\small\item\em Returns the size of the row gatherer. \end{DoxyCompactList}\item 
\Hypertarget{classgko_1_1experimental_1_1distributed_1_1RowGatherer_aef6c8aed72e5771a9b6f43ec4fd10650}\label{classgko_1_1experimental_1_1distributed_1_1RowGatherer_aef6c8aed72e5771a9b6f43ec4fd10650} 
std::\+shared\+\_\+ptr$<$ const \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1CollectiveCommunicator}{mpi::\+\+Collective\+Communicator}} $>$ {\bfseries get\+\_\+collective\+\_\+communicator} () const
\begin{DoxyCompactList}\small\item\em Get the used collective communicator. \end{DoxyCompactList}\item 
\Hypertarget{classgko_1_1experimental_1_1distributed_1_1RowGatherer_a41406b321841346dac6d7eac569ff498}\label{classgko_1_1experimental_1_1distributed_1_1RowGatherer_a41406b321841346dac6d7eac569ff498} 
const Local\+Index\+Type \texorpdfstring{$\ast$}{*} {\bfseries get\+\_\+const\+\_\+send\+\_\+idxs} () const
\begin{DoxyCompactList}\small\item\em Read access to the (local) rows indices. \end{DoxyCompactList}\item 
\Hypertarget{classgko_1_1experimental_1_1distributed_1_1RowGatherer_abfedf0a0265383c4a5595517c6563649}\label{classgko_1_1experimental_1_1distributed_1_1RowGatherer_abfedf0a0265383c4a5595517c6563649} 
\doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type}} {\bfseries get\+\_\+num\+\_\+send\+\_\+idxs} () const
\begin{DoxyCompactList}\small\item\em Returns the number of (local) row indices. \end{DoxyCompactList}\item 
\Hypertarget{classgko_1_1experimental_1_1distributed_1_1RowGatherer_a9ec4495a4fab9761b481f00b2e78c556}\label{classgko_1_1experimental_1_1distributed_1_1RowGatherer_a9ec4495a4fab9761b481f00b2e78c556} 
{\bfseries Row\+Gatherer} (const Row\+Gatherer \&o)
\item 
\Hypertarget{classgko_1_1experimental_1_1distributed_1_1RowGatherer_a0d53cfa2d5993d3ab667875868d9d9eb}\label{classgko_1_1experimental_1_1distributed_1_1RowGatherer_a0d53cfa2d5993d3ab667875868d9d9eb} 
{\bfseries Row\+Gatherer} (Row\+Gatherer \&\&o) noexcept
\item 
\Hypertarget{classgko_1_1experimental_1_1distributed_1_1RowGatherer_a036df0b0699e892b6d8b1f14fc0e4ff6}\label{classgko_1_1experimental_1_1distributed_1_1RowGatherer_a036df0b0699e892b6d8b1f14fc0e4ff6} 
Row\+Gatherer \& {\bfseries operator=} (const Row\+Gatherer \&o)
\item 
\Hypertarget{classgko_1_1experimental_1_1distributed_1_1RowGatherer_acf4cdcd764b2948320a6e6d0d837ce85}\label{classgko_1_1experimental_1_1distributed_1_1RowGatherer_acf4cdcd764b2948320a6e6d0d837ce85} 
Row\+Gatherer \& {\bfseries operator=} (Row\+Gatherer \&\&o)
\end{DoxyCompactItemize}
\doxysubsection*{Public Member Functions inherited from \doxymbox{\hyperlink{classgko_1_1EnablePolymorphicAssignment}{gko::\+\+Enable\+Polymorphic\+Assignment$<$ Row\+Gatherer$<$ int32 $>$ $>$}}}
\begin{DoxyCompactItemize}
\item 
void {\bfseries convert\+\_\+to} (result\+\_\+type \texorpdfstring{$\ast$}{*}result) const override
\item 
void {\bfseries move\+\_\+to} (result\+\_\+type \texorpdfstring{$\ast$}{*}result) override
\end{DoxyCompactItemize}
\doxysubsection*{Public Member Functions inherited from \doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1DistributedBase}{gko::\+experimental::\+distributed::\+\+Distributed\+Base}}}
\begin{DoxyCompactItemize}
\item 
{\bfseries Distributed\+Base} (const Distributed\+Base \&other)=default
\item 
{\bfseries Distributed\+Base} (Distributed\+Base \&\&other)=default
\item 
Distributed\+Base \& \doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1DistributedBase_a1a860e47a3b6baf2c2d9126281d89904}{operator=}} (const Distributed\+Base \&)
\begin{DoxyCompactList}\small\item\em Copy assignment that doesn\textquotesingle{}t change the used \doxylink{classgko_1_1experimental_1_1mpi_1_1communicator}{mpi::\+communicator}. \end{DoxyCompactList}\item 
Distributed\+Base \& \doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1DistributedBase_a327ee18a0d1ac45d2cc9c5fc93e7dd33}{operator=}} (Distributed\+Base \&\&) noexcept
\begin{DoxyCompactList}\small\item\em Move assignment that doesn\textquotesingle{}t change the used \doxylink{classgko_1_1experimental_1_1mpi_1_1communicator}{mpi::\+communicator}. \end{DoxyCompactList}\item 
\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator}{mpi::\+communicator}} \doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1DistributedBase_ae9bcc14eeaadfcb95c29a931eb1856c4}{get\+\_\+communicator}} () const
\begin{DoxyCompactList}\small\item\em Access the used \doxylink{classgko_1_1experimental_1_1mpi_1_1communicator}{mpi::\+communicator}. \end{DoxyCompactList}\end{DoxyCompactItemize}
\doxysubsubsection*{Static Public Member Functions}
\begin{DoxyCompactItemize}
\item 
{\footnotesize template$<$typename Global\+Index\+Type = int64$>$ }\\static std::\+unique\+\_\+ptr$<$ Row\+Gatherer $>$ \doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1RowGatherer_a7ae87b96196377ea4eac9b086be0d8d4}{create}} (std::\+shared\+\_\+ptr$<$ const \doxymbox{\hyperlink{classgko_1_1Executor}{Executor}} $>$ exec, std::\+shared\+\_\+ptr$<$ const \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1CollectiveCommunicator}{mpi::\+\+Collective\+Communicator}} $>$ coll\+\_\+comm, const \doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1index__map}{index\+\_\+map}}$<$ Local\+Index\+Type, Global\+Index\+Type $>$ \&imap)
\begin{DoxyCompactList}\small\item\em Creates a \doxylink{classgko_1_1experimental_1_1distributed_1_1RowGatherer}{distributed::\+\+Row\+Gatherer} from a given collective communicator and index map. \end{DoxyCompactList}\item 
\Hypertarget{classgko_1_1experimental_1_1distributed_1_1RowGatherer_aef307b1564af1fd9bc62d935506aff3e}\label{classgko_1_1experimental_1_1distributed_1_1RowGatherer_aef307b1564af1fd9bc62d935506aff3e} 
static std::\+unique\+\_\+ptr$<$ Row\+Gatherer $>$ {\bfseries create} (std::\+shared\+\_\+ptr$<$ const \doxymbox{\hyperlink{classgko_1_1Executor}{Executor}} $>$ exec, \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator}{mpi::\+communicator}} comm)
\item 
\Hypertarget{classgko_1_1experimental_1_1distributed_1_1RowGatherer_a1665cbb1857ede00fe8424b80b56b940}\label{classgko_1_1experimental_1_1distributed_1_1RowGatherer_a1665cbb1857ede00fe8424b80b56b940} 
static std::\+unique\+\_\+ptr$<$ Row\+Gatherer $>$ {\bfseries create} (std::\+shared\+\_\+ptr$<$ const \doxymbox{\hyperlink{classgko_1_1Executor}{Executor}} $>$ exec, std::\+shared\+\_\+ptr$<$ const \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1CollectiveCommunicator}{mpi::\+\+Collective\+Communicator}} $>$ coll\+\_\+comm\+\_\+template)
\end{DoxyCompactItemize}
\doxysubsubsection*{Friends}
\begin{DoxyCompactItemize}
\item 
\Hypertarget{classgko_1_1experimental_1_1distributed_1_1RowGatherer_a68ae758f525eb257bb64f9582d634bca}\label{classgko_1_1experimental_1_1distributed_1_1RowGatherer_a68ae758f525eb257bb64f9582d634bca} 
class {\bfseries Enable\+Polymorphic\+Object$<$ Row\+Gatherer, Polymorphic\+Object $>$}
\item 
\Hypertarget{classgko_1_1experimental_1_1distributed_1_1RowGatherer_aecc2950843b75b014486ee8d17a5851c}\label{classgko_1_1experimental_1_1distributed_1_1RowGatherer_aecc2950843b75b014486ee8d17a5851c} 
{\footnotesize template$<$typename ValueT, typename Local\+IndexT, typename Global\+IndexT$>$ }\\class {\bfseries Matrix}
\end{DoxyCompactItemize}
\doxysubsubsection*{Additional Inherited Members}
\doxysubsection*{Public Types inherited from \doxymbox{\hyperlink{classgko_1_1EnablePolymorphicAssignment}{gko::\+\+Enable\+Polymorphic\+Assignment$<$ Row\+Gatherer$<$ int32 $>$ $>$}}}
\begin{DoxyCompactItemize}
\item 
using {\bfseries result\+\_\+type}
\end{DoxyCompactItemize}


\doxysubsection{Detailed Description}
\subsubsection*{template$<$typename Local\+Index\+Type = int32$>$\newline
class gko::\+experimental::\+distributed::\+\+Row\+Gatherer$<$ Local\+Index\+Type $>$}
The \doxylink{classgko_1_1experimental_1_1distributed_1_1RowGatherer}{distributed::\+\+Row\+Gatherer} gathers the rows of \doxylink{classgko_1_1experimental_1_1distributed_1_1Vector}{distributed::\+\+Vector} that are located on other processes. 

Example usage:\+ 
\begin{DoxyCode}{0}
\DoxyCodeLine{\textcolor{keyword}{auto}\ coll\_comm\ =\ std::make\_shared<mpi::neighborhood\_communicator>(comm,}
\DoxyCodeLine{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ imap);}
\DoxyCodeLine{\textcolor{keyword}{auto}\ rg\ =\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1RowGatherer_a7ae87b96196377ea4eac9b086be0d8d4}{distributed::RowGatherer<int32>::create}}(exec,\ coll\_comm,\ imap);}
\DoxyCodeLine{}
\DoxyCodeLine{\textcolor{keyword}{auto}\ b\ =\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1Vector_a1125a62c4ae6ededd1c77029eb0df235}{distributed::Vector<double>::create}}(...);}
\DoxyCodeLine{\textcolor{keyword}{auto}\ x\ =\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Dense_ae198b3130d8966418047baa8dabe466c}{matrix::Dense<double>::create}}(...);}
\DoxyCodeLine{}
\DoxyCodeLine{\textcolor{keyword}{auto}\ req\ =\ rg-\/>apply\_async(b,\ x);}
\DoxyCodeLine{\textcolor{comment}{//\ users\ can\ do\ some\ computation\ that\ doesn't\ modify\ b,\ or\ access\ x}}
\DoxyCodeLine{req.wait();}
\DoxyCodeLine{\textcolor{comment}{//\ x\ now\ contains\ the\ gathered\ rows\ of\ b}}

\end{DoxyCode}


\begin{DoxyNote}{Note}
The output vector for the apply\+\_\+async functions {\itshape must} use an executor that is compatible with the MPI implementation. In particular, if the MPI implementation is not GPU aware, then the output vector {\itshape must} use a CPU executor. Otherwise, an exception will be thrown.
\end{DoxyNote}

\begin{DoxyTemplParams}{Template Parameters}
{\em Local\+Index\+Type} & the index type for the stored indices \\
\hline
\end{DoxyTemplParams}


\label{doc-func-members}
\Hypertarget{classgko_1_1experimental_1_1distributed_1_1RowGatherer_doc-func-members}
\doxysubsection{Member Function Documentation}
\Hypertarget{classgko_1_1experimental_1_1distributed_1_1RowGatherer_a343e46f2f6203db8ddcdb7234cf86878}\index{gko::experimental::distributed::RowGatherer$<$ LocalIndexType $>$@{gko::experimental::distributed::RowGatherer$<$ LocalIndexType $>$}!apply\_async@{apply\_async}}
\index{apply\_async@{apply\_async}!gko::experimental::distributed::RowGatherer$<$ LocalIndexType $>$@{gko::experimental::distributed::RowGatherer$<$ LocalIndexType $>$}}
\doxysubsubsection{\texorpdfstring{apply\_async()}{apply\_async()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
{\footnotesize\ttfamily \label{classgko_1_1experimental_1_1distributed_1_1RowGatherer_a343e46f2f6203db8ddcdb7234cf86878} 
template$<$typename Local\+Index\+Type = int32$>$ \\
\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1request}{mpi::\+request}} \doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1RowGatherer}{gko::\+experimental::\+distributed::\+\+Row\+Gatherer}}$<$ Local\+Index\+Type $>$::\+apply\+\_\+async (\begin{DoxyParamCaption}\item[{\doxymbox{\hyperlink{classgko_1_1ptr__param}{ptr\+\_\+param}}$<$ const \doxymbox{\hyperlink{classgko_1_1LinOp}{Lin\+Op}} $>$}]{b}{, }\item[{\doxymbox{\hyperlink{classgko_1_1ptr__param}{ptr\+\_\+param}}$<$ \doxymbox{\hyperlink{classgko_1_1LinOp}{Lin\+Op}} $>$}]{x}{}\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [nodiscard]}}



Asynchronous version of \doxylink{classgko_1_1LinOp_a8aba659b97d7bb9ad0c1a0d385c28f28}{Lin\+Op::\+apply}. 

\begin{DoxyWarning}{Warning}
Only one \doxylink{classgko_1_1experimental_1_1mpi_1_1request}{mpi::\+request} can be active at any given time. Calling this function again without waiting on the previous \doxylink{classgko_1_1experimental_1_1mpi_1_1request}{mpi::\+request} will lead to undefined behavior.
\end{DoxyWarning}

\begin{DoxyParams}{Parameters}
{\em b} & the input \doxylink{classgko_1_1experimental_1_1distributed_1_1Vector}{distributed::\+\+Vector}. \\
\hline
{\em x} & the output \doxylink{classgko_1_1matrix_1_1Dense}{matrix::\+\+Dense} with the rows gathered from b. Its executor has to be compatible with the MPI implementation, see the class documentation.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
a \doxylink{classgko_1_1experimental_1_1mpi_1_1request}{mpi::\+request} for this task. The task is guaranteed to be completed only after {\ttfamily .wait()} has been called on it. 
\end{DoxyReturn}
\Hypertarget{classgko_1_1experimental_1_1distributed_1_1RowGatherer_a0e139c37e5e1f795ec873b55c8a83650}\index{gko::experimental::distributed::RowGatherer$<$ LocalIndexType $>$@{gko::experimental::distributed::RowGatherer$<$ LocalIndexType $>$}!apply\_async@{apply\_async}}
\index{apply\_async@{apply\_async}!gko::experimental::distributed::RowGatherer$<$ LocalIndexType $>$@{gko::experimental::distributed::RowGatherer$<$ LocalIndexType $>$}}
\doxysubsubsection{\texorpdfstring{apply\_async()}{apply\_async()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
{\footnotesize\ttfamily \label{classgko_1_1experimental_1_1distributed_1_1RowGatherer_a0e139c37e5e1f795ec873b55c8a83650} 
template$<$typename Local\+Index\+Type = int32$>$ \\
\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1request}{mpi::\+request}} \doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1RowGatherer}{gko::\+experimental::\+distributed::\+\+Row\+Gatherer}}$<$ Local\+Index\+Type $>$::\+apply\+\_\+async (\begin{DoxyParamCaption}\item[{\doxymbox{\hyperlink{classgko_1_1ptr__param}{ptr\+\_\+param}}$<$ const \doxymbox{\hyperlink{classgko_1_1LinOp}{Lin\+Op}} $>$}]{b}{, }\item[{\doxymbox{\hyperlink{classgko_1_1ptr__param}{ptr\+\_\+param}}$<$ \doxymbox{\hyperlink{classgko_1_1LinOp}{Lin\+Op}} $>$}]{x}{, }\item[{\doxymbox{\hyperlink{classgko_1_1array}{array}}$<$ char $>$ \&}]{workspace}{}\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [nodiscard]}}



Asynchronous version of \doxylink{classgko_1_1LinOp_a8aba659b97d7bb9ad0c1a0d385c28f28}{Lin\+Op::\+apply}. 

\begin{DoxyWarning}{Warning}
Calling this multiple times with the same workspace and without waiting on each previous request will lead to incorrect data transfers.
\end{DoxyWarning}

\begin{DoxyParams}{Parameters}
{\em b} & the input \doxylink{classgko_1_1experimental_1_1distributed_1_1Vector}{distributed::\+\+Vector}. \\
\hline
{\em x} & the output \doxylink{classgko_1_1matrix_1_1Dense}{matrix::\+\+Dense} with the rows gathered from b. Its executor has to be compatible with the MPI implementation, see the class documentation. \\
\hline
{\em workspace} & a workspace to store temporary data for the operation. This might not be modified before the request is waited on.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
a \doxylink{classgko_1_1experimental_1_1mpi_1_1request}{mpi::\+request} for this task. The task is guaranteed to be completed only after {\ttfamily .wait()} has been called on it. 
\end{DoxyReturn}
\Hypertarget{classgko_1_1experimental_1_1distributed_1_1RowGatherer_a7ae87b96196377ea4eac9b086be0d8d4}\index{gko::experimental::distributed::RowGatherer$<$ LocalIndexType $>$@{gko::experimental::distributed::RowGatherer$<$ LocalIndexType $>$}!create@{create}}
\index{create@{create}!gko::experimental::distributed::RowGatherer$<$ LocalIndexType $>$@{gko::experimental::distributed::RowGatherer$<$ LocalIndexType $>$}}
\doxysubsubsection{\texorpdfstring{create()}{create()}}
{\footnotesize\ttfamily \label{classgko_1_1experimental_1_1distributed_1_1RowGatherer_a7ae87b96196377ea4eac9b086be0d8d4} 
template$<$typename Local\+Index\+Type = int32$>$ \\
template$<$typename Global\+Index\+Type = int64$>$ \\
std::\+unique\+\_\+ptr$<$ Row\+Gatherer $>$ \doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1RowGatherer}{gko::\+experimental::\+distributed::\+\+Row\+Gatherer}}$<$ Local\+Index\+Type $>$::\+create (\begin{DoxyParamCaption}\item[{std::\+shared\+\_\+ptr$<$ const \doxymbox{\hyperlink{classgko_1_1Executor}{Executor}} $>$}]{exec}{, }\item[{std::\+shared\+\_\+ptr$<$ const \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1CollectiveCommunicator}{mpi::\+\+Collective\+Communicator}} $>$}]{coll\+\_\+comm}{, }\item[{const \doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1index__map}{index\+\_\+map}}$<$ Local\+Index\+Type, Global\+Index\+Type $>$ \&}]{imap}{}\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [static]}}



Creates a \doxylink{classgko_1_1experimental_1_1distributed_1_1RowGatherer}{distributed::\+\+Row\+Gatherer} from a given collective communicator and index map. 

@\+TODO:\+ using a segmented array instead of the imap would probably be more general


\begin{DoxyTemplParams}{Template Parameters}
{\em Global\+Index\+Type} & the global index type of the index map\\
\hline
\end{DoxyTemplParams}

\begin{DoxyParams}{Parameters}
{\em exec} & the executor \\
\hline
{\em coll\+\_\+comm} & the collective communicator \\
\hline
{\em imap} & the index map defining which rows to gather\\
\hline
\end{DoxyParams}
\begin{DoxyNote}{Note}
The coll\+\_\+comm and imap have to be compatible. The coll\+\_\+comm must send and recv exactly as many rows as the imap defines. 

This is a collective operation, all participating processes have to execute this operation.
\end{DoxyNote}
\begin{DoxyReturn}{Returns}
a shared\+\_\+ptr to the created \doxylink{classgko_1_1experimental_1_1distributed_1_1RowGatherer}{distributed::\+\+Row\+Gatherer} 
\end{DoxyReturn}


The documentation for this class was generated from the following file:\+\begin{DoxyCompactItemize}
\item 
ginkgo/\+core/\+distributed/\+row\+\_\+gatherer.\+hpp\end{DoxyCompactItemize}
