\doxysection{row\+\_\+gatherer.\+hpp}
\hypertarget{distributed_2row__gatherer_8hpp_source}{}\label{distributed_2row__gatherer_8hpp_source}\index{ginkgo/core/distributed/row\_gatherer.hpp@{ginkgo/core/distributed/row\_gatherer.hpp}}

\begin{DoxyCode}{0}
\DoxyCodeLine{00001\ \textcolor{comment}{//\ SPDX-\/FileCopyrightText:\ 2017\ -\/\ 2025\ The\ Ginkgo\ authors}}
\DoxyCodeLine{00002\ \textcolor{comment}{//}}
\DoxyCodeLine{00003\ \textcolor{comment}{//\ SPDX-\/License-\/Identifier:\ BSD-\/3-\/Clause}}
\DoxyCodeLine{00004\ }
\DoxyCodeLine{00005\ \textcolor{preprocessor}{\#ifndef\ GKO\_PUBLIC\_CORE\_DISTRIBUTED\_ROW\_GATHERER\_HPP\_}}
\DoxyCodeLine{00006\ \textcolor{preprocessor}{\#define\ GKO\_PUBLIC\_CORE\_DISTRIBUTED\_ROW\_GATHERER\_HPP\_}}
\DoxyCodeLine{00007\ }
\DoxyCodeLine{00008\ }
\DoxyCodeLine{00009\ \textcolor{preprocessor}{\#include\ <ginkgo/config.hpp>}}
\DoxyCodeLine{00010\ }
\DoxyCodeLine{00011\ }
\DoxyCodeLine{00012\ \textcolor{preprocessor}{\#if\ GINKGO\_BUILD\_MPI}}
\DoxyCodeLine{00013\ }
\DoxyCodeLine{00014\ }
\DoxyCodeLine{00015\ \textcolor{preprocessor}{\#include\ <ginkgo/core/base/dense\_cache.hpp>}}
\DoxyCodeLine{00016\ \textcolor{preprocessor}{\#include\ <ginkgo/core/base/event.hpp>}}
\DoxyCodeLine{00017\ \textcolor{preprocessor}{\#include\ <ginkgo/core/base/lin\_op.hpp>}}
\DoxyCodeLine{00018\ \textcolor{preprocessor}{\#include\ <ginkgo/core/base/mpi.hpp>}}
\DoxyCodeLine{00019\ \textcolor{preprocessor}{\#include\ <ginkgo/core/distributed/base.hpp>}}
\DoxyCodeLine{00020\ \textcolor{preprocessor}{\#include\ <ginkgo/core/distributed/collective\_communicator.hpp>}}
\DoxyCodeLine{00021\ \textcolor{preprocessor}{\#include\ <ginkgo/core/distributed/index\_map.hpp>}}
\DoxyCodeLine{00022\ }
\DoxyCodeLine{00023\ }
\DoxyCodeLine{00024\ \textcolor{keyword}{namespace\ }\doxymbox{\hyperlink{namespacegko}{gko}}\ \{}
\DoxyCodeLine{00025\ \textcolor{keyword}{namespace\ }experimental\ \{}
\DoxyCodeLine{00026\ \textcolor{keyword}{namespace\ }\doxymbox{\hyperlink{namespacegko_1_1experimental_1_1distributed}{distributed}}\ \{}
\DoxyCodeLine{00027\ }
\DoxyCodeLine{00028\ }
\DoxyCodeLine{00029\ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ LocalIndexType>}
\DoxyCodeLine{00030\ \textcolor{keyword}{class\ }\doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1RowGatherer}{RowGatherer}};}
\DoxyCodeLine{00031\ }
\DoxyCodeLine{00032\ }
\DoxyCodeLine{00033\ \textcolor{keyword}{namespace\ }detail\ \{}
\DoxyCodeLine{00034\ }
\DoxyCodeLine{00035\ }
\DoxyCodeLine{00036\ \textcolor{comment}{//\ give\ access\ to\ test\ function\ on\ protected\ function}}
\DoxyCodeLine{00037\ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ LocalIndexType>}
\DoxyCodeLine{00038\ std::shared\_ptr<const\ gko::detail::Event>\ apply\_prepare(}
\DoxyCodeLine{00039\ \ \ \ \ \textcolor{keyword}{const}\ RowGatherer<LocalIndexType>*\ rg,\ ptr\_param<const\ LinOp>\ b);}
\DoxyCodeLine{00040\ }
\DoxyCodeLine{00041\ \textcolor{comment}{//\ give\ access\ to\ test\ function\ on\ protected\ function}}
\DoxyCodeLine{00042\ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ LocalIndexType>}
\DoxyCodeLine{00043\ std::shared\_ptr<const\ gko::detail::Event>\ apply\_prepare(}
\DoxyCodeLine{00044\ \ \ \ \ \textcolor{keyword}{const}\ RowGatherer<LocalIndexType>*\ rg,\ ptr\_param<const\ LinOp>\ b,}
\DoxyCodeLine{00045\ \ \ \ \ array<char>\&\ workspace);}
\DoxyCodeLine{00046\ }
\DoxyCodeLine{00047\ \textcolor{comment}{//\ give\ access\ to\ test\ function\ on\ protected\ function}}
\DoxyCodeLine{00048\ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ LocalIndexType>}
\DoxyCodeLine{00049\ mpi::request\ apply\_finalize(\textcolor{keyword}{const}\ RowGatherer<LocalIndexType>*\ rg,}
\DoxyCodeLine{00050\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ptr\_param<const\ LinOp>\ b,\ ptr\_param<LinOp>\ x,}
\DoxyCodeLine{00051\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ std::shared\_ptr<const\ gko::detail::Event>);}
\DoxyCodeLine{00052\ }
\DoxyCodeLine{00053\ \textcolor{comment}{//\ give\ access\ to\ test\ function\ on\ protected\ function}}
\DoxyCodeLine{00054\ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ LocalIndexType>}
\DoxyCodeLine{00055\ mpi::request\ apply\_finalize(\textcolor{keyword}{const}\ RowGatherer<LocalIndexType>*\ rg,}
\DoxyCodeLine{00056\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ptr\_param<const\ LinOp>\ b,\ ptr\_param<LinOp>\ x,}
\DoxyCodeLine{00057\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ std::shared\_ptr<const\ gko::detail::Event>,}
\DoxyCodeLine{00058\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ array<char>\&\ workspace);}
\DoxyCodeLine{00059\ }
\DoxyCodeLine{00060\ }
\DoxyCodeLine{00061\ \}\ \ \textcolor{comment}{//\ namespace\ detail}}
\DoxyCodeLine{00062\ }
\DoxyCodeLine{00063\ }
\DoxyCodeLine{00090\ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ LocalIndexType\ =\ \textcolor{keywordtype}{int}32>}
\DoxyCodeLine{00091\ \textcolor{keyword}{class\ }RowGatherer\ final}
\DoxyCodeLine{00092\ \ \ \ \ :\ \textcolor{keyword}{public}\ \doxymbox{\hyperlink{classgko_1_1EnablePolymorphicObject}{EnablePolymorphicObject}}<RowGatherer<LocalIndexType>>,}
\DoxyCodeLine{00093\ \ \ \ \ \ \ \textcolor{keyword}{public}\ \doxymbox{\hyperlink{classgko_1_1EnablePolymorphicAssignment}{EnablePolymorphicAssignment}}<RowGatherer<LocalIndexType>>,}
\DoxyCodeLine{00094\ \ \ \ \ \ \ \textcolor{keyword}{public}\ DistributedBase\ \{}
\DoxyCodeLine{00095\ \ \ \ \ \textcolor{keyword}{friend}\ \textcolor{keyword}{class\ }\doxymbox{\hyperlink{classgko_1_1EnablePolymorphicObject}{EnablePolymorphicObject}}<RowGatherer,\ \doxymbox{\hyperlink{classgko_1_1PolymorphicObject}{PolymorphicObject}}>;}
\DoxyCodeLine{00096\ \ \ \ \ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ ValueT,\ \textcolor{keyword}{typename}\ LocalIndexT,\ \textcolor{keyword}{typename}\ GlobalIndexT>}
\DoxyCodeLine{00097\ \ \ \ \ \textcolor{keyword}{friend}\ \textcolor{keyword}{class\ }Matrix;}
\DoxyCodeLine{00098\ \ \ \ \ \textcolor{comment}{//\ for\ test\ purpose}}
\DoxyCodeLine{00099\ \ \ \ \ \textcolor{keyword}{friend}\ std::shared\_ptr<const\ gko::detail::Event>}
\DoxyCodeLine{00100\ \ \ \ \ detail::apply\_prepare<LocalIndexType>(\textcolor{keyword}{const}\ RowGatherer*\ rg,}
\DoxyCodeLine{00101\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1ptr__param}{ptr\_param<const\ LinOp>}}\ b);}
\DoxyCodeLine{00102\ \ \ \ \ \textcolor{keyword}{friend}\ std::shared\_ptr<const\ gko::detail::Event>}
\DoxyCodeLine{00103\ \ \ \ \ detail::apply\_prepare<LocalIndexType>(\textcolor{keyword}{const}\ RowGatherer*\ rg,}
\DoxyCodeLine{00104\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1ptr__param}{ptr\_param<const\ LinOp>}}\ b,}
\DoxyCodeLine{00105\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1array}{array<char>}}\&\ workspace);}
\DoxyCodeLine{00106\ \ \ \ \ \textcolor{keyword}{friend}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1request}{mpi::request}}\ detail::apply\_finalize<LocalIndexType>(}
\DoxyCodeLine{00107\ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ RowGatherer*\ rg,\ \doxymbox{\hyperlink{classgko_1_1ptr__param}{ptr\_param<const\ LinOp>}}\ b,\ \doxymbox{\hyperlink{classgko_1_1ptr__param}{ptr\_param<LinOp>}}\ x,}
\DoxyCodeLine{00108\ \ \ \ \ \ \ \ \ std::shared\_ptr<const\ gko::detail::Event>);}
\DoxyCodeLine{00109\ \ \ \ \ \textcolor{keyword}{friend}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1request}{mpi::request}}\ detail::apply\_finalize<LocalIndexType>(}
\DoxyCodeLine{00110\ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ RowGatherer*\ rg,\ \doxymbox{\hyperlink{classgko_1_1ptr__param}{ptr\_param<const\ LinOp>}}\ b,\ \doxymbox{\hyperlink{classgko_1_1ptr__param}{ptr\_param<LinOp>}}\ x,}
\DoxyCodeLine{00111\ \ \ \ \ \ \ \ \ std::shared\_ptr<const\ gko::detail::Event>,\ \doxymbox{\hyperlink{classgko_1_1array}{array<char>}}\&\ workspace);}
\DoxyCodeLine{00112\ }
\DoxyCodeLine{00113\ \textcolor{keyword}{public}:}
\DoxyCodeLine{00129\ \ \ \ \ [[nodiscard]]\ \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\ LinOp>}}\ b,}
\DoxyCodeLine{00130\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1ptr__param}{ptr\_param<LinOp>}}\ x)\ \textcolor{keyword}{const};}
\DoxyCodeLine{00131\ }
\DoxyCodeLine{00150\ \ \ \ \ [[nodiscard]]\ \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\ LinOp>}}\ b,}
\DoxyCodeLine{00151\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1ptr__param}{ptr\_param<LinOp>}}\ x,}
\DoxyCodeLine{00152\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1array}{array<char>}}\&\ workspace)\ \textcolor{keyword}{const};}
\DoxyCodeLine{00153\ }
\DoxyCodeLine{00157\ \ \ \ \ \doxymbox{\hyperlink{structgko_1_1dim}{dim<2>}}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1RowGatherer_ab77e6eea3b61cf64646e738da537b07b}{get\_size}}()\ \textcolor{keyword}{const};}
\DoxyCodeLine{00158\ }
\DoxyCodeLine{00162\ \ \ \ \ std::shared\_ptr<const\ mpi::CollectiveCommunicator>}
\DoxyCodeLine{00163\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1RowGatherer_aef6c8aed72e5771a9b6f43ec4fd10650}{get\_collective\_communicator}}()\ \textcolor{keyword}{const};}
\DoxyCodeLine{00164\ }
\DoxyCodeLine{00168\ \ \ \ \ \textcolor{keyword}{const}\ LocalIndexType*\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1RowGatherer_a41406b321841346dac6d7eac569ff498}{get\_const\_send\_idxs}}()\ \textcolor{keyword}{const};}
\DoxyCodeLine{00169\ }
\DoxyCodeLine{00173\ \ \ \ \ \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\_type}}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1RowGatherer_abfedf0a0265383c4a5595517c6563649}{get\_num\_send\_idxs}}()\ \textcolor{keyword}{const};}
\DoxyCodeLine{00174\ }
\DoxyCodeLine{00195\ \ \ \ \ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ GlobalIndexType\ =\ \doxymbox{\hyperlink{namespacegko_a913ec044df518649fa5a891f8dffae34}{int64}},}
\DoxyCodeLine{00196\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{typename}\ =\ std::enable\_if\_t<\textcolor{keyword}{sizeof}(GlobalIndexType)\ >=}
\DoxyCodeLine{00197\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{sizeof}(LocalIndexType)>>}
\DoxyCodeLine{00198\ \ \ \ \ \textcolor{keyword}{static}\ std::unique\_ptr<RowGatherer>\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1RowGatherer_a7ae87b96196377ea4eac9b086be0d8d4}{create}}(}
\DoxyCodeLine{00199\ \ \ \ \ \ \ \ \ std::shared\_ptr<const\ Executor>\ exec,}
\DoxyCodeLine{00200\ \ \ \ \ \ \ \ \ std::shared\_ptr<const\ mpi::CollectiveCommunicator>\ coll\_comm,}
\DoxyCodeLine{00201\ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1index__map}{index\_map<LocalIndexType,\ GlobalIndexType>}}\&\ imap)}
\DoxyCodeLine{00202\ \ \ \ \ \{}
\DoxyCodeLine{00203\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ std::unique\_ptr<RowGatherer>(}
\DoxyCodeLine{00204\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{new}\ RowGatherer(std::move(exec),\ std::move(coll\_comm),\ imap));}
\DoxyCodeLine{00205\ \ \ \ \ \}}
\DoxyCodeLine{00206\ }
\DoxyCodeLine{00207\ \ \ \ \ \textcolor{comment}{/*}}
\DoxyCodeLine{00208\ \textcolor{comment}{\ \ \ \ \ *\ Create\ method\ for\ an\ empty\ RowGatherer.}}
\DoxyCodeLine{00209\ \textcolor{comment}{\ \ \ \ \ */}}
\DoxyCodeLine{00210\ \ \ \ \ \textcolor{keyword}{static}\ std::unique\_ptr<RowGatherer>\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1RowGatherer_a7ae87b96196377ea4eac9b086be0d8d4}{create}}(}
\DoxyCodeLine{00211\ \ \ \ \ \ \ \ \ std::shared\_ptr<const\ Executor>\ exec,\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator}{mpi::communicator}}\ comm);}
\DoxyCodeLine{00212\ }
\DoxyCodeLine{00213\ \ \ \ \ \textcolor{comment}{/*}}
\DoxyCodeLine{00214\ \textcolor{comment}{\ \ \ \ \ *\ Create\ method\ for\ an\ empty\ RowGatherer\ with\ an\ template\ for\ the}}
\DoxyCodeLine{00215\ \textcolor{comment}{\ \ \ \ \ *\ collective\ communicator.}}
\DoxyCodeLine{00216\ \textcolor{comment}{\ \ \ \ \ *}}
\DoxyCodeLine{00217\ \textcolor{comment}{\ \ \ \ \ *\ This\ is\ mainly\ used\ for\ creating\ a\ new\ RowGatherer\ with\ the\ same\ runtime}}
\DoxyCodeLine{00218\ \textcolor{comment}{\ \ \ \ \ *\ type\ for\ the\ collective\ communicator,\ e.g.:}}
\DoxyCodeLine{00219\ \textcolor{comment}{\ \ \ \ \ *\ \`{}\`{}\`{}c++}}
\DoxyCodeLine{00220\ \textcolor{comment}{\ \ \ \ \ *\ auto\ rg\ =\ RowGatherer<>::create(}}
\DoxyCodeLine{00221\ \textcolor{comment}{\ \ \ \ \ *\ \ \ exec,\ std::make\_shared<mpi::NeighborhoodCommunicator>(comm));}}
\DoxyCodeLine{00222\ \textcolor{comment}{\ \ \ \ \ *\ ...}}
\DoxyCodeLine{00223\ \textcolor{comment}{\ \ \ \ \ *\ rg\ =\ RowGatherer<>::create(}}
\DoxyCodeLine{00224\ \textcolor{comment}{\ \ \ \ \ *\ \ \ exec,}}
\DoxyCodeLine{00225\ \textcolor{comment}{\ \ \ \ \ *\ \ \ rg-\/>get\_collective\_communicator()-\/>create\_with\_same\_type(comm,\ \&imap),}}
\DoxyCodeLine{00226\ \textcolor{comment}{\ \ \ \ \ *\ \ \ imap);}}
\DoxyCodeLine{00227\ \textcolor{comment}{\ \ \ \ \ *\ \`{}\`{}\`{}}}
\DoxyCodeLine{00228\ \textcolor{comment}{\ \ \ \ \ */}}
\DoxyCodeLine{00229\ \ \ \ \ \textcolor{keyword}{static}\ std::unique\_ptr<RowGatherer>\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1RowGatherer_a7ae87b96196377ea4eac9b086be0d8d4}{create}}(}
\DoxyCodeLine{00230\ \ \ \ \ \ \ \ \ std::shared\_ptr<const\ Executor>\ exec,}
\DoxyCodeLine{00231\ \ \ \ \ \ \ \ \ std::shared\_ptr<const\ mpi::CollectiveCommunicator>\ coll\_comm\_template);}
\DoxyCodeLine{00232\ }
\DoxyCodeLine{00233\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1RowGatherer}{RowGatherer}}(\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1RowGatherer}{RowGatherer}}\&\ o);}
\DoxyCodeLine{00234\ }
\DoxyCodeLine{00235\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1RowGatherer}{RowGatherer}}(\doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1RowGatherer}{RowGatherer}}\&\&\ o)\ \textcolor{keyword}{noexcept};}
\DoxyCodeLine{00236\ }
\DoxyCodeLine{00237\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1RowGatherer}{RowGatherer}}\&\ operator=(\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1RowGatherer}{RowGatherer}}\&\ o);}
\DoxyCodeLine{00238\ }
\DoxyCodeLine{00239\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1RowGatherer}{RowGatherer}}\&\ operator=(\doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1RowGatherer}{RowGatherer}}\&\&\ o);}
\DoxyCodeLine{00240\ }
\DoxyCodeLine{00241\ \textcolor{keyword}{protected}:}
\DoxyCodeLine{00242\ \ \ \ \ std::shared\_ptr<const\ gko::detail::Event>\ apply\_prepare(}
\DoxyCodeLine{00243\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1ptr__param}{ptr\_param<const\ LinOp>}}\ b)\ \textcolor{keyword}{const};}
\DoxyCodeLine{00244\ }
\DoxyCodeLine{00245\ \ \ \ \ std::shared\_ptr<const\ gko::detail::Event>\ apply\_prepare(}
\DoxyCodeLine{00246\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1ptr__param}{ptr\_param<const\ LinOp>}}\ b,\ \doxymbox{\hyperlink{classgko_1_1array}{array<char>}}\&\ workspace)\ \textcolor{keyword}{const};}
\DoxyCodeLine{00247\ }
\DoxyCodeLine{00248\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1request}{mpi::request}}\ apply\_finalize(}
\DoxyCodeLine{00249\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1ptr__param}{ptr\_param<const\ LinOp>}}\ b,\ \doxymbox{\hyperlink{classgko_1_1ptr__param}{ptr\_param<LinOp>}}\ x,}
\DoxyCodeLine{00250\ \ \ \ \ \ \ \ \ std::shared\_ptr<const\ gko::detail::Event>)\ \textcolor{keyword}{const};}
\DoxyCodeLine{00251\ }
\DoxyCodeLine{00252\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1request}{mpi::request}}\ apply\_finalize(\doxymbox{\hyperlink{classgko_1_1ptr__param}{ptr\_param<const\ LinOp>}}\ b,\ \doxymbox{\hyperlink{classgko_1_1ptr__param}{ptr\_param<LinOp>}}\ x,}
\DoxyCodeLine{00253\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ std::shared\_ptr<const\ gko::detail::Event>,}
\DoxyCodeLine{00254\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1array}{array<char>}}\&\ workspace)\ \textcolor{keyword}{const};}
\DoxyCodeLine{00255\ }
\DoxyCodeLine{00256\ \textcolor{keyword}{private}:}
\DoxyCodeLine{00262\ \ \ \ \ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ GlobalIndexType>}
\DoxyCodeLine{00263\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1RowGatherer}{RowGatherer}}(std::shared\_ptr<const\ Executor>\ exec,}
\DoxyCodeLine{00264\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ std::shared\_ptr<const\ mpi::CollectiveCommunicator>\ coll\_comm,}
\DoxyCodeLine{00265\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1index__map}{index\_map<LocalIndexType,\ GlobalIndexType>}}\&\ imap);}
\DoxyCodeLine{00266\ }
\DoxyCodeLine{00271\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1RowGatherer}{RowGatherer}}(std::shared\_ptr<const\ Executor>\ exec,\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator}{mpi::communicator}}\ comm);}
\DoxyCodeLine{00272\ }
\DoxyCodeLine{00277\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1RowGatherer}{RowGatherer}}(}
\DoxyCodeLine{00278\ \ \ \ \ \ \ \ \ std::shared\_ptr<const\ Executor>\ exec,}
\DoxyCodeLine{00279\ \ \ \ \ \ \ \ \ std::shared\_ptr<const\ mpi::CollectiveCommunicator>\ coll\_comm\_template);}
\DoxyCodeLine{00280\ }
\DoxyCodeLine{00281\ \ \ \ \ \doxymbox{\hyperlink{structgko_1_1dim}{dim<2>}}\ size\_;}
\DoxyCodeLine{00282\ \ \ \ \ std::shared\_ptr<const\ mpi::CollectiveCommunicator>\ coll\_comm\_;}
\DoxyCodeLine{00283\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1array}{array<LocalIndexType>}}\ send\_idxs\_;}
\DoxyCodeLine{00284\ \ \ \ \ \textcolor{keyword}{mutable}\ \doxymbox{\hyperlink{classgko_1_1array}{array<char>}}\ send\_workspace\_;}
\DoxyCodeLine{00285\ \};}
\DoxyCodeLine{00286\ }
\DoxyCodeLine{00287\ }
\DoxyCodeLine{00288\ \}\ \ \textcolor{comment}{//\ namespace\ distributed}}
\DoxyCodeLine{00289\ \}\ \ \textcolor{comment}{//\ namespace\ experimental}}
\DoxyCodeLine{00290\ \}\ \ \textcolor{comment}{//\ namespace\ gko}}
\DoxyCodeLine{00291\ }
\DoxyCodeLine{00292\ \textcolor{preprocessor}{\#endif}}
\DoxyCodeLine{00293\ \textcolor{preprocessor}{\#endif\ \ }\textcolor{comment}{//\ GKO\_PUBLIC\_CORE\_DISTRIBUTED\_ROW\_GATHERER\_HPP\_}}

\end{DoxyCode}
