\doxysection{mpi.\+hpp}
\hypertarget{mpi_8hpp_source}{}\label{mpi_8hpp_source}\index{ginkgo/core/base/mpi.hpp@{ginkgo/core/base/mpi.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\_BASE\_MPI\_HPP\_}}
\DoxyCodeLine{00006\ \textcolor{preprocessor}{\#define\ GKO\_PUBLIC\_CORE\_BASE\_MPI\_HPP\_}}
\DoxyCodeLine{00007\ }
\DoxyCodeLine{00008\ }
\DoxyCodeLine{00009\ \textcolor{preprocessor}{\#include\ <memory>}}
\DoxyCodeLine{00010\ \textcolor{preprocessor}{\#include\ <type\_traits>}}
\DoxyCodeLine{00011\ \textcolor{preprocessor}{\#include\ <utility>}}
\DoxyCodeLine{00012\ }
\DoxyCodeLine{00013\ \textcolor{preprocessor}{\#include\ <ginkgo/config.hpp>}}
\DoxyCodeLine{00014\ \textcolor{preprocessor}{\#include\ <ginkgo/core/base/exception.hpp>}}
\DoxyCodeLine{00015\ \textcolor{preprocessor}{\#include\ <ginkgo/core/base/exception\_helpers.hpp>}}
\DoxyCodeLine{00016\ \textcolor{preprocessor}{\#include\ <ginkgo/core/base/executor.hpp>}}
\DoxyCodeLine{00017\ \textcolor{preprocessor}{\#include\ <ginkgo/core/base/half.hpp>}}
\DoxyCodeLine{00018\ \textcolor{preprocessor}{\#include\ <ginkgo/core/base/types.hpp>}}
\DoxyCodeLine{00019\ \textcolor{preprocessor}{\#include\ <ginkgo/core/base/utils\_helper.hpp>}}
\DoxyCodeLine{00020\ }
\DoxyCodeLine{00021\ }
\DoxyCodeLine{00022\ \textcolor{preprocessor}{\#if\ GINKGO\_BUILD\_MPI}}
\DoxyCodeLine{00023\ }
\DoxyCodeLine{00024\ }
\DoxyCodeLine{00025\ \textcolor{preprocessor}{\#include\ <mpi.h>}}
\DoxyCodeLine{00026\ }
\DoxyCodeLine{00027\ }
\DoxyCodeLine{00028\ \textcolor{keyword}{namespace\ }\doxymbox{\hyperlink{namespacegko}{gko}}\ \{}
\DoxyCodeLine{00029\ \textcolor{keyword}{namespace\ }experimental\ \{}
\DoxyCodeLine{00036\ \textcolor{keyword}{namespace\ }\doxymbox{\hyperlink{namespacegko_1_1experimental_1_1mpi}{mpi}}\ \{}
\DoxyCodeLine{00037\ }
\DoxyCodeLine{00038\ }
\DoxyCodeLine{00042\ \textcolor{keyword}{inline}\ \textcolor{keyword}{constexpr}\ \textcolor{keywordtype}{bool}\ \doxymbox{\hyperlink{namespacegko_1_1experimental_1_1mpi_a7b1bbdde143284165fab4380acba4acc}{is\_gpu\_aware}}()}
\DoxyCodeLine{00043\ \{}
\DoxyCodeLine{00044\ \textcolor{preprocessor}{\#if\ GINKGO\_HAVE\_GPU\_AWARE\_MPI}}
\DoxyCodeLine{00045\ \ \ \ \ \textcolor{keywordflow}{return}\ \textcolor{keyword}{true};}
\DoxyCodeLine{00046\ \textcolor{preprocessor}{\#else}}
\DoxyCodeLine{00047\ \ \ \ \ \textcolor{keywordflow}{return}\ \textcolor{keyword}{false};}
\DoxyCodeLine{00048\ \textcolor{preprocessor}{\#endif}}
\DoxyCodeLine{00049\ \}}
\DoxyCodeLine{00050\ }
\DoxyCodeLine{00051\ }
\DoxyCodeLine{00059\ \textcolor{keywordtype}{int}\ \doxymbox{\hyperlink{namespacegko_1_1experimental_1_1mpi_a0ec0c93a068b2c19da8cb5e874bf9f6c}{map\_rank\_to\_device\_id}}(MPI\_Comm\ comm,\ \textcolor{keywordtype}{int}\ num\_devices);}
\DoxyCodeLine{00060\ }
\DoxyCodeLine{00061\ }
\DoxyCodeLine{00062\ \textcolor{preprocessor}{\#define\ GKO\_REGISTER\_MPI\_TYPE(input\_type,\ mpi\_type)\ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00063\ \textcolor{preprocessor}{\ \ \ \ template\ <>\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00064\ \textcolor{preprocessor}{\ \ \ \ struct\ type\_impl<input\_type>\ \{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00065\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ static\ MPI\_Datatype\ get\_type()\ \{\ return\ mpi\_type;\ \}\ \(\backslash\)}}
\DoxyCodeLine{00066\ \textcolor{preprocessor}{\ \ \ \ \}}}
\DoxyCodeLine{00067\ }
\DoxyCodeLine{00076\ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ T>}
\DoxyCodeLine{00077\ \textcolor{keyword}{struct\ }\doxymbox{\hyperlink{structgko_1_1experimental_1_1mpi_1_1type__impl}{type\_impl}}\ \{\};}
\DoxyCodeLine{00078\ }
\DoxyCodeLine{00079\ }
\DoxyCodeLine{00080\ GKO\_REGISTER\_MPI\_TYPE(\textcolor{keywordtype}{char},\ MPI\_CHAR);}
\DoxyCodeLine{00081\ GKO\_REGISTER\_MPI\_TYPE(\textcolor{keywordtype}{unsigned}\ \textcolor{keywordtype}{char},\ MPI\_UNSIGNED\_CHAR);}
\DoxyCodeLine{00082\ GKO\_REGISTER\_MPI\_TYPE(\textcolor{keywordtype}{unsigned},\ MPI\_UNSIGNED);}
\DoxyCodeLine{00083\ GKO\_REGISTER\_MPI\_TYPE(\textcolor{keywordtype}{int},\ MPI\_INT);}
\DoxyCodeLine{00084\ GKO\_REGISTER\_MPI\_TYPE(\textcolor{keywordtype}{unsigned}\ \textcolor{keywordtype}{short},\ MPI\_UNSIGNED\_SHORT);}
\DoxyCodeLine{00085\ GKO\_REGISTER\_MPI\_TYPE(\textcolor{keywordtype}{unsigned}\ \textcolor{keywordtype}{long},\ MPI\_UNSIGNED\_LONG);}
\DoxyCodeLine{00086\ GKO\_REGISTER\_MPI\_TYPE(\textcolor{keywordtype}{long},\ MPI\_LONG);}
\DoxyCodeLine{00087\ GKO\_REGISTER\_MPI\_TYPE(\textcolor{keywordtype}{long}\ \textcolor{keywordtype}{long},\ MPI\_LONG\_LONG\_INT);}
\DoxyCodeLine{00088\ GKO\_REGISTER\_MPI\_TYPE(\textcolor{keywordtype}{unsigned}\ \textcolor{keywordtype}{long}\ \textcolor{keywordtype}{long},\ MPI\_UNSIGNED\_LONG\_LONG);}
\DoxyCodeLine{00089\ GKO\_REGISTER\_MPI\_TYPE(\textcolor{keywordtype}{float},\ MPI\_FLOAT);}
\DoxyCodeLine{00090\ GKO\_REGISTER\_MPI\_TYPE(\textcolor{keywordtype}{double},\ MPI\_DOUBLE);}
\DoxyCodeLine{00091\ GKO\_REGISTER\_MPI\_TYPE(\textcolor{keywordtype}{long}\ \textcolor{keywordtype}{double},\ MPI\_LONG\_DOUBLE);}
\DoxyCodeLine{00092\ \textcolor{preprocessor}{\#if\ GINKGO\_ENABLE\_HALF}}
\DoxyCodeLine{00093\ \textcolor{comment}{//\ OpenMPI\ 5.0\ have\ support\ from\ MPIX\_C\_FLOAT16\ and\ MPICHv3.4a1\ MPIX\_C\_FLOAT16}}
\DoxyCodeLine{00094\ \textcolor{comment}{//\ Only\ OpenMPI\ support\ complex\ float16}}
\DoxyCodeLine{00095\ \textcolor{comment}{//\ TODO:\ use\ native\ type\ when\ mpi\ is\ configured\ with\ half\ feature}}
\DoxyCodeLine{00096\ GKO\_REGISTER\_MPI\_TYPE(\doxymbox{\hyperlink{classgko_1_1half}{half}},\ MPI\_UNSIGNED\_SHORT);}
\DoxyCodeLine{00097\ GKO\_REGISTER\_MPI\_TYPE(std::complex<half>,\ MPI\_FLOAT);}
\DoxyCodeLine{00098\ \textcolor{preprocessor}{\#endif\ \ }\textcolor{comment}{//\ GKO\_ENABLE\_HALF}}
\DoxyCodeLine{00099\ \textcolor{preprocessor}{\#if\ GINKGO\_ENABLE\_BFLOAT16}}
\DoxyCodeLine{00100\ GKO\_REGISTER\_MPI\_TYPE(\doxymbox{\hyperlink{classgko_1_1bfloat16}{bfloat16}},\ MPI\_UNSIGNED\_SHORT);}
\DoxyCodeLine{00101\ GKO\_REGISTER\_MPI\_TYPE(std::complex<bfloat16>,\ MPI\_FLOAT);}
\DoxyCodeLine{00102\ \textcolor{preprocessor}{\#endif\ \ }\textcolor{comment}{//\ GKO\_ENABLE\_BFLOAT16}}
\DoxyCodeLine{00103\ GKO\_REGISTER\_MPI\_TYPE(std::complex<float>,\ MPI\_C\_FLOAT\_COMPLEX);}
\DoxyCodeLine{00104\ GKO\_REGISTER\_MPI\_TYPE(std::complex<double>,\ MPI\_C\_DOUBLE\_COMPLEX);}
\DoxyCodeLine{00105\ }
\DoxyCodeLine{00106\ }
\DoxyCodeLine{00113\ \textcolor{keyword}{class\ }\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1contiguous__type_a18c83a4574168fec000e17e092e05490}{contiguous\_type}}\ \{}
\DoxyCodeLine{00114\ \textcolor{keyword}{public}:}
\DoxyCodeLine{00121\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1contiguous__type_a18c83a4574168fec000e17e092e05490}{contiguous\_type}}(\textcolor{keywordtype}{int}\ count,\ MPI\_Datatype\ old\_type)\ :\ type\_(MPI\_DATATYPE\_NULL)}
\DoxyCodeLine{00122\ \ \ \ \ \{}
\DoxyCodeLine{00123\ \ \ \ \ \ \ \ \ GKO\_ASSERT\_NO\_MPI\_ERRORS(MPI\_Type\_contiguous(count,\ old\_type,\ \&type\_));}
\DoxyCodeLine{00124\ \ \ \ \ \ \ \ \ GKO\_ASSERT\_NO\_MPI\_ERRORS(MPI\_Type\_commit(\&type\_));}
\DoxyCodeLine{00125\ \ \ \ \ \}}
\DoxyCodeLine{00126\ }
\DoxyCodeLine{00130\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1contiguous__type_a9d976cbdd341c028ffaf9afcade958dc}{contiguous\_type}}()\ :\ type\_(MPI\_DATATYPE\_NULL)\ \{\}}
\DoxyCodeLine{00131\ }
\DoxyCodeLine{00135\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1contiguous__type_ac2a5cd904702059c60596c82ab044c93}{contiguous\_type}}(\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1contiguous__type_a18c83a4574168fec000e17e092e05490}{contiguous\_type}}\&)\ =\ \textcolor{keyword}{delete};}
\DoxyCodeLine{00136\ }
\DoxyCodeLine{00140\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1contiguous__type_a18c83a4574168fec000e17e092e05490}{contiguous\_type}}\&\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1contiguous__type_acb28f7c434042f2af1b6a15f1a88c190}{operator=}}(\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1contiguous__type_a18c83a4574168fec000e17e092e05490}{contiguous\_type}}\&)\ =\ \textcolor{keyword}{delete};}
\DoxyCodeLine{00141\ }
\DoxyCodeLine{00147\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1contiguous__type_ac693fb8e2bb05d8d1a03ec52f657c06f}{contiguous\_type}}(\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1contiguous__type_a18c83a4574168fec000e17e092e05490}{contiguous\_type}}\&\&\ other)\ noexcept\ :\ type\_(MPI\_DATATYPE\_NULL)}
\DoxyCodeLine{00148\ \ \ \ \ \{}
\DoxyCodeLine{00149\ \ \ \ \ \ \ \ \ *\textcolor{keyword}{this}\ =\ std::move(other);}
\DoxyCodeLine{00150\ \ \ \ \ \}}
\DoxyCodeLine{00151\ }
\DoxyCodeLine{00159\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1contiguous__type_a18c83a4574168fec000e17e092e05490}{contiguous\_type}}\&\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1contiguous__type_acae1f66ab5b0fab3ff4cb8cdbf84aedf}{operator=}}(\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1contiguous__type_a18c83a4574168fec000e17e092e05490}{contiguous\_type}}\&\&\ other)\ \textcolor{keyword}{noexcept}}
\DoxyCodeLine{00160\ \ \ \ \ \{}
\DoxyCodeLine{00161\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (\textcolor{keyword}{this}\ !=\ \&other)\ \{}
\DoxyCodeLine{00162\ \ \ \ \ \ \ \ \ \ \ \ \ this-\/>type\_\ =\ std::exchange(other.type\_,\ MPI\_DATATYPE\_NULL);}
\DoxyCodeLine{00163\ \ \ \ \ \ \ \ \ \}}
\DoxyCodeLine{00164\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ *\textcolor{keyword}{this};}
\DoxyCodeLine{00165\ \ \ \ \ \}}
\DoxyCodeLine{00166\ }
\DoxyCodeLine{00170\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1contiguous__type_ad1bdbefc51419efd8b43d9085f5537c4}{\string~contiguous\_type}}()}
\DoxyCodeLine{00171\ \ \ \ \ \{}
\DoxyCodeLine{00172\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (type\_\ !=\ MPI\_DATATYPE\_NULL)\ \{}
\DoxyCodeLine{00173\ \ \ \ \ \ \ \ \ \ \ \ \ MPI\_Type\_free(\&type\_);}
\DoxyCodeLine{00174\ \ \ \ \ \ \ \ \ \}}
\DoxyCodeLine{00175\ \ \ \ \ \}}
\DoxyCodeLine{00176\ }
\DoxyCodeLine{00182\ \ \ \ \ MPI\_Datatype\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1contiguous__type_a02b9d8d759957adf68a3159ac561f668}{get}}()\textcolor{keyword}{\ const\ }\{\ \textcolor{keywordflow}{return}\ type\_;\ \}}
\DoxyCodeLine{00183\ }
\DoxyCodeLine{00184\ \textcolor{keyword}{private}:}
\DoxyCodeLine{00185\ \ \ \ \ MPI\_Datatype\ type\_;}
\DoxyCodeLine{00186\ \};}
\DoxyCodeLine{00187\ }
\DoxyCodeLine{00188\ }
\DoxyCodeLine{00193\ \textcolor{keyword}{enum\ class}\ \doxymbox{\hyperlink{namespacegko_1_1experimental_1_1mpi_ab7c53f651b07ca2e9cd171981268aefb}{thread\_type}}\ \{}
\DoxyCodeLine{00194\ \ \ \ \ serialized\ =\ MPI\_THREAD\_SERIALIZED,}
\DoxyCodeLine{00195\ \ \ \ \ funneled\ =\ MPI\_THREAD\_FUNNELED,}
\DoxyCodeLine{00196\ \ \ \ \ single\ =\ MPI\_THREAD\_SINGLE,}
\DoxyCodeLine{00197\ \ \ \ \ multiple\ =\ MPI\_THREAD\_MULTIPLE}
\DoxyCodeLine{00198\ \};}
\DoxyCodeLine{00199\ }
\DoxyCodeLine{00200\ }
\DoxyCodeLine{00210\ \textcolor{keyword}{class\ }\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1environment_a9f4864403915e8749c715c3d4a5c06cb}{environment}}\ \{}
\DoxyCodeLine{00211\ \textcolor{keyword}{public}:}
\DoxyCodeLine{00212\ \ \ \ \ \textcolor{keyword}{static}\ \textcolor{keywordtype}{bool}\ is\_finalized()}
\DoxyCodeLine{00213\ \ \ \ \ \{}
\DoxyCodeLine{00214\ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{int}\ flag\ =\ 0;}
\DoxyCodeLine{00215\ \ \ \ \ \ \ \ \ GKO\_ASSERT\_NO\_MPI\_ERRORS(MPI\_Finalized(\&flag));}
\DoxyCodeLine{00216\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ flag;}
\DoxyCodeLine{00217\ \ \ \ \ \}}
\DoxyCodeLine{00218\ }
\DoxyCodeLine{00219\ \ \ \ \ \textcolor{keyword}{static}\ \textcolor{keywordtype}{bool}\ is\_initialized()}
\DoxyCodeLine{00220\ \ \ \ \ \{}
\DoxyCodeLine{00221\ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{int}\ flag\ =\ 0;}
\DoxyCodeLine{00222\ \ \ \ \ \ \ \ \ GKO\_ASSERT\_NO\_MPI\_ERRORS(MPI\_Initialized(\&flag));}
\DoxyCodeLine{00223\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ flag;}
\DoxyCodeLine{00224\ \ \ \ \ \}}
\DoxyCodeLine{00225\ }
\DoxyCodeLine{00231\ \ \ \ \ \textcolor{keywordtype}{int}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1environment_a41be6b6a3e956bbfbe69948bc9ea4350}{get\_provided\_thread\_support}}()\textcolor{keyword}{\ const\ }\{\ \textcolor{keywordflow}{return}\ provided\_thread\_support\_;\ \}}
\DoxyCodeLine{00232\ }
\DoxyCodeLine{00241\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1environment_a9f4864403915e8749c715c3d4a5c06cb}{environment}}(\textcolor{keywordtype}{int}\&\ argc,\ \textcolor{keywordtype}{char}**\&\ argv,}
\DoxyCodeLine{00242\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{namespacegko_1_1experimental_1_1mpi_ab7c53f651b07ca2e9cd171981268aefb}{thread\_type}}\ thread\_t\ =\ thread\_type::serialized)}
\DoxyCodeLine{00243\ \ \ \ \ \{}
\DoxyCodeLine{00244\ \ \ \ \ \ \ \ \ this-\/>required\_thread\_support\_\ =\ \textcolor{keyword}{static\_cast<}\textcolor{keywordtype}{int}\textcolor{keyword}{>}(thread\_t);}
\DoxyCodeLine{00245\ \ \ \ \ \ \ \ \ GKO\_ASSERT\_NO\_MPI\_ERRORS(}
\DoxyCodeLine{00246\ \ \ \ \ \ \ \ \ \ \ \ \ MPI\_Init\_thread(\&argc,\ \&argv,\ this-\/>required\_thread\_support\_,}
\DoxyCodeLine{00247\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \&(this-\/>provided\_thread\_support\_)));}
\DoxyCodeLine{00248\ \ \ \ \ \}}
\DoxyCodeLine{00249\ }
\DoxyCodeLine{00253\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1environment_a08ffaad353e8a90f5c23f5a1867a225c}{\string~environment}}()\ \{\ MPI\_Finalize();\ \}}
\DoxyCodeLine{00254\ }
\DoxyCodeLine{00255\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1environment_a9f4864403915e8749c715c3d4a5c06cb}{environment}}(\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1environment}{environment}}\&)\ =\ \textcolor{keyword}{delete};}
\DoxyCodeLine{00256\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1environment_a9f4864403915e8749c715c3d4a5c06cb}{environment}}(\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1environment}{environment}}\&\&)\ =\ \textcolor{keyword}{delete};}
\DoxyCodeLine{00257\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1environment}{environment}}\&\ operator=(\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1environment}{environment}}\&)\ =\ \textcolor{keyword}{delete};}
\DoxyCodeLine{00258\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1environment}{environment}}\&\ operator=(\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1environment}{environment}}\&\&)\ =\ \textcolor{keyword}{delete};}
\DoxyCodeLine{00259\ }
\DoxyCodeLine{00260\ \textcolor{keyword}{private}:}
\DoxyCodeLine{00261\ \ \ \ \ \textcolor{keywordtype}{int}\ required\_thread\_support\_;}
\DoxyCodeLine{00262\ \ \ \ \ \textcolor{keywordtype}{int}\ provided\_thread\_support\_;}
\DoxyCodeLine{00263\ \};}
\DoxyCodeLine{00264\ }
\DoxyCodeLine{00265\ }
\DoxyCodeLine{00266\ \textcolor{keyword}{namespace\ }\{}
\DoxyCodeLine{00267\ }
\DoxyCodeLine{00268\ }
\DoxyCodeLine{00273\ \textcolor{keyword}{class\ }comm\_deleter\ \{}
\DoxyCodeLine{00274\ \textcolor{keyword}{public}:}
\DoxyCodeLine{00275\ \ \ \ \ \textcolor{keyword}{using\ }pointer\ =\ MPI\_Comm*;}
\DoxyCodeLine{00276\ \ \ \ \ \textcolor{keywordtype}{void}\ operator()(pointer\ comm)\textcolor{keyword}{\ const}}
\DoxyCodeLine{00277\ \textcolor{keyword}{\ \ \ \ }\{}
\DoxyCodeLine{00278\ \ \ \ \ \ \ \ \ GKO\_ASSERT(*comm\ !=\ MPI\_COMM\_NULL);}
\DoxyCodeLine{00279\ \ \ \ \ \ \ \ \ GKO\_ASSERT\_NO\_MPI\_ERRORS(MPI\_Comm\_free(comm));}
\DoxyCodeLine{00280\ \ \ \ \ \ \ \ \ \textcolor{keyword}{delete}\ comm;}
\DoxyCodeLine{00281\ \ \ \ \ \}}
\DoxyCodeLine{00282\ \};}
\DoxyCodeLine{00283\ }
\DoxyCodeLine{00284\ }
\DoxyCodeLine{00285\ \}\ \ \textcolor{comment}{//\ namespace}}
\DoxyCodeLine{00286\ }
\DoxyCodeLine{00287\ }
\DoxyCodeLine{00291\ \textcolor{keyword}{struct\ }\doxymbox{\hyperlink{structgko_1_1experimental_1_1mpi_1_1status_ae4bbc7a96ae0364788d664d164238db3}{status}}\ \{}
\DoxyCodeLine{00295\ \ \ \ \ \doxymbox{\hyperlink{structgko_1_1experimental_1_1mpi_1_1status_ae4bbc7a96ae0364788d664d164238db3}{status}}()\ :\ status\_(MPI\_Status\{\})\ \{\}}
\DoxyCodeLine{00296\ }
\DoxyCodeLine{00302\ \ \ \ \ MPI\_Status*\ \doxymbox{\hyperlink{structgko_1_1experimental_1_1mpi_1_1status_afe7e18a49071abb74093b2da1ceda96f}{get}}()\ \{\ \textcolor{keywordflow}{return}\ \&this-\/>status\_;\ \}}
\DoxyCodeLine{00303\ }
\DoxyCodeLine{00314\ \ \ \ \ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ T>}
\DoxyCodeLine{00315\ \ \ \ \ \textcolor{keywordtype}{int}\ \doxymbox{\hyperlink{structgko_1_1experimental_1_1mpi_1_1status_a60f3739b5e3ee17173a73a8d7e6a9711}{get\_count}}(\textcolor{keyword}{const}\ T*\ data)\textcolor{keyword}{\ const}}
\DoxyCodeLine{00316\ \textcolor{keyword}{\ \ \ \ }\{}
\DoxyCodeLine{00317\ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{int}\ count;}
\DoxyCodeLine{00318\ \ \ \ \ \ \ \ \ MPI\_Get\_count(\&status\_,\ \doxymbox{\hyperlink{structgko_1_1experimental_1_1mpi_1_1type__impl}{type\_impl<T>::get\_type}}(),\ \&count);}
\DoxyCodeLine{00319\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ count;}
\DoxyCodeLine{00320\ \ \ \ \ \}}
\DoxyCodeLine{00321\ }
\DoxyCodeLine{00322\ \textcolor{keyword}{private}:}
\DoxyCodeLine{00323\ \ \ \ \ MPI\_Status\ status\_;}
\DoxyCodeLine{00324\ \};}
\DoxyCodeLine{00325\ }
\DoxyCodeLine{00326\ }
\DoxyCodeLine{00331\ \textcolor{keyword}{class\ }\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1request_a134558fdd79e32441a9854fa19630f3d}{request}}\ \{}
\DoxyCodeLine{00332\ \textcolor{keyword}{public}:}
\DoxyCodeLine{00337\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1request_a134558fdd79e32441a9854fa19630f3d}{request}}()\ :\ req\_(MPI\_REQUEST\_NULL)\ \{\}}
\DoxyCodeLine{00338\ }
\DoxyCodeLine{00339\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1request_a134558fdd79e32441a9854fa19630f3d}{request}}(\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1request}{request}}\&)\ =\ \textcolor{keyword}{delete};}
\DoxyCodeLine{00340\ }
\DoxyCodeLine{00341\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1request}{request}}\&\ operator=(\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1request}{request}}\&)\ =\ \textcolor{keyword}{delete};}
\DoxyCodeLine{00342\ }
\DoxyCodeLine{00343\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1request_a134558fdd79e32441a9854fa19630f3d}{request}}(\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1request}{request}}\&\&\ o)\ \textcolor{keyword}{noexcept}\ \{\ *\textcolor{keyword}{this}\ =\ std::move(o);\ \}}
\DoxyCodeLine{00344\ }
\DoxyCodeLine{00345\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1request_a134558fdd79e32441a9854fa19630f3d}{request}}\&\ operator=(\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1request_a134558fdd79e32441a9854fa19630f3d}{request}}\&\&\ o)\ \textcolor{keyword}{noexcept}}
\DoxyCodeLine{00346\ \ \ \ \ \{}
\DoxyCodeLine{00347\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (\textcolor{keyword}{this}\ !=\ \&o)\ \{}
\DoxyCodeLine{00348\ \ \ \ \ \ \ \ \ \ \ \ \ this-\/>req\_\ =\ std::exchange(o.req\_,\ MPI\_REQUEST\_NULL);}
\DoxyCodeLine{00349\ \ \ \ \ \ \ \ \ \}}
\DoxyCodeLine{00350\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ *\textcolor{keyword}{this};}
\DoxyCodeLine{00351\ \ \ \ \ \}}
\DoxyCodeLine{00352\ }
\DoxyCodeLine{00353\ \ \ \ \ \string~request()}
\DoxyCodeLine{00354\ \ \ \ \ \{}
\DoxyCodeLine{00355\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (req\_\ !=\ MPI\_REQUEST\_NULL)\ \{}
\DoxyCodeLine{00356\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (MPI\_Request\_free(\&req\_)\ !=\ MPI\_SUCCESS)\ \{}
\DoxyCodeLine{00357\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ std::terminate();\ \ \textcolor{comment}{//\ since\ we\ can't\ throw\ in\ destructors,\ we}}
\DoxyCodeLine{00358\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ have\ to\ terminate\ the\ program}}
\DoxyCodeLine{00359\ \ \ \ \ \ \ \ \ \ \ \ \ \}}
\DoxyCodeLine{00360\ \ \ \ \ \ \ \ \ \}}
\DoxyCodeLine{00361\ \ \ \ \ \}}
\DoxyCodeLine{00362\ }
\DoxyCodeLine{00368\ \ \ \ \ MPI\_Request*\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1request_a9b4b79bdb828944badb7f342511b245b}{get}}()\ \{\ \textcolor{keywordflow}{return}\ \&this-\/>req\_;\ \}}
\DoxyCodeLine{00369\ }
\DoxyCodeLine{00376\ \ \ \ \ \doxymbox{\hyperlink{structgko_1_1experimental_1_1mpi_1_1status}{status}}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1request_aaddf632d971062a584b0aea23a393381}{wait}}()}
\DoxyCodeLine{00377\ \ \ \ \ \{}
\DoxyCodeLine{00378\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{structgko_1_1experimental_1_1mpi_1_1status}{status}}\ \doxymbox{\hyperlink{structgko_1_1experimental_1_1mpi_1_1status}{status}};}
\DoxyCodeLine{00379\ \ \ \ \ \ \ \ \ GKO\_ASSERT\_NO\_MPI\_ERRORS(MPI\_Wait(\&req\_,\ \doxymbox{\hyperlink{structgko_1_1experimental_1_1mpi_1_1status}{status}}.\doxymbox{\hyperlink{structgko_1_1experimental_1_1mpi_1_1status_afe7e18a49071abb74093b2da1ceda96f}{get}}()));}
\DoxyCodeLine{00380\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ \doxymbox{\hyperlink{structgko_1_1experimental_1_1mpi_1_1status}{status}};}
\DoxyCodeLine{00381\ \ \ \ \ \}}
\DoxyCodeLine{00382\ }
\DoxyCodeLine{00383\ \textcolor{keyword}{private}:}
\DoxyCodeLine{00384\ \ \ \ \ MPI\_Request\ req\_;}
\DoxyCodeLine{00385\ \};}
\DoxyCodeLine{00386\ }
\DoxyCodeLine{00387\ }
\DoxyCodeLine{00395\ \textcolor{keyword}{inline}\ std::vector<status>\ \doxymbox{\hyperlink{namespacegko_1_1experimental_1_1mpi_aff5fd80940add1e4f08a53bfcd131b01}{wait\_all}}(std::vector<request>\&\ req)}
\DoxyCodeLine{00396\ \{}
\DoxyCodeLine{00397\ \ \ \ \ std::vector<status>\ stat;}
\DoxyCodeLine{00398\ \ \ \ \ \textcolor{keywordflow}{for}\ (std::size\_t\ i\ =\ 0;\ i\ <\ req.size();\ ++i)\ \{}
\DoxyCodeLine{00399\ \ \ \ \ \ \ \ \ stat.emplace\_back(req[i].wait());}
\DoxyCodeLine{00400\ \ \ \ \ \}}
\DoxyCodeLine{00401\ \ \ \ \ \textcolor{keywordflow}{return}\ stat;}
\DoxyCodeLine{00402\ \}}
\DoxyCodeLine{00403\ }
\DoxyCodeLine{00404\ }
\DoxyCodeLine{00419\ \textcolor{keyword}{class\ }\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_ad3a80ad9c2e4918fde299b1bd41c5d47}{communicator}}\ \{}
\DoxyCodeLine{00420\ \textcolor{keyword}{public}:}
\DoxyCodeLine{00431\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_ad3a80ad9c2e4918fde299b1bd41c5d47}{communicator}}(\textcolor{keyword}{const}\ MPI\_Comm\&\ comm,\ \textcolor{keywordtype}{bool}\ force\_host\_buffer\ =\ \textcolor{keyword}{false})}
\DoxyCodeLine{00432\ \ \ \ \ \ \ \ \ :\ comm\_(),\ force\_host\_buffer\_(force\_host\_buffer)}
\DoxyCodeLine{00433\ \ \ \ \ \{}
\DoxyCodeLine{00434\ \ \ \ \ \ \ \ \ this-\/>comm\_.reset(\textcolor{keyword}{new}\ MPI\_Comm(comm));}
\DoxyCodeLine{00435\ \ \ \ \ \}}
\DoxyCodeLine{00436\ }
\DoxyCodeLine{00445\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_aa425d5f68991e101f146e1a909ff7a2e}{communicator}}(\textcolor{keyword}{const}\ MPI\_Comm\&\ comm,\ \textcolor{keywordtype}{int}\ color,\ \textcolor{keywordtype}{int}\ key)}
\DoxyCodeLine{00446\ \ \ \ \ \{}
\DoxyCodeLine{00447\ \ \ \ \ \ \ \ \ MPI\_Comm\ comm\_out;}
\DoxyCodeLine{00448\ \ \ \ \ \ \ \ \ GKO\_ASSERT\_NO\_MPI\_ERRORS(MPI\_Comm\_split(comm,\ color,\ key,\ \&comm\_out));}
\DoxyCodeLine{00449\ \ \ \ \ \ \ \ \ this-\/>comm\_.reset(\textcolor{keyword}{new}\ MPI\_Comm(comm\_out),\ comm\_deleter\{\});}
\DoxyCodeLine{00450\ \ \ \ \ \}}
\DoxyCodeLine{00451\ }
\DoxyCodeLine{00460\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_af94280388fb46d5e330a0c40d615a543}{communicator}}(\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_ad3a80ad9c2e4918fde299b1bd41c5d47}{communicator}}\&\ comm,\ \textcolor{keywordtype}{int}\ color,\ \textcolor{keywordtype}{int}\ key)}
\DoxyCodeLine{00461\ \ \ \ \ \{}
\DoxyCodeLine{00462\ \ \ \ \ \ \ \ \ MPI\_Comm\ comm\_out;}
\DoxyCodeLine{00463\ \ \ \ \ \ \ \ \ GKO\_ASSERT\_NO\_MPI\_ERRORS(}
\DoxyCodeLine{00464\ \ \ \ \ \ \ \ \ \ \ \ \ MPI\_Comm\_split(comm.\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_aa0a3dec1701cb81754c56e940185f98d}{get}}(),\ color,\ key,\ \&comm\_out));}
\DoxyCodeLine{00465\ \ \ \ \ \ \ \ \ this-\/>comm\_.reset(\textcolor{keyword}{new}\ MPI\_Comm(comm\_out),\ comm\_deleter\{\});}
\DoxyCodeLine{00466\ \ \ \ \ \}}
\DoxyCodeLine{00467\ }
\DoxyCodeLine{00477\ \ \ \ \ \textcolor{keyword}{static}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_ad3a80ad9c2e4918fde299b1bd41c5d47}{communicator}}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_a98f2e7b649953328824b3781d4b9df01}{create\_owning}}(\textcolor{keyword}{const}\ MPI\_Comm\&\ comm,}
\DoxyCodeLine{00478\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{bool}\ force\_host\_buffer\ =\ \textcolor{keyword}{false})}
\DoxyCodeLine{00479\ \ \ \ \ \{}
\DoxyCodeLine{00480\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_ad3a80ad9c2e4918fde299b1bd41c5d47}{communicator}}\ comm\_out(MPI\_COMM\_NULL,\ force\_host\_buffer);}
\DoxyCodeLine{00481\ \ \ \ \ \ \ \ \ comm\_out.comm\_.reset(\textcolor{keyword}{new}\ MPI\_Comm(comm),\ comm\_deleter\{\});}
\DoxyCodeLine{00482\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ comm\_out;}
\DoxyCodeLine{00483\ \ \ \ \ \}}
\DoxyCodeLine{00484\ }
\DoxyCodeLine{00490\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_a0c7aa9f454cc545769c481bdd639f2d9}{communicator}}(\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_ad3a80ad9c2e4918fde299b1bd41c5d47}{communicator}}\&\ other)\ =\ \textcolor{keywordflow}{default};}
\DoxyCodeLine{00491\ }
\DoxyCodeLine{00498\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_af6d496d85ef798160b890b4658ddfe13}{communicator}}(\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_ad3a80ad9c2e4918fde299b1bd41c5d47}{communicator}}\&\&\ other)\ \{\ *\textcolor{keyword}{this}\ =\ std::move(other);\ \}}
\DoxyCodeLine{00499\ }
\DoxyCodeLine{00503\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_ad3a80ad9c2e4918fde299b1bd41c5d47}{communicator}}\&\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_aaa527bccecf4fc43d1ca3a2b97d1643d}{operator=}}(\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_ad3a80ad9c2e4918fde299b1bd41c5d47}{communicator}}\&\ other)\ =\ \textcolor{keywordflow}{default};}
\DoxyCodeLine{00504\ }
\DoxyCodeLine{00508\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_ad3a80ad9c2e4918fde299b1bd41c5d47}{communicator}}\&\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_ab496011eef07bba097f3266b786124d5}{operator=}}(\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_ad3a80ad9c2e4918fde299b1bd41c5d47}{communicator}}\&\&\ other)}
\DoxyCodeLine{00509\ \ \ \ \ \{}
\DoxyCodeLine{00510\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (\textcolor{keyword}{this}\ !=\ \&other)\ \{}
\DoxyCodeLine{00511\ \ \ \ \ \ \ \ \ \ \ \ \ comm\_\ =\ std::exchange(other.comm\_,}
\DoxyCodeLine{00512\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ std::make\_shared<MPI\_Comm>(MPI\_COMM\_NULL));}
\DoxyCodeLine{00513\ \ \ \ \ \ \ \ \ \ \ \ \ force\_host\_buffer\_\ =\ other.force\_host\_buffer\_;}
\DoxyCodeLine{00514\ \ \ \ \ \ \ \ \ \}}
\DoxyCodeLine{00515\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ *\textcolor{keyword}{this};}
\DoxyCodeLine{00516\ \ \ \ \ \}}
\DoxyCodeLine{00517\ }
\DoxyCodeLine{00523\ \ \ \ \ \textcolor{keyword}{const}\ MPI\_Comm\&\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_aa0a3dec1701cb81754c56e940185f98d}{get}}()\textcolor{keyword}{\ const\ }\{\ \textcolor{keywordflow}{return}\ *(this-\/>comm\_.get());\ \}}
\DoxyCodeLine{00524\ }
\DoxyCodeLine{00525\ \ \ \ \ \textcolor{keywordtype}{bool}\ force\_host\_buffer()\textcolor{keyword}{\ const\ }\{\ \textcolor{keywordflow}{return}\ force\_host\_buffer\_;\ \}}
\DoxyCodeLine{00526\ }
\DoxyCodeLine{00532\ \ \ \ \ \textcolor{keywordtype}{int}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_a5f62780446fdfe15346b5248d8c3e41d}{size}}()\textcolor{keyword}{\ const\ }\{\ \textcolor{keywordflow}{return}\ get\_num\_ranks();\ \}}
\DoxyCodeLine{00533\ }
\DoxyCodeLine{00539\ \ \ \ \ \textcolor{keywordtype}{int}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_a58c4515edcb0dee79b2be1eb40333a61}{rank}}()\textcolor{keyword}{\ const\ }\{\ \textcolor{keywordflow}{return}\ get\_my\_rank();\ \};}
\DoxyCodeLine{00540\ }
\DoxyCodeLine{00546\ \ \ \ \ \textcolor{keywordtype}{int}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_a8dc8a949e3bc0e5e00ad0af13ca62104}{node\_local\_rank}}()\textcolor{keyword}{\ const\ }\{\ \textcolor{keywordflow}{return}\ get\_node\_local\_rank();\ \};}
\DoxyCodeLine{00547\ }
\DoxyCodeLine{00553\ \ \ \ \ \textcolor{keywordtype}{bool}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_ab769309228bcbff10cdf798d07c68bdd}{operator==}}(\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_ad3a80ad9c2e4918fde299b1bd41c5d47}{communicator}}\&\ rhs)\textcolor{keyword}{\ const\ }\{\ \textcolor{keywordflow}{return}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_a3c30ea0db4f095109d1eeb2875d72dc9}{is\_identical}}(rhs);\ \}}
\DoxyCodeLine{00554\ }
\DoxyCodeLine{00560\ \ \ \ \ \textcolor{keywordtype}{bool}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_a54576f5130895a18bc40305e28a0f41e}{operator!=}}(\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_ad3a80ad9c2e4918fde299b1bd41c5d47}{communicator}}\&\ rhs)\textcolor{keyword}{\ const\ }\{\ \textcolor{keywordflow}{return}\ !(*\textcolor{keyword}{this}\ ==\ rhs);\ \}}
\DoxyCodeLine{00561\ }
\DoxyCodeLine{00571\ \ \ \ \ \textcolor{keywordtype}{bool}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_a3c30ea0db4f095109d1eeb2875d72dc9}{is\_identical}}(\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_ad3a80ad9c2e4918fde299b1bd41c5d47}{communicator}}\&\ rhs)\textcolor{keyword}{\ const}}
\DoxyCodeLine{00572\ \textcolor{keyword}{\ \ \ \ }\{}
\DoxyCodeLine{00573\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_aa0a3dec1701cb81754c56e940185f98d}{get}}()\ ==\ MPI\_COMM\_NULL\ ||\ rhs.get()\ ==\ MPI\_COMM\_NULL)\ \{}
\DoxyCodeLine{00574\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_aa0a3dec1701cb81754c56e940185f98d}{get}}()\ ==\ rhs.get();}
\DoxyCodeLine{00575\ \ \ \ \ \ \ \ \ \}}
\DoxyCodeLine{00576\ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{int}\ flag;}
\DoxyCodeLine{00577\ \ \ \ \ \ \ \ \ GKO\_ASSERT\_NO\_MPI\_ERRORS(MPI\_Comm\_compare(\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_aa0a3dec1701cb81754c56e940185f98d}{get}}(),\ rhs.get(),\ \&flag));}
\DoxyCodeLine{00578\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ flag\ ==\ MPI\_IDENT;}
\DoxyCodeLine{00579\ \ \ \ \ \}}
\DoxyCodeLine{00580\ }
\DoxyCodeLine{00593\ \ \ \ \ \textcolor{keywordtype}{bool}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_ab9b319dfe23cce517b793ea85766d1bc}{is\_congruent}}(\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_ad3a80ad9c2e4918fde299b1bd41c5d47}{communicator}}\&\ rhs)\textcolor{keyword}{\ const}}
\DoxyCodeLine{00594\ \textcolor{keyword}{\ \ \ \ }\{}
\DoxyCodeLine{00595\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_aa0a3dec1701cb81754c56e940185f98d}{get}}()\ ==\ MPI\_COMM\_NULL\ ||\ rhs.get()\ ==\ MPI\_COMM\_NULL)\ \{}
\DoxyCodeLine{00596\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_aa0a3dec1701cb81754c56e940185f98d}{get}}()\ ==\ rhs.get();}
\DoxyCodeLine{00597\ \ \ \ \ \ \ \ \ \}}
\DoxyCodeLine{00598\ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{int}\ flag;}
\DoxyCodeLine{00599\ \ \ \ \ \ \ \ \ GKO\_ASSERT\_NO\_MPI\_ERRORS(MPI\_Comm\_compare(\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_aa0a3dec1701cb81754c56e940185f98d}{get}}(),\ rhs.get(),\ \&flag));}
\DoxyCodeLine{00600\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ flag\ ==\ MPI\_CONGRUENT;}
\DoxyCodeLine{00601\ \ \ \ \ \}}
\DoxyCodeLine{00602\ }
\DoxyCodeLine{00607\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_a5644abcc067c0959c49a0cc14dcc96a7}{synchronize}}()\textcolor{keyword}{\ const}}
\DoxyCodeLine{00608\ \textcolor{keyword}{\ \ \ \ }\{}
\DoxyCodeLine{00609\ \ \ \ \ \ \ \ \ GKO\_ASSERT\_NO\_MPI\_ERRORS(MPI\_Barrier(this-\/>\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_aa0a3dec1701cb81754c56e940185f98d}{get}}()));}
\DoxyCodeLine{00610\ \ \ \ \ \}}
\DoxyCodeLine{00611\ }
\DoxyCodeLine{00625\ \ \ \ \ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ SendType>}
\DoxyCodeLine{00626\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_a62d7d3e3cdd2625840b8505d2b266b26}{send}}(std::shared\_ptr<const\ Executor>\ exec,\ \textcolor{keyword}{const}\ SendType*\ send\_buffer,}
\DoxyCodeLine{00627\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \textcolor{keywordtype}{int}\ send\_count,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{int}\ destination\_rank,}
\DoxyCodeLine{00628\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \textcolor{keywordtype}{int}\ send\_tag)\textcolor{keyword}{\ const}}
\DoxyCodeLine{00629\ \textcolor{keyword}{\ \ \ \ }\{}
\DoxyCodeLine{00630\ \ \ \ \ \ \ \ \ \textcolor{keyword}{auto}\ guard\ =\ exec-\/>get\_scoped\_device\_id\_guard();}
\DoxyCodeLine{00631\ \ \ \ \ \ \ \ \ GKO\_ASSERT\_NO\_MPI\_ERRORS(}
\DoxyCodeLine{00632\ \ \ \ \ \ \ \ \ \ \ \ \ MPI\_Send(send\_buffer,\ send\_count,\ \doxymbox{\hyperlink{structgko_1_1experimental_1_1mpi_1_1type__impl}{type\_impl<SendType>::get\_type}}(),}
\DoxyCodeLine{00633\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ destination\_rank,\ send\_tag,\ this-\/>\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_aa0a3dec1701cb81754c56e940185f98d}{get}}()));}
\DoxyCodeLine{00634\ \ \ \ \ \}}
\DoxyCodeLine{00635\ }
\DoxyCodeLine{00652\ \ \ \ \ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ SendType>}
\DoxyCodeLine{00653\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1request}{request}}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_af6265023d1c4f4965b71c309198f608b}{i\_send}}(std::shared\_ptr<const\ Executor>\ exec,}
\DoxyCodeLine{00654\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ SendType*\ send\_buffer,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{int}\ send\_count,}
\DoxyCodeLine{00655\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \textcolor{keywordtype}{int}\ destination\_rank,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{int}\ send\_tag)\textcolor{keyword}{\ const}}
\DoxyCodeLine{00656\ \textcolor{keyword}{\ \ \ \ }\{}
\DoxyCodeLine{00657\ \ \ \ \ \ \ \ \ \textcolor{keyword}{auto}\ guard\ =\ exec-\/>get\_scoped\_device\_id\_guard();}
\DoxyCodeLine{00658\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1request}{request}}\ req;}
\DoxyCodeLine{00659\ \ \ \ \ \ \ \ \ GKO\_ASSERT\_NO\_MPI\_ERRORS(}
\DoxyCodeLine{00660\ \ \ \ \ \ \ \ \ \ \ \ \ MPI\_Isend(send\_buffer,\ send\_count,\ \doxymbox{\hyperlink{structgko_1_1experimental_1_1mpi_1_1type__impl}{type\_impl<SendType>::get\_type}}(),}
\DoxyCodeLine{00661\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ destination\_rank,\ send\_tag,\ this-\/>\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_aa0a3dec1701cb81754c56e940185f98d}{get}}(),\ req.\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1request_a9b4b79bdb828944badb7f342511b245b}{get}}()));}
\DoxyCodeLine{00662\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ req;}
\DoxyCodeLine{00663\ \ \ \ \ \}}
\DoxyCodeLine{00664\ }
\DoxyCodeLine{00680\ \ \ \ \ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ RecvType>}
\DoxyCodeLine{00681\ \ \ \ \ \doxymbox{\hyperlink{structgko_1_1experimental_1_1mpi_1_1status}{status}}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_a0065a579782ab27c80247bc309639393}{recv}}(std::shared\_ptr<const\ Executor>\ exec,\ RecvType*\ recv\_buffer,}
\DoxyCodeLine{00682\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \textcolor{keywordtype}{int}\ recv\_count,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{int}\ source\_rank,}
\DoxyCodeLine{00683\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \textcolor{keywordtype}{int}\ recv\_tag)\textcolor{keyword}{\ const}}
\DoxyCodeLine{00684\ \textcolor{keyword}{\ \ \ \ }\{}
\DoxyCodeLine{00685\ \ \ \ \ \ \ \ \ \textcolor{keyword}{auto}\ guard\ =\ exec-\/>get\_scoped\_device\_id\_guard();}
\DoxyCodeLine{00686\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{structgko_1_1experimental_1_1mpi_1_1status}{status}}\ st;}
\DoxyCodeLine{00687\ \ \ \ \ \ \ \ \ GKO\_ASSERT\_NO\_MPI\_ERRORS(}
\DoxyCodeLine{00688\ \ \ \ \ \ \ \ \ \ \ \ \ MPI\_Recv(recv\_buffer,\ recv\_count,\ \doxymbox{\hyperlink{structgko_1_1experimental_1_1mpi_1_1type__impl}{type\_impl<RecvType>::get\_type}}(),}
\DoxyCodeLine{00689\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ source\_rank,\ recv\_tag,\ this-\/>\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_aa0a3dec1701cb81754c56e940185f98d}{get}}(),\ st.\doxymbox{\hyperlink{structgko_1_1experimental_1_1mpi_1_1status_afe7e18a49071abb74093b2da1ceda96f}{get}}()));}
\DoxyCodeLine{00690\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ st;}
\DoxyCodeLine{00691\ \ \ \ \ \}}
\DoxyCodeLine{00692\ }
\DoxyCodeLine{00708\ \ \ \ \ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ RecvType>}
\DoxyCodeLine{00709\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1request}{request}}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_a2ea79fc26a548eb7d42b8e54d877c3aa}{i\_recv}}(std::shared\_ptr<const\ Executor>\ exec,\ RecvType*\ recv\_buffer,}
\DoxyCodeLine{00710\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \textcolor{keywordtype}{int}\ recv\_count,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{int}\ source\_rank,}
\DoxyCodeLine{00711\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \textcolor{keywordtype}{int}\ recv\_tag)\textcolor{keyword}{\ const}}
\DoxyCodeLine{00712\ \textcolor{keyword}{\ \ \ \ }\{}
\DoxyCodeLine{00713\ \ \ \ \ \ \ \ \ \textcolor{keyword}{auto}\ guard\ =\ exec-\/>get\_scoped\_device\_id\_guard();}
\DoxyCodeLine{00714\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1request}{request}}\ req;}
\DoxyCodeLine{00715\ \ \ \ \ \ \ \ \ GKO\_ASSERT\_NO\_MPI\_ERRORS(}
\DoxyCodeLine{00716\ \ \ \ \ \ \ \ \ \ \ \ \ MPI\_Irecv(recv\_buffer,\ recv\_count,\ \doxymbox{\hyperlink{structgko_1_1experimental_1_1mpi_1_1type__impl}{type\_impl<RecvType>::get\_type}}(),}
\DoxyCodeLine{00717\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ source\_rank,\ recv\_tag,\ this-\/>\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_aa0a3dec1701cb81754c56e940185f98d}{get}}(),\ req.\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1request_a9b4b79bdb828944badb7f342511b245b}{get}}()));}
\DoxyCodeLine{00718\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ req;}
\DoxyCodeLine{00719\ \ \ \ \ \}}
\DoxyCodeLine{00720\ }
\DoxyCodeLine{00733\ \ \ \ \ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ BroadcastType>}
\DoxyCodeLine{00734\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_a95ea693d1ddc249215968d378e80dcc7}{broadcast}}(std::shared\_ptr<const\ Executor>\ exec,\ BroadcastType*\ buffer,}
\DoxyCodeLine{00735\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{int}\ count,\ \textcolor{keywordtype}{int}\ root\_rank)\textcolor{keyword}{\ const}}
\DoxyCodeLine{00736\ \textcolor{keyword}{\ \ \ \ }\{}
\DoxyCodeLine{00737\ \ \ \ \ \ \ \ \ \textcolor{keyword}{auto}\ guard\ =\ exec-\/>get\_scoped\_device\_id\_guard();}
\DoxyCodeLine{00738\ \ \ \ \ \ \ \ \ GKO\_ASSERT\_NO\_MPI\_ERRORS(MPI\_Bcast(buffer,\ count,}
\DoxyCodeLine{00739\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{structgko_1_1experimental_1_1mpi_1_1type__impl}{type\_impl<BroadcastType>::get\_type}}(),}
\DoxyCodeLine{00740\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ root\_rank,\ this-\/>\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_aa0a3dec1701cb81754c56e940185f98d}{get}}()));}
\DoxyCodeLine{00741\ \ \ \ \ \}}
\DoxyCodeLine{00742\ }
\DoxyCodeLine{00758\ \ \ \ \ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ BroadcastType>}
\DoxyCodeLine{00759\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1request}{request}}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_a0edf57701938af05bb356f1228798ad8}{i\_broadcast}}(std::shared\_ptr<const\ Executor>\ exec,}
\DoxyCodeLine{00760\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ BroadcastType*\ buffer,\ \textcolor{keywordtype}{int}\ count,\ \textcolor{keywordtype}{int}\ root\_rank)\textcolor{keyword}{\ const}}
\DoxyCodeLine{00761\ \textcolor{keyword}{\ \ \ \ }\{}
\DoxyCodeLine{00762\ \ \ \ \ \ \ \ \ \textcolor{keyword}{auto}\ guard\ =\ exec-\/>get\_scoped\_device\_id\_guard();}
\DoxyCodeLine{00763\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1request}{request}}\ req;}
\DoxyCodeLine{00764\ \ \ \ \ \ \ \ \ GKO\_ASSERT\_NO\_MPI\_ERRORS(}
\DoxyCodeLine{00765\ \ \ \ \ \ \ \ \ \ \ \ \ MPI\_Ibcast(buffer,\ count,\ \doxymbox{\hyperlink{structgko_1_1experimental_1_1mpi_1_1type__impl}{type\_impl<BroadcastType>::get\_type}}(),}
\DoxyCodeLine{00766\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ root\_rank,\ this-\/>\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_aa0a3dec1701cb81754c56e940185f98d}{get}}(),\ req.\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1request_a9b4b79bdb828944badb7f342511b245b}{get}}()));}
\DoxyCodeLine{00767\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ req;}
\DoxyCodeLine{00768\ \ \ \ \ \}}
\DoxyCodeLine{00769\ }
\DoxyCodeLine{00784\ \ \ \ \ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ ReduceType>}
\DoxyCodeLine{00785\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_ade217a21b11ab3b3392ae73ef9b6d942}{reduce}}(std::shared\_ptr<const\ Executor>\ exec,}
\DoxyCodeLine{00786\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ ReduceType*\ send\_buffer,\ ReduceType*\ recv\_buffer,}
\DoxyCodeLine{00787\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{int}\ count,\ MPI\_Op\ operation,\ \textcolor{keywordtype}{int}\ root\_rank)\textcolor{keyword}{\ const}}
\DoxyCodeLine{00788\ \textcolor{keyword}{\ \ \ \ }\{}
\DoxyCodeLine{00789\ \ \ \ \ \ \ \ \ \textcolor{keyword}{auto}\ guard\ =\ exec-\/>get\_scoped\_device\_id\_guard();}
\DoxyCodeLine{00790\ \ \ \ \ \ \ \ \ GKO\_ASSERT\_NO\_MPI\_ERRORS(MPI\_Reduce(send\_buffer,\ recv\_buffer,\ count,}
\DoxyCodeLine{00791\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{structgko_1_1experimental_1_1mpi_1_1type__impl}{type\_impl<ReduceType>::get\_type}}(),}
\DoxyCodeLine{00792\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ operation,\ root\_rank,\ this-\/>\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_aa0a3dec1701cb81754c56e940185f98d}{get}}()));}
\DoxyCodeLine{00793\ \ \ \ \ \}}
\DoxyCodeLine{00794\ }
\DoxyCodeLine{00811\ \ \ \ \ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ ReduceType>}
\DoxyCodeLine{00812\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1request}{request}}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_a5d4ff6a0c4d5af67292a22561d7f58e5}{i\_reduce}}(std::shared\_ptr<const\ Executor>\ exec,}
\DoxyCodeLine{00813\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ ReduceType*\ send\_buffer,\ ReduceType*\ recv\_buffer,}
\DoxyCodeLine{00814\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{int}\ count,\ MPI\_Op\ operation,\ \textcolor{keywordtype}{int}\ root\_rank)\textcolor{keyword}{\ const}}
\DoxyCodeLine{00815\ \textcolor{keyword}{\ \ \ \ }\{}
\DoxyCodeLine{00816\ \ \ \ \ \ \ \ \ \textcolor{keyword}{auto}\ guard\ =\ exec-\/>get\_scoped\_device\_id\_guard();}
\DoxyCodeLine{00817\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1request}{request}}\ req;}
\DoxyCodeLine{00818\ \ \ \ \ \ \ \ \ GKO\_ASSERT\_NO\_MPI\_ERRORS(MPI\_Ireduce(}
\DoxyCodeLine{00819\ \ \ \ \ \ \ \ \ \ \ \ \ send\_buffer,\ recv\_buffer,\ count,\ \doxymbox{\hyperlink{structgko_1_1experimental_1_1mpi_1_1type__impl}{type\_impl<ReduceType>::get\_type}}(),}
\DoxyCodeLine{00820\ \ \ \ \ \ \ \ \ \ \ \ \ operation,\ root\_rank,\ this-\/>\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_aa0a3dec1701cb81754c56e940185f98d}{get}}(),\ req.\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1request_a9b4b79bdb828944badb7f342511b245b}{get}}()));}
\DoxyCodeLine{00821\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ req;}
\DoxyCodeLine{00822\ \ \ \ \ \}}
\DoxyCodeLine{00823\ }
\DoxyCodeLine{00837\ \ \ \ \ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ ReduceType>}
\DoxyCodeLine{00838\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_aa98aaa161d489569ee95da8e2c33c3a1}{all\_reduce}}(std::shared\_ptr<const\ Executor>\ exec,}
\DoxyCodeLine{00839\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ReduceType*\ recv\_buffer,\ \textcolor{keywordtype}{int}\ count,\ MPI\_Op\ operation)\textcolor{keyword}{\ const}}
\DoxyCodeLine{00840\ \textcolor{keyword}{\ \ \ \ }\{}
\DoxyCodeLine{00841\ \ \ \ \ \ \ \ \ \textcolor{keyword}{auto}\ guard\ =\ exec-\/>get\_scoped\_device\_id\_guard();}
\DoxyCodeLine{00842\ \ \ \ \ \ \ \ \ GKO\_ASSERT\_NO\_MPI\_ERRORS(MPI\_Allreduce(}
\DoxyCodeLine{00843\ \ \ \ \ \ \ \ \ \ \ \ \ MPI\_IN\_PLACE,\ recv\_buffer,\ count,\ \doxymbox{\hyperlink{structgko_1_1experimental_1_1mpi_1_1type__impl}{type\_impl<ReduceType>::get\_type}}(),}
\DoxyCodeLine{00844\ \ \ \ \ \ \ \ \ \ \ \ \ operation,\ this-\/>\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_aa0a3dec1701cb81754c56e940185f98d}{get}}()));}
\DoxyCodeLine{00845\ \ \ \ \ \}}
\DoxyCodeLine{00846\ }
\DoxyCodeLine{00862\ \ \ \ \ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ ReduceType>}
\DoxyCodeLine{00863\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1request}{request}}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_a7d28b094fb7f08bc9c52fffd0180abc0}{i\_all\_reduce}}(std::shared\_ptr<const\ Executor>\ exec,}
\DoxyCodeLine{00864\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ReduceType*\ recv\_buffer,\ \textcolor{keywordtype}{int}\ count,}
\DoxyCodeLine{00865\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ MPI\_Op\ operation)\textcolor{keyword}{\ const}}
\DoxyCodeLine{00866\ \textcolor{keyword}{\ \ \ \ }\{}
\DoxyCodeLine{00867\ \ \ \ \ \ \ \ \ \textcolor{keyword}{auto}\ guard\ =\ exec-\/>get\_scoped\_device\_id\_guard();}
\DoxyCodeLine{00868\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1request}{request}}\ req;}
\DoxyCodeLine{00869\ \ \ \ \ \ \ \ \ GKO\_ASSERT\_NO\_MPI\_ERRORS(MPI\_Iallreduce(}
\DoxyCodeLine{00870\ \ \ \ \ \ \ \ \ \ \ \ \ MPI\_IN\_PLACE,\ recv\_buffer,\ count,\ \doxymbox{\hyperlink{structgko_1_1experimental_1_1mpi_1_1type__impl}{type\_impl<ReduceType>::get\_type}}(),}
\DoxyCodeLine{00871\ \ \ \ \ \ \ \ \ \ \ \ \ operation,\ this-\/>\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_aa0a3dec1701cb81754c56e940185f98d}{get}}(),\ req.\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1request_a9b4b79bdb828944badb7f342511b245b}{get}}()));}
\DoxyCodeLine{00872\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ req;}
\DoxyCodeLine{00873\ \ \ \ \ \}}
\DoxyCodeLine{00874\ }
\DoxyCodeLine{00889\ \ \ \ \ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ ReduceType>}
\DoxyCodeLine{00890\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_abcd71bfcf4fbc916529ce7c2c85857d9}{all\_reduce}}(std::shared\_ptr<const\ Executor>\ exec,}
\DoxyCodeLine{00891\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ ReduceType*\ send\_buffer,\ ReduceType*\ recv\_buffer,}
\DoxyCodeLine{00892\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{int}\ count,\ MPI\_Op\ operation)\textcolor{keyword}{\ const}}
\DoxyCodeLine{00893\ \textcolor{keyword}{\ \ \ \ }\{}
\DoxyCodeLine{00894\ \ \ \ \ \ \ \ \ \textcolor{keyword}{auto}\ guard\ =\ exec-\/>get\_scoped\_device\_id\_guard();}
\DoxyCodeLine{00895\ \ \ \ \ \ \ \ \ GKO\_ASSERT\_NO\_MPI\_ERRORS(MPI\_Allreduce(}
\DoxyCodeLine{00896\ \ \ \ \ \ \ \ \ \ \ \ \ send\_buffer,\ recv\_buffer,\ count,\ \doxymbox{\hyperlink{structgko_1_1experimental_1_1mpi_1_1type__impl}{type\_impl<ReduceType>::get\_type}}(),}
\DoxyCodeLine{00897\ \ \ \ \ \ \ \ \ \ \ \ \ operation,\ this-\/>\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_aa0a3dec1701cb81754c56e940185f98d}{get}}()));}
\DoxyCodeLine{00898\ \ \ \ \ \}}
\DoxyCodeLine{00899\ }
\DoxyCodeLine{00916\ \ \ \ \ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ ReduceType>}
\DoxyCodeLine{00917\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1request}{request}}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_acefa109840bc98d51a826dbd40d235db}{i\_all\_reduce}}(std::shared\_ptr<const\ Executor>\ exec,}
\DoxyCodeLine{00918\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ ReduceType*\ send\_buffer,\ ReduceType*\ recv\_buffer,}
\DoxyCodeLine{00919\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{int}\ count,\ MPI\_Op\ operation)\textcolor{keyword}{\ const}}
\DoxyCodeLine{00920\ \textcolor{keyword}{\ \ \ \ }\{}
\DoxyCodeLine{00921\ \ \ \ \ \ \ \ \ \textcolor{keyword}{auto}\ guard\ =\ exec-\/>get\_scoped\_device\_id\_guard();}
\DoxyCodeLine{00922\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1request}{request}}\ req;}
\DoxyCodeLine{00923\ \ \ \ \ \ \ \ \ GKO\_ASSERT\_NO\_MPI\_ERRORS(MPI\_Iallreduce(}
\DoxyCodeLine{00924\ \ \ \ \ \ \ \ \ \ \ \ \ send\_buffer,\ recv\_buffer,\ count,\ \doxymbox{\hyperlink{structgko_1_1experimental_1_1mpi_1_1type__impl}{type\_impl<ReduceType>::get\_type}}(),}
\DoxyCodeLine{00925\ \ \ \ \ \ \ \ \ \ \ \ \ operation,\ this-\/>\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_aa0a3dec1701cb81754c56e940185f98d}{get}}(),\ req.\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1request_a9b4b79bdb828944badb7f342511b245b}{get}}()));}
\DoxyCodeLine{00926\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ req;}
\DoxyCodeLine{00927\ \ \ \ \ \}}
\DoxyCodeLine{00928\ }
\DoxyCodeLine{00945\ \ \ \ \ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ SendType,\ \textcolor{keyword}{typename}\ RecvType>}
\DoxyCodeLine{00946\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_a0f3b6b2a414c8fda967dc08dd1ec5927}{gather}}(std::shared\_ptr<const\ Executor>\ exec,}
\DoxyCodeLine{00947\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ SendType*\ send\_buffer,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{int}\ send\_count,}
\DoxyCodeLine{00948\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ RecvType*\ recv\_buffer,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{int}\ recv\_count,}
\DoxyCodeLine{00949\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{int}\ root\_rank)\textcolor{keyword}{\ const}}
\DoxyCodeLine{00950\ \textcolor{keyword}{\ \ \ \ }\{}
\DoxyCodeLine{00951\ \ \ \ \ \ \ \ \ \textcolor{keyword}{auto}\ guard\ =\ exec-\/>get\_scoped\_device\_id\_guard();}
\DoxyCodeLine{00952\ \ \ \ \ \ \ \ \ GKO\_ASSERT\_NO\_MPI\_ERRORS(}
\DoxyCodeLine{00953\ \ \ \ \ \ \ \ \ \ \ \ \ MPI\_Gather(send\_buffer,\ send\_count,\ \doxymbox{\hyperlink{structgko_1_1experimental_1_1mpi_1_1type__impl}{type\_impl<SendType>::get\_type}}(),}
\DoxyCodeLine{00954\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ recv\_buffer,\ recv\_count,\ \doxymbox{\hyperlink{structgko_1_1experimental_1_1mpi_1_1type__impl}{type\_impl<RecvType>::get\_type}}(),}
\DoxyCodeLine{00955\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ root\_rank,\ this-\/>\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_aa0a3dec1701cb81754c56e940185f98d}{get}}()));}
\DoxyCodeLine{00956\ \ \ \ \ \}}
\DoxyCodeLine{00957\ }
\DoxyCodeLine{00977\ \ \ \ \ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ SendType,\ \textcolor{keyword}{typename}\ RecvType>}
\DoxyCodeLine{00978\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1request}{request}}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_a74aeeeb289a7509c1669b156fbf3637a}{i\_gather}}(std::shared\_ptr<const\ Executor>\ exec,}
\DoxyCodeLine{00979\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ SendType*\ send\_buffer,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{int}\ send\_count,}
\DoxyCodeLine{00980\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ RecvType*\ recv\_buffer,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{int}\ recv\_count,}
\DoxyCodeLine{00981\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{int}\ root\_rank)\textcolor{keyword}{\ const}}
\DoxyCodeLine{00982\ \textcolor{keyword}{\ \ \ \ }\{}
\DoxyCodeLine{00983\ \ \ \ \ \ \ \ \ \textcolor{keyword}{auto}\ guard\ =\ exec-\/>get\_scoped\_device\_id\_guard();}
\DoxyCodeLine{00984\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1request}{request}}\ req;}
\DoxyCodeLine{00985\ \ \ \ \ \ \ \ \ GKO\_ASSERT\_NO\_MPI\_ERRORS(MPI\_Igather(}
\DoxyCodeLine{00986\ \ \ \ \ \ \ \ \ \ \ \ \ send\_buffer,\ send\_count,\ \doxymbox{\hyperlink{structgko_1_1experimental_1_1mpi_1_1type__impl}{type\_impl<SendType>::get\_type}}(),}
\DoxyCodeLine{00987\ \ \ \ \ \ \ \ \ \ \ \ \ recv\_buffer,\ recv\_count,\ \doxymbox{\hyperlink{structgko_1_1experimental_1_1mpi_1_1type__impl}{type\_impl<RecvType>::get\_type}}(),\ root\_rank,}
\DoxyCodeLine{00988\ \ \ \ \ \ \ \ \ \ \ \ \ this-\/>\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_aa0a3dec1701cb81754c56e940185f98d}{get}}(),\ req.\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1request_a9b4b79bdb828944badb7f342511b245b}{get}}()));}
\DoxyCodeLine{00989\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ req;}
\DoxyCodeLine{00990\ \ \ \ \ \}}
\DoxyCodeLine{00991\ }
\DoxyCodeLine{01010\ \ \ \ \ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ SendType,\ \textcolor{keyword}{typename}\ RecvType>}
\DoxyCodeLine{01011\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_af3c29e0893c9ab432c7cc58b6f36dce2}{gather\_v}}(std::shared\_ptr<const\ Executor>\ exec,}
\DoxyCodeLine{01012\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ SendType*\ send\_buffer,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{int}\ send\_count,}
\DoxyCodeLine{01013\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ RecvType*\ recv\_buffer,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{int}*\ recv\_counts,}
\DoxyCodeLine{01014\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \textcolor{keywordtype}{int}*\ displacements,\ \textcolor{keywordtype}{int}\ root\_rank)\textcolor{keyword}{\ const}}
\DoxyCodeLine{01015\ \textcolor{keyword}{\ \ \ \ }\{}
\DoxyCodeLine{01016\ \ \ \ \ \ \ \ \ \textcolor{keyword}{auto}\ guard\ =\ exec-\/>get\_scoped\_device\_id\_guard();}
\DoxyCodeLine{01017\ \ \ \ \ \ \ \ \ GKO\_ASSERT\_NO\_MPI\_ERRORS(MPI\_Gatherv(}
\DoxyCodeLine{01018\ \ \ \ \ \ \ \ \ \ \ \ \ send\_buffer,\ send\_count,\ \doxymbox{\hyperlink{structgko_1_1experimental_1_1mpi_1_1type__impl}{type\_impl<SendType>::get\_type}}(),}
\DoxyCodeLine{01019\ \ \ \ \ \ \ \ \ \ \ \ \ recv\_buffer,\ recv\_counts,\ displacements,}
\DoxyCodeLine{01020\ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{structgko_1_1experimental_1_1mpi_1_1type__impl}{type\_impl<RecvType>::get\_type}}(),\ root\_rank,\ this-\/>\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_aa0a3dec1701cb81754c56e940185f98d}{get}}()));}
\DoxyCodeLine{01021\ \ \ \ \ \}}
\DoxyCodeLine{01022\ }
\DoxyCodeLine{01043\ \ \ \ \ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ SendType,\ \textcolor{keyword}{typename}\ RecvType>}
\DoxyCodeLine{01044\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1request}{request}}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_acc0eaaa2c5ae836eb28903e17add1a8a}{i\_gather\_v}}(std::shared\_ptr<const\ Executor>\ exec,}
\DoxyCodeLine{01045\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ SendType*\ send\_buffer,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{int}\ send\_count,}
\DoxyCodeLine{01046\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ RecvType*\ recv\_buffer,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{int}*\ recv\_counts,}
\DoxyCodeLine{01047\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \textcolor{keywordtype}{int}*\ displacements,\ \textcolor{keywordtype}{int}\ root\_rank)\textcolor{keyword}{\ const}}
\DoxyCodeLine{01048\ \textcolor{keyword}{\ \ \ \ }\{}
\DoxyCodeLine{01049\ \ \ \ \ \ \ \ \ \textcolor{keyword}{auto}\ guard\ =\ exec-\/>get\_scoped\_device\_id\_guard();}
\DoxyCodeLine{01050\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1request}{request}}\ req;}
\DoxyCodeLine{01051\ \ \ \ \ \ \ \ \ GKO\_ASSERT\_NO\_MPI\_ERRORS(MPI\_Igatherv(}
\DoxyCodeLine{01052\ \ \ \ \ \ \ \ \ \ \ \ \ send\_buffer,\ send\_count,\ \doxymbox{\hyperlink{structgko_1_1experimental_1_1mpi_1_1type__impl}{type\_impl<SendType>::get\_type}}(),}
\DoxyCodeLine{01053\ \ \ \ \ \ \ \ \ \ \ \ \ recv\_buffer,\ recv\_counts,\ displacements,}
\DoxyCodeLine{01054\ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{structgko_1_1experimental_1_1mpi_1_1type__impl}{type\_impl<RecvType>::get\_type}}(),\ root\_rank,\ this-\/>\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_aa0a3dec1701cb81754c56e940185f98d}{get}}(),}
\DoxyCodeLine{01055\ \ \ \ \ \ \ \ \ \ \ \ \ req.\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1request_a9b4b79bdb828944badb7f342511b245b}{get}}()));}
\DoxyCodeLine{01056\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ req;}
\DoxyCodeLine{01057\ \ \ \ \ \}}
\DoxyCodeLine{01058\ }
\DoxyCodeLine{01074\ \ \ \ \ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ SendType,\ \textcolor{keyword}{typename}\ RecvType>}
\DoxyCodeLine{01075\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_aaeec2373a2100e3e0e2f22256f810737}{all\_gather}}(std::shared\_ptr<const\ Executor>\ exec,}
\DoxyCodeLine{01076\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ SendType*\ send\_buffer,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{int}\ send\_count,}
\DoxyCodeLine{01077\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ RecvType*\ recv\_buffer,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{int}\ recv\_count)\textcolor{keyword}{\ const}}
\DoxyCodeLine{01078\ \textcolor{keyword}{\ \ \ \ }\{}
\DoxyCodeLine{01079\ \ \ \ \ \ \ \ \ \textcolor{keyword}{auto}\ guard\ =\ exec-\/>get\_scoped\_device\_id\_guard();}
\DoxyCodeLine{01080\ \ \ \ \ \ \ \ \ GKO\_ASSERT\_NO\_MPI\_ERRORS(MPI\_Allgather(}
\DoxyCodeLine{01081\ \ \ \ \ \ \ \ \ \ \ \ \ send\_buffer,\ send\_count,\ \doxymbox{\hyperlink{structgko_1_1experimental_1_1mpi_1_1type__impl}{type\_impl<SendType>::get\_type}}(),}
\DoxyCodeLine{01082\ \ \ \ \ \ \ \ \ \ \ \ \ recv\_buffer,\ recv\_count,\ \doxymbox{\hyperlink{structgko_1_1experimental_1_1mpi_1_1type__impl}{type\_impl<RecvType>::get\_type}}(),}
\DoxyCodeLine{01083\ \ \ \ \ \ \ \ \ \ \ \ \ this-\/>\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_aa0a3dec1701cb81754c56e940185f98d}{get}}()));}
\DoxyCodeLine{01084\ \ \ \ \ \}}
\DoxyCodeLine{01085\ }
\DoxyCodeLine{01104\ \ \ \ \ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ SendType,\ \textcolor{keyword}{typename}\ RecvType>}
\DoxyCodeLine{01105\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1request}{request}}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_ab72560fb614cb0d16cd5c52048e98360}{i\_all\_gather}}(std::shared\_ptr<const\ Executor>\ exec,}
\DoxyCodeLine{01106\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ SendType*\ send\_buffer,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{int}\ send\_count,}
\DoxyCodeLine{01107\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ RecvType*\ recv\_buffer,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{int}\ recv\_count)\textcolor{keyword}{\ const}}
\DoxyCodeLine{01108\ \textcolor{keyword}{\ \ \ \ }\{}
\DoxyCodeLine{01109\ \ \ \ \ \ \ \ \ \textcolor{keyword}{auto}\ guard\ =\ exec-\/>get\_scoped\_device\_id\_guard();}
\DoxyCodeLine{01110\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1request}{request}}\ req;}
\DoxyCodeLine{01111\ \ \ \ \ \ \ \ \ GKO\_ASSERT\_NO\_MPI\_ERRORS(MPI\_Iallgather(}
\DoxyCodeLine{01112\ \ \ \ \ \ \ \ \ \ \ \ \ send\_buffer,\ send\_count,\ \doxymbox{\hyperlink{structgko_1_1experimental_1_1mpi_1_1type__impl}{type\_impl<SendType>::get\_type}}(),}
\DoxyCodeLine{01113\ \ \ \ \ \ \ \ \ \ \ \ \ recv\_buffer,\ recv\_count,\ \doxymbox{\hyperlink{structgko_1_1experimental_1_1mpi_1_1type__impl}{type\_impl<RecvType>::get\_type}}(),}
\DoxyCodeLine{01114\ \ \ \ \ \ \ \ \ \ \ \ \ this-\/>\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_aa0a3dec1701cb81754c56e940185f98d}{get}}(),\ req.\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1request_a9b4b79bdb828944badb7f342511b245b}{get}}()));}
\DoxyCodeLine{01115\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ req;}
\DoxyCodeLine{01116\ \ \ \ \ \}}
\DoxyCodeLine{01117\ }
\DoxyCodeLine{01133\ \ \ \ \ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ SendType,\ \textcolor{keyword}{typename}\ RecvType>}
\DoxyCodeLine{01134\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_a549c09b09f1be70198cf5ee0338e5385}{scatter}}(std::shared\_ptr<const\ Executor>\ exec,}
\DoxyCodeLine{01135\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ SendType*\ send\_buffer,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{int}\ send\_count,}
\DoxyCodeLine{01136\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ RecvType*\ recv\_buffer,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{int}\ recv\_count,}
\DoxyCodeLine{01137\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{int}\ root\_rank)\textcolor{keyword}{\ const}}
\DoxyCodeLine{01138\ \textcolor{keyword}{\ \ \ \ }\{}
\DoxyCodeLine{01139\ \ \ \ \ \ \ \ \ \textcolor{keyword}{auto}\ guard\ =\ exec-\/>get\_scoped\_device\_id\_guard();}
\DoxyCodeLine{01140\ \ \ \ \ \ \ \ \ GKO\_ASSERT\_NO\_MPI\_ERRORS(MPI\_Scatter(}
\DoxyCodeLine{01141\ \ \ \ \ \ \ \ \ \ \ \ \ send\_buffer,\ send\_count,\ \doxymbox{\hyperlink{structgko_1_1experimental_1_1mpi_1_1type__impl}{type\_impl<SendType>::get\_type}}(),}
\DoxyCodeLine{01142\ \ \ \ \ \ \ \ \ \ \ \ \ recv\_buffer,\ recv\_count,\ \doxymbox{\hyperlink{structgko_1_1experimental_1_1mpi_1_1type__impl}{type\_impl<RecvType>::get\_type}}(),\ root\_rank,}
\DoxyCodeLine{01143\ \ \ \ \ \ \ \ \ \ \ \ \ this-\/>\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_aa0a3dec1701cb81754c56e940185f98d}{get}}()));}
\DoxyCodeLine{01144\ \ \ \ \ \}}
\DoxyCodeLine{01145\ }
\DoxyCodeLine{01164\ \ \ \ \ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ SendType,\ \textcolor{keyword}{typename}\ RecvType>}
\DoxyCodeLine{01165\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1request}{request}}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_af0b769c1f173f9808503fd76ea980c73}{i\_scatter}}(std::shared\_ptr<const\ Executor>\ exec,}
\DoxyCodeLine{01166\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ SendType*\ send\_buffer,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{int}\ send\_count,}
\DoxyCodeLine{01167\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ RecvType*\ recv\_buffer,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{int}\ recv\_count,}
\DoxyCodeLine{01168\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{int}\ root\_rank)\textcolor{keyword}{\ const}}
\DoxyCodeLine{01169\ \textcolor{keyword}{\ \ \ \ }\{}
\DoxyCodeLine{01170\ \ \ \ \ \ \ \ \ \textcolor{keyword}{auto}\ guard\ =\ exec-\/>get\_scoped\_device\_id\_guard();}
\DoxyCodeLine{01171\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1request}{request}}\ req;}
\DoxyCodeLine{01172\ \ \ \ \ \ \ \ \ GKO\_ASSERT\_NO\_MPI\_ERRORS(MPI\_Iscatter(}
\DoxyCodeLine{01173\ \ \ \ \ \ \ \ \ \ \ \ \ send\_buffer,\ send\_count,\ \doxymbox{\hyperlink{structgko_1_1experimental_1_1mpi_1_1type__impl}{type\_impl<SendType>::get\_type}}(),}
\DoxyCodeLine{01174\ \ \ \ \ \ \ \ \ \ \ \ \ recv\_buffer,\ recv\_count,\ \doxymbox{\hyperlink{structgko_1_1experimental_1_1mpi_1_1type__impl}{type\_impl<RecvType>::get\_type}}(),\ root\_rank,}
\DoxyCodeLine{01175\ \ \ \ \ \ \ \ \ \ \ \ \ this-\/>\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_aa0a3dec1701cb81754c56e940185f98d}{get}}(),\ req.\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1request_a9b4b79bdb828944badb7f342511b245b}{get}}()));}
\DoxyCodeLine{01176\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ req;}
\DoxyCodeLine{01177\ \ \ \ \ \}}
\DoxyCodeLine{01178\ }
\DoxyCodeLine{01197\ \ \ \ \ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ SendType,\ \textcolor{keyword}{typename}\ RecvType>}
\DoxyCodeLine{01198\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_a0b81f45ab0d8424c0c2d0ef63099a712}{scatter\_v}}(std::shared\_ptr<const\ Executor>\ exec,}
\DoxyCodeLine{01199\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ SendType*\ send\_buffer,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{int}*\ send\_counts,}
\DoxyCodeLine{01200\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \textcolor{keywordtype}{int}*\ displacements,\ RecvType*\ recv\_buffer,}
\DoxyCodeLine{01201\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \textcolor{keywordtype}{int}\ recv\_count,\ \textcolor{keywordtype}{int}\ root\_rank)\textcolor{keyword}{\ const}}
\DoxyCodeLine{01202\ \textcolor{keyword}{\ \ \ \ }\{}
\DoxyCodeLine{01203\ \ \ \ \ \ \ \ \ \textcolor{keyword}{auto}\ guard\ =\ exec-\/>get\_scoped\_device\_id\_guard();}
\DoxyCodeLine{01204\ \ \ \ \ \ \ \ \ GKO\_ASSERT\_NO\_MPI\_ERRORS(MPI\_Scatterv(}
\DoxyCodeLine{01205\ \ \ \ \ \ \ \ \ \ \ \ \ send\_buffer,\ send\_counts,\ displacements,}
\DoxyCodeLine{01206\ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{structgko_1_1experimental_1_1mpi_1_1type__impl}{type\_impl<SendType>::get\_type}}(),\ recv\_buffer,\ recv\_count,}
\DoxyCodeLine{01207\ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{structgko_1_1experimental_1_1mpi_1_1type__impl}{type\_impl<RecvType>::get\_type}}(),\ root\_rank,\ this-\/>\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_aa0a3dec1701cb81754c56e940185f98d}{get}}()));}
\DoxyCodeLine{01208\ \ \ \ \ \}}
\DoxyCodeLine{01209\ }
\DoxyCodeLine{01230\ \ \ \ \ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ SendType,\ \textcolor{keyword}{typename}\ RecvType>}
\DoxyCodeLine{01231\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1request}{request}}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_a340726b3a0f1f3ec176ea68dbb4b30fa}{i\_scatter\_v}}(std::shared\_ptr<const\ Executor>\ exec,}
\DoxyCodeLine{01232\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ SendType*\ send\_buffer,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{int}*\ send\_counts,}
\DoxyCodeLine{01233\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \textcolor{keywordtype}{int}*\ displacements,\ RecvType*\ recv\_buffer,}
\DoxyCodeLine{01234\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \textcolor{keywordtype}{int}\ recv\_count,\ \textcolor{keywordtype}{int}\ root\_rank)\textcolor{keyword}{\ const}}
\DoxyCodeLine{01235\ \textcolor{keyword}{\ \ \ \ }\{}
\DoxyCodeLine{01236\ \ \ \ \ \ \ \ \ \textcolor{keyword}{auto}\ guard\ =\ exec-\/>get\_scoped\_device\_id\_guard();}
\DoxyCodeLine{01237\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1request}{request}}\ req;}
\DoxyCodeLine{01238\ \ \ \ \ \ \ \ \ GKO\_ASSERT\_NO\_MPI\_ERRORS(}
\DoxyCodeLine{01239\ \ \ \ \ \ \ \ \ \ \ \ \ MPI\_Iscatterv(send\_buffer,\ send\_counts,\ displacements,}
\DoxyCodeLine{01240\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{structgko_1_1experimental_1_1mpi_1_1type__impl}{type\_impl<SendType>::get\_type}}(),\ recv\_buffer,}
\DoxyCodeLine{01241\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ recv\_count,\ \doxymbox{\hyperlink{structgko_1_1experimental_1_1mpi_1_1type__impl}{type\_impl<RecvType>::get\_type}}(),}
\DoxyCodeLine{01242\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ root\_rank,\ this-\/>\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_aa0a3dec1701cb81754c56e940185f98d}{get}}(),\ req.\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1request_a9b4b79bdb828944badb7f342511b245b}{get}}()));}
\DoxyCodeLine{01243\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ req;}
\DoxyCodeLine{01244\ \ \ \ \ \}}
\DoxyCodeLine{01245\ }
\DoxyCodeLine{01262\ \ \ \ \ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ RecvType>}
\DoxyCodeLine{01263\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_a7a85018805835dcabae0134a5b62b383}{all\_to\_all}}(std::shared\_ptr<const\ Executor>\ exec,\ RecvType*\ recv\_buffer,}
\DoxyCodeLine{01264\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \textcolor{keywordtype}{int}\ recv\_count)\textcolor{keyword}{\ const}}
\DoxyCodeLine{01265\ \textcolor{keyword}{\ \ \ \ }\{}
\DoxyCodeLine{01266\ \ \ \ \ \ \ \ \ \textcolor{keyword}{auto}\ guard\ =\ exec-\/>get\_scoped\_device\_id\_guard();}
\DoxyCodeLine{01267\ \ \ \ \ \ \ \ \ GKO\_ASSERT\_NO\_MPI\_ERRORS(MPI\_Alltoall(}
\DoxyCodeLine{01268\ \ \ \ \ \ \ \ \ \ \ \ \ MPI\_IN\_PLACE,\ recv\_count,\ \doxymbox{\hyperlink{structgko_1_1experimental_1_1mpi_1_1type__impl}{type\_impl<RecvType>::get\_type}}(),}
\DoxyCodeLine{01269\ \ \ \ \ \ \ \ \ \ \ \ \ recv\_buffer,\ recv\_count,\ \doxymbox{\hyperlink{structgko_1_1experimental_1_1mpi_1_1type__impl}{type\_impl<RecvType>::get\_type}}(),}
\DoxyCodeLine{01270\ \ \ \ \ \ \ \ \ \ \ \ \ this-\/>\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_aa0a3dec1701cb81754c56e940185f98d}{get}}()));}
\DoxyCodeLine{01271\ \ \ \ \ \}}
\DoxyCodeLine{01272\ }
\DoxyCodeLine{01291\ \ \ \ \ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ RecvType>}
\DoxyCodeLine{01292\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1request}{request}}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_a7e1b0265baa6fd66a820451f8469d360}{i\_all\_to\_all}}(std::shared\_ptr<const\ Executor>\ exec,}
\DoxyCodeLine{01293\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ RecvType*\ recv\_buffer,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{int}\ recv\_count)\textcolor{keyword}{\ const}}
\DoxyCodeLine{01294\ \textcolor{keyword}{\ \ \ \ }\{}
\DoxyCodeLine{01295\ \ \ \ \ \ \ \ \ \textcolor{keyword}{auto}\ guard\ =\ exec-\/>get\_scoped\_device\_id\_guard();}
\DoxyCodeLine{01296\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1request}{request}}\ req;}
\DoxyCodeLine{01297\ \ \ \ \ \ \ \ \ GKO\_ASSERT\_NO\_MPI\_ERRORS(MPI\_Ialltoall(}
\DoxyCodeLine{01298\ \ \ \ \ \ \ \ \ \ \ \ \ MPI\_IN\_PLACE,\ recv\_count,\ \doxymbox{\hyperlink{structgko_1_1experimental_1_1mpi_1_1type__impl}{type\_impl<RecvType>::get\_type}}(),}
\DoxyCodeLine{01299\ \ \ \ \ \ \ \ \ \ \ \ \ recv\_buffer,\ recv\_count,\ \doxymbox{\hyperlink{structgko_1_1experimental_1_1mpi_1_1type__impl}{type\_impl<RecvType>::get\_type}}(),}
\DoxyCodeLine{01300\ \ \ \ \ \ \ \ \ \ \ \ \ this-\/>\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_aa0a3dec1701cb81754c56e940185f98d}{get}}(),\ req.\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1request_a9b4b79bdb828944badb7f342511b245b}{get}}()));}
\DoxyCodeLine{01301\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ req;}
\DoxyCodeLine{01302\ \ \ \ \ \}}
\DoxyCodeLine{01303\ }
\DoxyCodeLine{01320\ \ \ \ \ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ SendType,\ \textcolor{keyword}{typename}\ RecvType>}
\DoxyCodeLine{01321\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_a3426126179bbe79a8cf232450ac3eb69}{all\_to\_all}}(std::shared\_ptr<const\ Executor>\ exec,}
\DoxyCodeLine{01322\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ SendType*\ send\_buffer,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{int}\ send\_count,}
\DoxyCodeLine{01323\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ RecvType*\ recv\_buffer,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{int}\ recv\_count)\textcolor{keyword}{\ const}}
\DoxyCodeLine{01324\ \textcolor{keyword}{\ \ \ \ }\{}
\DoxyCodeLine{01325\ \ \ \ \ \ \ \ \ \textcolor{keyword}{auto}\ guard\ =\ exec-\/>get\_scoped\_device\_id\_guard();}
\DoxyCodeLine{01326\ \ \ \ \ \ \ \ \ GKO\_ASSERT\_NO\_MPI\_ERRORS(MPI\_Alltoall(}
\DoxyCodeLine{01327\ \ \ \ \ \ \ \ \ \ \ \ \ send\_buffer,\ send\_count,\ \doxymbox{\hyperlink{structgko_1_1experimental_1_1mpi_1_1type__impl}{type\_impl<SendType>::get\_type}}(),}
\DoxyCodeLine{01328\ \ \ \ \ \ \ \ \ \ \ \ \ recv\_buffer,\ recv\_count,\ \doxymbox{\hyperlink{structgko_1_1experimental_1_1mpi_1_1type__impl}{type\_impl<RecvType>::get\_type}}(),}
\DoxyCodeLine{01329\ \ \ \ \ \ \ \ \ \ \ \ \ this-\/>\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_aa0a3dec1701cb81754c56e940185f98d}{get}}()));}
\DoxyCodeLine{01330\ \ \ \ \ \}}
\DoxyCodeLine{01331\ }
\DoxyCodeLine{01350\ \ \ \ \ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ SendType,\ \textcolor{keyword}{typename}\ RecvType>}
\DoxyCodeLine{01351\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1request}{request}}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_a3dd5f4399b6f740663abfd606a24bf08}{i\_all\_to\_all}}(std::shared\_ptr<const\ Executor>\ exec,}
\DoxyCodeLine{01352\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ SendType*\ send\_buffer,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{int}\ send\_count,}
\DoxyCodeLine{01353\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ RecvType*\ recv\_buffer,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{int}\ recv\_count)\textcolor{keyword}{\ const}}
\DoxyCodeLine{01354\ \textcolor{keyword}{\ \ \ \ }\{}
\DoxyCodeLine{01355\ \ \ \ \ \ \ \ \ \textcolor{keyword}{auto}\ guard\ =\ exec-\/>get\_scoped\_device\_id\_guard();}
\DoxyCodeLine{01356\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1request}{request}}\ req;}
\DoxyCodeLine{01357\ \ \ \ \ \ \ \ \ GKO\_ASSERT\_NO\_MPI\_ERRORS(MPI\_Ialltoall(}
\DoxyCodeLine{01358\ \ \ \ \ \ \ \ \ \ \ \ \ send\_buffer,\ send\_count,\ \doxymbox{\hyperlink{structgko_1_1experimental_1_1mpi_1_1type__impl}{type\_impl<SendType>::get\_type}}(),}
\DoxyCodeLine{01359\ \ \ \ \ \ \ \ \ \ \ \ \ recv\_buffer,\ recv\_count,\ \doxymbox{\hyperlink{structgko_1_1experimental_1_1mpi_1_1type__impl}{type\_impl<RecvType>::get\_type}}(),}
\DoxyCodeLine{01360\ \ \ \ \ \ \ \ \ \ \ \ \ this-\/>\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_aa0a3dec1701cb81754c56e940185f98d}{get}}(),\ req.\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1request_a9b4b79bdb828944badb7f342511b245b}{get}}()));}
\DoxyCodeLine{01361\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ req;}
\DoxyCodeLine{01362\ \ \ \ \ \}}
\DoxyCodeLine{01363\ }
\DoxyCodeLine{01383\ \ \ \ \ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ SendType,\ \textcolor{keyword}{typename}\ RecvType>}
\DoxyCodeLine{01384\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_a7a8dd09064ac399c87ca0cc5083f0053}{all\_to\_all\_v}}(std::shared\_ptr<const\ Executor>\ exec,}
\DoxyCodeLine{01385\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ SendType*\ send\_buffer,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{int}*\ send\_counts,}
\DoxyCodeLine{01386\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \textcolor{keywordtype}{int}*\ send\_offsets,\ RecvType*\ recv\_buffer,}
\DoxyCodeLine{01387\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \textcolor{keywordtype}{int}*\ recv\_counts,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{int}*\ recv\_offsets)\textcolor{keyword}{\ const}}
\DoxyCodeLine{01388\ \textcolor{keyword}{\ \ \ \ }\{}
\DoxyCodeLine{01389\ \ \ \ \ \ \ \ \ this-\/>\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_a7a8dd09064ac399c87ca0cc5083f0053}{all\_to\_all\_v}}(std::move(exec),\ send\_buffer,\ send\_counts,}
\DoxyCodeLine{01390\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ send\_offsets,\ \doxymbox{\hyperlink{structgko_1_1experimental_1_1mpi_1_1type__impl}{type\_impl<SendType>::get\_type}}(),}
\DoxyCodeLine{01391\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ recv\_buffer,\ recv\_counts,\ recv\_offsets,}
\DoxyCodeLine{01392\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{structgko_1_1experimental_1_1mpi_1_1type__impl}{type\_impl<RecvType>::get\_type}}());}
\DoxyCodeLine{01393\ \ \ \ \ \}}
\DoxyCodeLine{01394\ }
\DoxyCodeLine{01410\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_a895acb8b91819bc3837ce2517db29911}{all\_to\_all\_v}}(std::shared\_ptr<const\ Executor>\ exec,}
\DoxyCodeLine{01411\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \textcolor{keywordtype}{void}*\ send\_buffer,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{int}*\ send\_counts,}
\DoxyCodeLine{01412\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \textcolor{keywordtype}{int}*\ send\_offsets,\ MPI\_Datatype\ send\_type,}
\DoxyCodeLine{01413\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{void}*\ recv\_buffer,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{int}*\ recv\_counts,}
\DoxyCodeLine{01414\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \textcolor{keywordtype}{int}*\ recv\_offsets,\ MPI\_Datatype\ recv\_type)\textcolor{keyword}{\ const}}
\DoxyCodeLine{01415\ \textcolor{keyword}{\ \ \ \ }\{}
\DoxyCodeLine{01416\ \ \ \ \ \ \ \ \ \textcolor{keyword}{auto}\ guard\ =\ exec-\/>get\_scoped\_device\_id\_guard();}
\DoxyCodeLine{01417\ \ \ \ \ \ \ \ \ GKO\_ASSERT\_NO\_MPI\_ERRORS(MPI\_Alltoallv(}
\DoxyCodeLine{01418\ \ \ \ \ \ \ \ \ \ \ \ \ send\_buffer,\ send\_counts,\ send\_offsets,\ send\_type,\ recv\_buffer,}
\DoxyCodeLine{01419\ \ \ \ \ \ \ \ \ \ \ \ \ recv\_counts,\ recv\_offsets,\ recv\_type,\ this-\/>\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_aa0a3dec1701cb81754c56e940185f98d}{get}}()));}
\DoxyCodeLine{01420\ \ \ \ \ \}}
\DoxyCodeLine{01421\ }
\DoxyCodeLine{01441\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1request}{request}}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_a4096892bc72d3302bf6fcb3e8362744c}{i\_all\_to\_all\_v}}(std::shared\_ptr<const\ Executor>\ exec,}
\DoxyCodeLine{01442\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \textcolor{keywordtype}{void}*\ send\_buffer,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{int}*\ send\_counts,}
\DoxyCodeLine{01443\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \textcolor{keywordtype}{int}*\ send\_offsets,\ MPI\_Datatype\ send\_type,}
\DoxyCodeLine{01444\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{void}*\ recv\_buffer,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{int}*\ recv\_counts,}
\DoxyCodeLine{01445\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \textcolor{keywordtype}{int}*\ recv\_offsets,}
\DoxyCodeLine{01446\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ MPI\_Datatype\ recv\_type)\textcolor{keyword}{\ const}}
\DoxyCodeLine{01447\ \textcolor{keyword}{\ \ \ \ }\{}
\DoxyCodeLine{01448\ \ \ \ \ \ \ \ \ \textcolor{keyword}{auto}\ guard\ =\ exec-\/>get\_scoped\_device\_id\_guard();}
\DoxyCodeLine{01449\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1request}{request}}\ req;}
\DoxyCodeLine{01450\ \ \ \ \ \ \ \ \ GKO\_ASSERT\_NO\_MPI\_ERRORS(MPI\_Ialltoallv(}
\DoxyCodeLine{01451\ \ \ \ \ \ \ \ \ \ \ \ \ send\_buffer,\ send\_counts,\ send\_offsets,\ send\_type,\ recv\_buffer,}
\DoxyCodeLine{01452\ \ \ \ \ \ \ \ \ \ \ \ \ recv\_counts,\ recv\_offsets,\ recv\_type,\ this-\/>\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_aa0a3dec1701cb81754c56e940185f98d}{get}}(),\ req.\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1request_a9b4b79bdb828944badb7f342511b245b}{get}}()));}
\DoxyCodeLine{01453\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ req;}
\DoxyCodeLine{01454\ \ \ \ \ \}}
\DoxyCodeLine{01455\ }
\DoxyCodeLine{01476\ \ \ \ \ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ SendType,\ \textcolor{keyword}{typename}\ RecvType>}
\DoxyCodeLine{01477\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1request}{request}}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_a6480de7acdb9c7e000970e0ec2324201}{i\_all\_to\_all\_v}}(std::shared\_ptr<const\ Executor>\ exec,}
\DoxyCodeLine{01478\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ SendType*\ send\_buffer,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{int}*\ send\_counts,}
\DoxyCodeLine{01479\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \textcolor{keywordtype}{int}*\ send\_offsets,\ RecvType*\ recv\_buffer,}
\DoxyCodeLine{01480\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \textcolor{keywordtype}{int}*\ recv\_counts,}
\DoxyCodeLine{01481\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \textcolor{keywordtype}{int}*\ recv\_offsets)\textcolor{keyword}{\ const}}
\DoxyCodeLine{01482\ \textcolor{keyword}{\ \ \ \ }\{}
\DoxyCodeLine{01483\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ this-\/>\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_a4096892bc72d3302bf6fcb3e8362744c}{i\_all\_to\_all\_v}}(}
\DoxyCodeLine{01484\ \ \ \ \ \ \ \ \ \ \ \ \ std::move(exec),\ send\_buffer,\ send\_counts,\ send\_offsets,}
\DoxyCodeLine{01485\ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{structgko_1_1experimental_1_1mpi_1_1type__impl}{type\_impl<SendType>::get\_type}}(),\ recv\_buffer,\ recv\_counts,}
\DoxyCodeLine{01486\ \ \ \ \ \ \ \ \ \ \ \ \ recv\_offsets,\ \doxymbox{\hyperlink{structgko_1_1experimental_1_1mpi_1_1type__impl}{type\_impl<RecvType>::get\_type}}());}
\DoxyCodeLine{01487\ \ \ \ \ \}}
\DoxyCodeLine{01488\ }
\DoxyCodeLine{01503\ \ \ \ \ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ ScanType>}
\DoxyCodeLine{01504\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_af21d97797e9e468c84d80d6f4bdf6b49}{scan}}(std::shared\_ptr<const\ Executor>\ exec,\ \textcolor{keyword}{const}\ ScanType*\ send\_buffer,}
\DoxyCodeLine{01505\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ScanType*\ recv\_buffer,\ \textcolor{keywordtype}{int}\ count,\ MPI\_Op\ operation)\textcolor{keyword}{\ const}}
\DoxyCodeLine{01506\ \textcolor{keyword}{\ \ \ \ }\{}
\DoxyCodeLine{01507\ \ \ \ \ \ \ \ \ \textcolor{keyword}{auto}\ guard\ =\ exec-\/>get\_scoped\_device\_id\_guard();}
\DoxyCodeLine{01508\ \ \ \ \ \ \ \ \ GKO\_ASSERT\_NO\_MPI\_ERRORS(MPI\_Scan(send\_buffer,\ recv\_buffer,\ count,}
\DoxyCodeLine{01509\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{structgko_1_1experimental_1_1mpi_1_1type__impl}{type\_impl<ScanType>::get\_type}}(),}
\DoxyCodeLine{01510\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ operation,\ this-\/>\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_aa0a3dec1701cb81754c56e940185f98d}{get}}()));}
\DoxyCodeLine{01511\ \ \ \ \ \}}
\DoxyCodeLine{01512\ }
\DoxyCodeLine{01529\ \ \ \ \ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ ScanType>}
\DoxyCodeLine{01530\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1request}{request}}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_ad7b0f3302cff2314ade8d3fd9468eb0c}{i\_scan}}(std::shared\_ptr<const\ Executor>\ exec,}
\DoxyCodeLine{01531\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ ScanType*\ send\_buffer,\ ScanType*\ recv\_buffer,}
\DoxyCodeLine{01532\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{int}\ count,\ MPI\_Op\ operation)\textcolor{keyword}{\ const}}
\DoxyCodeLine{01533\ \textcolor{keyword}{\ \ \ \ }\{}
\DoxyCodeLine{01534\ \ \ \ \ \ \ \ \ \textcolor{keyword}{auto}\ guard\ =\ exec-\/>get\_scoped\_device\_id\_guard();}
\DoxyCodeLine{01535\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1request}{request}}\ req;}
\DoxyCodeLine{01536\ \ \ \ \ \ \ \ \ GKO\_ASSERT\_NO\_MPI\_ERRORS(MPI\_Iscan(send\_buffer,\ recv\_buffer,\ count,}
\DoxyCodeLine{01537\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{structgko_1_1experimental_1_1mpi_1_1type__impl}{type\_impl<ScanType>::get\_type}}(),}
\DoxyCodeLine{01538\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ operation,\ this-\/>\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_aa0a3dec1701cb81754c56e940185f98d}{get}}(),\ req.\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1request_a9b4b79bdb828944badb7f342511b245b}{get}}()));}
\DoxyCodeLine{01539\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ req;}
\DoxyCodeLine{01540\ \ \ \ \ \}}
\DoxyCodeLine{01541\ }
\DoxyCodeLine{01542\ \textcolor{keyword}{private}:}
\DoxyCodeLine{01543\ \ \ \ \ std::shared\_ptr<MPI\_Comm>\ comm\_;}
\DoxyCodeLine{01544\ \ \ \ \ \textcolor{keywordtype}{bool}\ force\_host\_buffer\_;}
\DoxyCodeLine{01545\ }
\DoxyCodeLine{01546\ \ \ \ \ \textcolor{keywordtype}{int}\ get\_my\_rank()\textcolor{keyword}{\ const}}
\DoxyCodeLine{01547\ \textcolor{keyword}{\ \ \ \ }\{}
\DoxyCodeLine{01548\ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{int}\ my\_rank\ =\ 0;}
\DoxyCodeLine{01549\ \ \ \ \ \ \ \ \ GKO\_ASSERT\_NO\_MPI\_ERRORS(MPI\_Comm\_rank(\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_aa0a3dec1701cb81754c56e940185f98d}{get}}(),\ \&my\_rank));}
\DoxyCodeLine{01550\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ my\_rank;}
\DoxyCodeLine{01551\ \ \ \ \ \}}
\DoxyCodeLine{01552\ }
\DoxyCodeLine{01553\ \ \ \ \ \textcolor{keywordtype}{int}\ get\_node\_local\_rank()\textcolor{keyword}{\ const}}
\DoxyCodeLine{01554\ \textcolor{keyword}{\ \ \ \ }\{}
\DoxyCodeLine{01555\ \ \ \ \ \ \ \ \ MPI\_Comm\ local\_comm;}
\DoxyCodeLine{01556\ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{int}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_a58c4515edcb0dee79b2be1eb40333a61}{rank}};}
\DoxyCodeLine{01557\ \ \ \ \ \ \ \ \ GKO\_ASSERT\_NO\_MPI\_ERRORS(MPI\_Comm\_split\_type(}
\DoxyCodeLine{01558\ \ \ \ \ \ \ \ \ \ \ \ \ this-\/>\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_aa0a3dec1701cb81754c56e940185f98d}{get}}(),\ MPI\_COMM\_TYPE\_SHARED,\ 0,\ MPI\_INFO\_NULL,\ \&local\_comm));}
\DoxyCodeLine{01559\ \ \ \ \ \ \ \ \ GKO\_ASSERT\_NO\_MPI\_ERRORS(MPI\_Comm\_rank(local\_comm,\ \&\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_a58c4515edcb0dee79b2be1eb40333a61}{rank}}));}
\DoxyCodeLine{01560\ \ \ \ \ \ \ \ \ MPI\_Comm\_free(\&local\_comm);}
\DoxyCodeLine{01561\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_a58c4515edcb0dee79b2be1eb40333a61}{rank}};}
\DoxyCodeLine{01562\ \ \ \ \ \}}
\DoxyCodeLine{01563\ }
\DoxyCodeLine{01564\ \ \ \ \ \textcolor{keywordtype}{int}\ get\_num\_ranks()\textcolor{keyword}{\ const}}
\DoxyCodeLine{01565\ \textcolor{keyword}{\ \ \ \ }\{}
\DoxyCodeLine{01566\ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{int}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_a5f62780446fdfe15346b5248d8c3e41d}{size}}\ =\ 1;}
\DoxyCodeLine{01567\ \ \ \ \ \ \ \ \ GKO\_ASSERT\_NO\_MPI\_ERRORS(MPI\_Comm\_size(this-\/>\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_aa0a3dec1701cb81754c56e940185f98d}{get}}(),\ \&size));}
\DoxyCodeLine{01568\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_a5f62780446fdfe15346b5248d8c3e41d}{size}};}
\DoxyCodeLine{01569\ \ \ \ \ \}}
\DoxyCodeLine{01570\ \};}
\DoxyCodeLine{01571\ }
\DoxyCodeLine{01572\ }
\DoxyCodeLine{01577\ \textcolor{keywordtype}{bool}\ \doxymbox{\hyperlink{namespacegko_1_1experimental_1_1mpi_a379e508c71176773a3f2331cd7975c03}{requires\_host\_buffer}}(\textcolor{keyword}{const}\ std::shared\_ptr<const\ Executor>\&\ exec,}
\DoxyCodeLine{01578\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator}{communicator}}\&\ comm);}
\DoxyCodeLine{01579\ }
\DoxyCodeLine{01580\ }
\DoxyCodeLine{01586\ \textcolor{keyword}{inline}\ \textcolor{keywordtype}{double}\ \doxymbox{\hyperlink{namespacegko_1_1experimental_1_1mpi_a508f97387781bb32dd2c7616dee1a786}{get\_walltime}}()\ \{\ \textcolor{keywordflow}{return}\ MPI\_Wtime();\ \}}
\DoxyCodeLine{01587\ }
\DoxyCodeLine{01588\ }
\DoxyCodeLine{01597\ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ ValueType>}
\DoxyCodeLine{01598\ \textcolor{keyword}{class\ }\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1window_a0d8b46cb4e781ef71bccbbfb4a9407fe}{window}}\ \{}
\DoxyCodeLine{01599\ \textcolor{keyword}{public}:}
\DoxyCodeLine{01603\ \ \ \ \ \textcolor{keyword}{enum\ class}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1window_a979711ce7fb3e661658656c49ffc9d31}{create\_type}}\ \{\ allocate\ =\ 1,\ create\ =\ 2,\ dynamic\_create\ =\ 3\ \};}
\DoxyCodeLine{01604\ }
\DoxyCodeLine{01608\ \ \ \ \ \textcolor{keyword}{enum\ class}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1window_a35fce5e05e221ce18372e1f2609f9953}{lock\_type}}\ \{\ shared\ =\ 1,\ exclusive\ =\ 2\ \};}
\DoxyCodeLine{01609\ }
\DoxyCodeLine{01613\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1window_a0d8b46cb4e781ef71bccbbfb4a9407fe}{window}}()\ :\ window\_(MPI\_WIN\_NULL)\ \{\}}
\DoxyCodeLine{01614\ }
\DoxyCodeLine{01615\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1window_a0d8b46cb4e781ef71bccbbfb4a9407fe}{window}}(\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1window}{window}}\&\ other)\ =\ \textcolor{keyword}{delete};}
\DoxyCodeLine{01616\ }
\DoxyCodeLine{01617\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1window}{window}}\&\ operator=(\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1window}{window}}\&\ other)\ =\ \textcolor{keyword}{delete};}
\DoxyCodeLine{01618\ }
\DoxyCodeLine{01625\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1window_ae4fca6434fa04ac9b8e9071bfc8cfe70}{window}}(\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1window_a0d8b46cb4e781ef71bccbbfb4a9407fe}{window}}\&\&\ other)\ :\ window\_\{\doxymbox{\hyperlink{namespacestd}{std}}::exchange(other.window\_,\ MPI\_WIN\_NULL)\}}
\DoxyCodeLine{01626\ \ \ \ \ \{\}}
\DoxyCodeLine{01627\ }
\DoxyCodeLine{01634\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1window_a0d8b46cb4e781ef71bccbbfb4a9407fe}{window}}\&\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1window_a3e1f9e30923a62c66ee08ccee3ebc39d}{operator=}}(\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1window_a0d8b46cb4e781ef71bccbbfb4a9407fe}{window}}\&\&\ other)}
\DoxyCodeLine{01635\ \ \ \ \ \{}
\DoxyCodeLine{01636\ \ \ \ \ \ \ \ \ window\_\ =\ std::exchange(other.window\_,\ MPI\_WIN\_NULL);}
\DoxyCodeLine{01637\ \ \ \ \ \}}
\DoxyCodeLine{01638\ }
\DoxyCodeLine{01651\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1window_aa4604e5b67e90562628e9c3811383195}{window}}(std::shared\_ptr<const\ Executor>\ exec,\ ValueType*\ base,\ \textcolor{keywordtype}{int}\ num\_elems,}
\DoxyCodeLine{01652\ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator}{communicator}}\&\ comm,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{int}\ disp\_unit\ =\ \textcolor{keyword}{sizeof}(ValueType),}
\DoxyCodeLine{01653\ \ \ \ \ \ \ \ \ \ \ \ MPI\_Info\ input\_info\ =\ MPI\_INFO\_NULL,}
\DoxyCodeLine{01654\ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1window_a979711ce7fb3e661658656c49ffc9d31}{create\_type}}\ c\_type\ =\ create\_type::create)}
\DoxyCodeLine{01655\ \ \ \ \ \{}
\DoxyCodeLine{01656\ \ \ \ \ \ \ \ \ \textcolor{keyword}{auto}\ guard\ =\ exec-\/>get\_scoped\_device\_id\_guard();}
\DoxyCodeLine{01657\ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{unsigned}\ size\ =\ num\_elems\ *\ \textcolor{keyword}{sizeof}(ValueType);}
\DoxyCodeLine{01658\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (c\_type\ ==\ create\_type::create)\ \{}
\DoxyCodeLine{01659\ \ \ \ \ \ \ \ \ \ \ \ \ GKO\_ASSERT\_NO\_MPI\_ERRORS(MPI\_Win\_create(}
\DoxyCodeLine{01660\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ base,\ size,\ disp\_unit,\ input\_info,\ comm.\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_aa0a3dec1701cb81754c56e940185f98d}{get}}(),\ \&this-\/>window\_));}
\DoxyCodeLine{01661\ \ \ \ \ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \textcolor{keywordflow}{if}\ (c\_type\ ==\ create\_type::dynamic\_create)\ \{}
\DoxyCodeLine{01662\ \ \ \ \ \ \ \ \ \ \ \ \ GKO\_ASSERT\_NO\_MPI\_ERRORS(}
\DoxyCodeLine{01663\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ MPI\_Win\_create\_dynamic(input\_info,\ comm.\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_aa0a3dec1701cb81754c56e940185f98d}{get}}(),\ \&this-\/>window\_));}
\DoxyCodeLine{01664\ \ \ \ \ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \textcolor{keywordflow}{if}\ (c\_type\ ==\ create\_type::allocate)\ \{}
\DoxyCodeLine{01665\ \ \ \ \ \ \ \ \ \ \ \ \ GKO\_ASSERT\_NO\_MPI\_ERRORS(MPI\_Win\_allocate(}
\DoxyCodeLine{01666\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ size,\ disp\_unit,\ input\_info,\ comm.\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator_aa0a3dec1701cb81754c56e940185f98d}{get}}(),\ base,\ \&this-\/>window\_));}
\DoxyCodeLine{01667\ \ \ \ \ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \{}
\DoxyCodeLine{01668\ \ \ \ \ \ \ \ \ \ \ \ \ GKO\_NOT\_IMPLEMENTED;}
\DoxyCodeLine{01669\ \ \ \ \ \ \ \ \ \}}
\DoxyCodeLine{01670\ \ \ \ \ \}}
\DoxyCodeLine{01671\ }
\DoxyCodeLine{01677\ \ \ \ \ MPI\_Win\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1window_aefdede74f361e099145647ac6b8e8de6}{get\_window}}()\textcolor{keyword}{\ const\ }\{\ \textcolor{keywordflow}{return}\ this-\/>window\_;\ \}}
\DoxyCodeLine{01678\ }
\DoxyCodeLine{01685\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1window_a8a1150c9844fbff78f31ea32af6cf002}{fence}}(\textcolor{keywordtype}{int}\ assert\ =\ 0)\textcolor{keyword}{\ const}}
\DoxyCodeLine{01686\ \textcolor{keyword}{\ \ \ \ }\{}
\DoxyCodeLine{01687\ \ \ \ \ \ \ \ \ GKO\_ASSERT\_NO\_MPI\_ERRORS(MPI\_Win\_fence(assert,\ this-\/>window\_));}
\DoxyCodeLine{01688\ \ \ \ \ \}}
\DoxyCodeLine{01689\ }
\DoxyCodeLine{01698\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1window_acd2dca005043cf3a0ad8088b136eb4d7}{lock}}(\textcolor{keywordtype}{int}\ rank,\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1window_a35fce5e05e221ce18372e1f2609f9953}{lock\_type}}\ lock\_t\ =\ lock\_type::shared,}
\DoxyCodeLine{01699\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{int}\ assert\ =\ 0)\textcolor{keyword}{\ const}}
\DoxyCodeLine{01700\ \textcolor{keyword}{\ \ \ \ }\{}
\DoxyCodeLine{01701\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (lock\_t\ ==\ lock\_type::shared)\ \{}
\DoxyCodeLine{01702\ \ \ \ \ \ \ \ \ \ \ \ \ GKO\_ASSERT\_NO\_MPI\_ERRORS(}
\DoxyCodeLine{01703\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ MPI\_Win\_lock(MPI\_LOCK\_SHARED,\ rank,\ assert,\ this-\/>window\_));}
\DoxyCodeLine{01704\ \ \ \ \ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \textcolor{keywordflow}{if}\ (lock\_t\ ==\ lock\_type::exclusive)\ \{}
\DoxyCodeLine{01705\ \ \ \ \ \ \ \ \ \ \ \ \ GKO\_ASSERT\_NO\_MPI\_ERRORS(}
\DoxyCodeLine{01706\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ MPI\_Win\_lock(MPI\_LOCK\_EXCLUSIVE,\ rank,\ assert,\ this-\/>window\_));}
\DoxyCodeLine{01707\ \ \ \ \ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \{}
\DoxyCodeLine{01708\ \ \ \ \ \ \ \ \ \ \ \ \ GKO\_NOT\_IMPLEMENTED;}
\DoxyCodeLine{01709\ \ \ \ \ \ \ \ \ \}}
\DoxyCodeLine{01710\ \ \ \ \ \}}
\DoxyCodeLine{01711\ }
\DoxyCodeLine{01718\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1window_a8007809ea63aa789c2e3eae7b512e683}{unlock}}(\textcolor{keywordtype}{int}\ rank)\textcolor{keyword}{\ const}}
\DoxyCodeLine{01719\ \textcolor{keyword}{\ \ \ \ }\{}
\DoxyCodeLine{01720\ \ \ \ \ \ \ \ \ GKO\_ASSERT\_NO\_MPI\_ERRORS(MPI\_Win\_unlock(rank,\ this-\/>window\_));}
\DoxyCodeLine{01721\ \ \ \ \ \}}
\DoxyCodeLine{01722\ }
\DoxyCodeLine{01729\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1window_ab6fbd4976d277371670122a783bd6fbc}{lock\_all}}(\textcolor{keywordtype}{int}\ assert\ =\ 0)\textcolor{keyword}{\ const}}
\DoxyCodeLine{01730\ \textcolor{keyword}{\ \ \ \ }\{}
\DoxyCodeLine{01731\ \ \ \ \ \ \ \ \ GKO\_ASSERT\_NO\_MPI\_ERRORS(MPI\_Win\_lock\_all(assert,\ this-\/>window\_));}
\DoxyCodeLine{01732\ \ \ \ \ \}}
\DoxyCodeLine{01733\ }
\DoxyCodeLine{01738\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1window_a8d34b976309b2958d973d1d68acf627d}{unlock\_all}}()\textcolor{keyword}{\ const}}
\DoxyCodeLine{01739\ \textcolor{keyword}{\ \ \ \ }\{}
\DoxyCodeLine{01740\ \ \ \ \ \ \ \ \ GKO\_ASSERT\_NO\_MPI\_ERRORS(MPI\_Win\_unlock\_all(this-\/>window\_));}
\DoxyCodeLine{01741\ \ \ \ \ \}}
\DoxyCodeLine{01742\ }
\DoxyCodeLine{01749\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1window_a8a7e4f90d1d0c933106ba31a4ddf06a9}{flush}}(\textcolor{keywordtype}{int}\ rank)\textcolor{keyword}{\ const}}
\DoxyCodeLine{01750\ \textcolor{keyword}{\ \ \ \ }\{}
\DoxyCodeLine{01751\ \ \ \ \ \ \ \ \ GKO\_ASSERT\_NO\_MPI\_ERRORS(MPI\_Win\_flush(rank,\ this-\/>window\_));}
\DoxyCodeLine{01752\ \ \ \ \ \}}
\DoxyCodeLine{01753\ }
\DoxyCodeLine{01760\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1window_ae960cc6dc72e33ec6df62e3901e53d48}{flush\_local}}(\textcolor{keywordtype}{int}\ rank)\textcolor{keyword}{\ const}}
\DoxyCodeLine{01761\ \textcolor{keyword}{\ \ \ \ }\{}
\DoxyCodeLine{01762\ \ \ \ \ \ \ \ \ GKO\_ASSERT\_NO\_MPI\_ERRORS(MPI\_Win\_flush\_local(rank,\ this-\/>window\_));}
\DoxyCodeLine{01763\ \ \ \ \ \}}
\DoxyCodeLine{01764\ }
\DoxyCodeLine{01769\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1window_afac84b451109b1bfc77456a541bab07a}{flush\_all}}()\textcolor{keyword}{\ const}}
\DoxyCodeLine{01770\ \textcolor{keyword}{\ \ \ \ }\{}
\DoxyCodeLine{01771\ \ \ \ \ \ \ \ \ GKO\_ASSERT\_NO\_MPI\_ERRORS(MPI\_Win\_flush\_all(this-\/>window\_));}
\DoxyCodeLine{01772\ \ \ \ \ \}}
\DoxyCodeLine{01773\ }
\DoxyCodeLine{01778\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1window_ad6fcfdb4026058ef960b412cb7844016}{flush\_all\_local}}()\textcolor{keyword}{\ const}}
\DoxyCodeLine{01779\ \textcolor{keyword}{\ \ \ \ }\{}
\DoxyCodeLine{01780\ \ \ \ \ \ \ \ \ GKO\_ASSERT\_NO\_MPI\_ERRORS(MPI\_Win\_flush\_local\_all(this-\/>window\_));}
\DoxyCodeLine{01781\ \ \ \ \ \}}
\DoxyCodeLine{01782\ }
\DoxyCodeLine{01786\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1window_a748e6787b1c3071216bb3310a73416d9}{sync}}()\textcolor{keyword}{\ const\ }\{\ GKO\_ASSERT\_NO\_MPI\_ERRORS(MPI\_Win\_sync(this-\/>window\_));\ \}}
\DoxyCodeLine{01787\ }
\DoxyCodeLine{01791\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1window_a1f4a86eb7b1289e7580a92191f4ed2fe}{\string~window}}()}
\DoxyCodeLine{01792\ \ \ \ \ \{}
\DoxyCodeLine{01793\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (this-\/>window\_\ \&\&\ this-\/>window\_\ !=\ MPI\_WIN\_NULL)\ \{}
\DoxyCodeLine{01794\ \ \ \ \ \ \ \ \ \ \ \ \ MPI\_Win\_free(\&this-\/>window\_);}
\DoxyCodeLine{01795\ \ \ \ \ \ \ \ \ \}}
\DoxyCodeLine{01796\ \ \ \ \ \}}
\DoxyCodeLine{01797\ }
\DoxyCodeLine{01808\ \ \ \ \ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ PutType>}
\DoxyCodeLine{01809\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1window_a151c85c9dbd58b15377edcf0702efe5d}{put}}(std::shared\_ptr<const\ Executor>\ exec,\ \textcolor{keyword}{const}\ PutType*\ origin\_buffer,}
\DoxyCodeLine{01810\ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \textcolor{keywordtype}{int}\ origin\_count,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{int}\ target\_rank,}
\DoxyCodeLine{01811\ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \textcolor{keywordtype}{unsigned}\ \textcolor{keywordtype}{int}\ target\_disp,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{int}\ target\_count)\textcolor{keyword}{\ const}}
\DoxyCodeLine{01812\ \textcolor{keyword}{\ \ \ \ }\{}
\DoxyCodeLine{01813\ \ \ \ \ \ \ \ \ \textcolor{keyword}{auto}\ guard\ =\ exec-\/>get\_scoped\_device\_id\_guard();}
\DoxyCodeLine{01814\ \ \ \ \ \ \ \ \ GKO\_ASSERT\_NO\_MPI\_ERRORS(}
\DoxyCodeLine{01815\ \ \ \ \ \ \ \ \ \ \ \ \ MPI\_Put(origin\_buffer,\ origin\_count,\ \doxymbox{\hyperlink{structgko_1_1experimental_1_1mpi_1_1type__impl}{type\_impl<PutType>::get\_type}}(),}
\DoxyCodeLine{01816\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ target\_rank,\ target\_disp,\ target\_count,}
\DoxyCodeLine{01817\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{structgko_1_1experimental_1_1mpi_1_1type__impl}{type\_impl<PutType>::get\_type}}(),\ this-\/>\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1window_aefdede74f361e099145647ac6b8e8de6}{get\_window}}()));}
\DoxyCodeLine{01818\ \ \ \ \ \}}
\DoxyCodeLine{01819\ }
\DoxyCodeLine{01832\ \ \ \ \ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ PutType>}
\DoxyCodeLine{01833\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1request}{request}}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1window_a08ddae163fc1c34b9456bab96a5f1107}{r\_put}}(std::shared\_ptr<const\ Executor>\ exec,}
\DoxyCodeLine{01834\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ PutType*\ origin\_buffer,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{int}\ origin\_count,}
\DoxyCodeLine{01835\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \textcolor{keywordtype}{int}\ target\_rank,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{unsigned}\ \textcolor{keywordtype}{int}\ target\_disp,}
\DoxyCodeLine{01836\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \textcolor{keywordtype}{int}\ target\_count)\textcolor{keyword}{\ const}}
\DoxyCodeLine{01837\ \textcolor{keyword}{\ \ \ \ }\{}
\DoxyCodeLine{01838\ \ \ \ \ \ \ \ \ \textcolor{keyword}{auto}\ guard\ =\ exec-\/>get\_scoped\_device\_id\_guard();}
\DoxyCodeLine{01839\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1request}{request}}\ req;}
\DoxyCodeLine{01840\ \ \ \ \ \ \ \ \ GKO\_ASSERT\_NO\_MPI\_ERRORS(MPI\_Rput(}
\DoxyCodeLine{01841\ \ \ \ \ \ \ \ \ \ \ \ \ origin\_buffer,\ origin\_count,\ \doxymbox{\hyperlink{structgko_1_1experimental_1_1mpi_1_1type__impl}{type\_impl<PutType>::get\_type}}(),}
\DoxyCodeLine{01842\ \ \ \ \ \ \ \ \ \ \ \ \ target\_rank,\ target\_disp,\ target\_count,}
\DoxyCodeLine{01843\ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{structgko_1_1experimental_1_1mpi_1_1type__impl}{type\_impl<PutType>::get\_type}}(),\ this-\/>\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1window_aefdede74f361e099145647ac6b8e8de6}{get\_window}}(),\ req.\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1request_a9b4b79bdb828944badb7f342511b245b}{get}}()));}
\DoxyCodeLine{01844\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ req;}
\DoxyCodeLine{01845\ \ \ \ \ \}}
\DoxyCodeLine{01846\ }
\DoxyCodeLine{01858\ \ \ \ \ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ PutType>}
\DoxyCodeLine{01859\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1window_aa8f681ccf38e74fad75017aa0bf50f81}{accumulate}}(std::shared\_ptr<const\ Executor>\ exec,}
\DoxyCodeLine{01860\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ PutType*\ origin\_buffer,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{int}\ origin\_count,}
\DoxyCodeLine{01861\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \textcolor{keywordtype}{int}\ target\_rank,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{unsigned}\ \textcolor{keywordtype}{int}\ target\_disp,}
\DoxyCodeLine{01862\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \textcolor{keywordtype}{int}\ target\_count,\ MPI\_Op\ operation)\textcolor{keyword}{\ const}}
\DoxyCodeLine{01863\ \textcolor{keyword}{\ \ \ \ }\{}
\DoxyCodeLine{01864\ \ \ \ \ \ \ \ \ \textcolor{keyword}{auto}\ guard\ =\ exec-\/>get\_scoped\_device\_id\_guard();}
\DoxyCodeLine{01865\ \ \ \ \ \ \ \ \ GKO\_ASSERT\_NO\_MPI\_ERRORS(MPI\_Accumulate(}
\DoxyCodeLine{01866\ \ \ \ \ \ \ \ \ \ \ \ \ origin\_buffer,\ origin\_count,\ \doxymbox{\hyperlink{structgko_1_1experimental_1_1mpi_1_1type__impl}{type\_impl<PutType>::get\_type}}(),}
\DoxyCodeLine{01867\ \ \ \ \ \ \ \ \ \ \ \ \ target\_rank,\ target\_disp,\ target\_count,}
\DoxyCodeLine{01868\ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{structgko_1_1experimental_1_1mpi_1_1type__impl}{type\_impl<PutType>::get\_type}}(),\ operation,\ this-\/>\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1window_aefdede74f361e099145647ac6b8e8de6}{get\_window}}()));}
\DoxyCodeLine{01869\ \ \ \ \ \}}
\DoxyCodeLine{01870\ }
\DoxyCodeLine{01884\ \ \ \ \ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ PutType>}
\DoxyCodeLine{01885\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1request}{request}}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1window_a4fc76b03f10fe40c84c4b5d123f453b9}{r\_accumulate}}(std::shared\_ptr<const\ Executor>\ exec,}
\DoxyCodeLine{01886\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ PutType*\ origin\_buffer,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{int}\ origin\_count,}
\DoxyCodeLine{01887\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \textcolor{keywordtype}{int}\ target\_rank,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{unsigned}\ \textcolor{keywordtype}{int}\ target\_disp,}
\DoxyCodeLine{01888\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \textcolor{keywordtype}{int}\ target\_count,\ MPI\_Op\ operation)\textcolor{keyword}{\ const}}
\DoxyCodeLine{01889\ \textcolor{keyword}{\ \ \ \ }\{}
\DoxyCodeLine{01890\ \ \ \ \ \ \ \ \ \textcolor{keyword}{auto}\ guard\ =\ exec-\/>get\_scoped\_device\_id\_guard();}
\DoxyCodeLine{01891\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1request}{request}}\ req;}
\DoxyCodeLine{01892\ \ \ \ \ \ \ \ \ GKO\_ASSERT\_NO\_MPI\_ERRORS(MPI\_Raccumulate(}
\DoxyCodeLine{01893\ \ \ \ \ \ \ \ \ \ \ \ \ origin\_buffer,\ origin\_count,\ \doxymbox{\hyperlink{structgko_1_1experimental_1_1mpi_1_1type__impl}{type\_impl<PutType>::get\_type}}(),}
\DoxyCodeLine{01894\ \ \ \ \ \ \ \ \ \ \ \ \ target\_rank,\ target\_disp,\ target\_count,}
\DoxyCodeLine{01895\ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{structgko_1_1experimental_1_1mpi_1_1type__impl}{type\_impl<PutType>::get\_type}}(),\ operation,\ this-\/>\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1window_aefdede74f361e099145647ac6b8e8de6}{get\_window}}(),}
\DoxyCodeLine{01896\ \ \ \ \ \ \ \ \ \ \ \ \ req.\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1request_a9b4b79bdb828944badb7f342511b245b}{get}}()));}
\DoxyCodeLine{01897\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ req;}
\DoxyCodeLine{01898\ \ \ \ \ \}}
\DoxyCodeLine{01899\ }
\DoxyCodeLine{01910\ \ \ \ \ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ GetType>}
\DoxyCodeLine{01911\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1window_a020a03ef7d6329e75732fe5bfa6f9d75}{get}}(std::shared\_ptr<const\ Executor>\ exec,\ GetType*\ origin\_buffer,}
\DoxyCodeLine{01912\ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \textcolor{keywordtype}{int}\ origin\_count,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{int}\ target\_rank,}
\DoxyCodeLine{01913\ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \textcolor{keywordtype}{unsigned}\ \textcolor{keywordtype}{int}\ target\_disp,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{int}\ target\_count)\textcolor{keyword}{\ const}}
\DoxyCodeLine{01914\ \textcolor{keyword}{\ \ \ \ }\{}
\DoxyCodeLine{01915\ \ \ \ \ \ \ \ \ \textcolor{keyword}{auto}\ guard\ =\ exec-\/>get\_scoped\_device\_id\_guard();}
\DoxyCodeLine{01916\ \ \ \ \ \ \ \ \ GKO\_ASSERT\_NO\_MPI\_ERRORS(}
\DoxyCodeLine{01917\ \ \ \ \ \ \ \ \ \ \ \ \ MPI\_Get(origin\_buffer,\ origin\_count,\ \doxymbox{\hyperlink{structgko_1_1experimental_1_1mpi_1_1type__impl}{type\_impl<GetType>::get\_type}}(),}
\DoxyCodeLine{01918\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ target\_rank,\ target\_disp,\ target\_count,}
\DoxyCodeLine{01919\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{structgko_1_1experimental_1_1mpi_1_1type__impl}{type\_impl<GetType>::get\_type}}(),\ this-\/>\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1window_aefdede74f361e099145647ac6b8e8de6}{get\_window}}()));}
\DoxyCodeLine{01920\ \ \ \ \ \}}
\DoxyCodeLine{01921\ }
\DoxyCodeLine{01934\ \ \ \ \ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ GetType>}
\DoxyCodeLine{01935\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1request}{request}}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1window_af611adbe29e925ef5448ead49bde179e}{r\_get}}(std::shared\_ptr<const\ Executor>\ exec,\ GetType*\ origin\_buffer,}
\DoxyCodeLine{01936\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \textcolor{keywordtype}{int}\ origin\_count,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{int}\ target\_rank,}
\DoxyCodeLine{01937\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \textcolor{keywordtype}{unsigned}\ \textcolor{keywordtype}{int}\ target\_disp,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{int}\ target\_count)\textcolor{keyword}{\ const}}
\DoxyCodeLine{01938\ \textcolor{keyword}{\ \ \ \ }\{}
\DoxyCodeLine{01939\ \ \ \ \ \ \ \ \ \textcolor{keyword}{auto}\ guard\ =\ exec-\/>get\_scoped\_device\_id\_guard();}
\DoxyCodeLine{01940\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1request}{request}}\ req;}
\DoxyCodeLine{01941\ \ \ \ \ \ \ \ \ GKO\_ASSERT\_NO\_MPI\_ERRORS(MPI\_Rget(}
\DoxyCodeLine{01942\ \ \ \ \ \ \ \ \ \ \ \ \ origin\_buffer,\ origin\_count,\ \doxymbox{\hyperlink{structgko_1_1experimental_1_1mpi_1_1type__impl}{type\_impl<GetType>::get\_type}}(),}
\DoxyCodeLine{01943\ \ \ \ \ \ \ \ \ \ \ \ \ target\_rank,\ target\_disp,\ target\_count,}
\DoxyCodeLine{01944\ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{structgko_1_1experimental_1_1mpi_1_1type__impl}{type\_impl<GetType>::get\_type}}(),\ this-\/>\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1window_aefdede74f361e099145647ac6b8e8de6}{get\_window}}(),\ req.\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1request_a9b4b79bdb828944badb7f342511b245b}{get}}()));}
\DoxyCodeLine{01945\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ req;}
\DoxyCodeLine{01946\ \ \ \ \ \}}
\DoxyCodeLine{01947\ }
\DoxyCodeLine{01961\ \ \ \ \ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ GetType>}
\DoxyCodeLine{01962\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1window_a0f103e5469537256f4dac5bf0e9c18ac}{get\_accumulate}}(std::shared\_ptr<const\ Executor>\ exec,}
\DoxyCodeLine{01963\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ GetType*\ origin\_buffer,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{int}\ origin\_count,}
\DoxyCodeLine{01964\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ GetType*\ result\_buffer,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{int}\ result\_count,}
\DoxyCodeLine{01965\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \textcolor{keywordtype}{int}\ target\_rank,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{unsigned}\ \textcolor{keywordtype}{int}\ target\_disp,}
\DoxyCodeLine{01966\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \textcolor{keywordtype}{int}\ target\_count,\ MPI\_Op\ operation)\textcolor{keyword}{\ const}}
\DoxyCodeLine{01967\ \textcolor{keyword}{\ \ \ \ }\{}
\DoxyCodeLine{01968\ \ \ \ \ \ \ \ \ \textcolor{keyword}{auto}\ guard\ =\ exec-\/>get\_scoped\_device\_id\_guard();}
\DoxyCodeLine{01969\ \ \ \ \ \ \ \ \ GKO\_ASSERT\_NO\_MPI\_ERRORS(MPI\_Get\_accumulate(}
\DoxyCodeLine{01970\ \ \ \ \ \ \ \ \ \ \ \ \ origin\_buffer,\ origin\_count,\ \doxymbox{\hyperlink{structgko_1_1experimental_1_1mpi_1_1type__impl}{type\_impl<GetType>::get\_type}}(),}
\DoxyCodeLine{01971\ \ \ \ \ \ \ \ \ \ \ \ \ result\_buffer,\ result\_count,\ \doxymbox{\hyperlink{structgko_1_1experimental_1_1mpi_1_1type__impl}{type\_impl<GetType>::get\_type}}(),}
\DoxyCodeLine{01972\ \ \ \ \ \ \ \ \ \ \ \ \ target\_rank,\ target\_disp,\ target\_count,}
\DoxyCodeLine{01973\ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{structgko_1_1experimental_1_1mpi_1_1type__impl}{type\_impl<GetType>::get\_type}}(),\ operation,\ this-\/>\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1window_aefdede74f361e099145647ac6b8e8de6}{get\_window}}()));}
\DoxyCodeLine{01974\ \ \ \ \ \}}
\DoxyCodeLine{01975\ }
\DoxyCodeLine{01991\ \ \ \ \ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ GetType>}
\DoxyCodeLine{01992\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1request}{request}}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1window_a69842676f3a38849160857138ce0b745}{r\_get\_accumulate}}(std::shared\_ptr<const\ Executor>\ exec,}
\DoxyCodeLine{01993\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ GetType*\ origin\_buffer,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{int}\ origin\_count,}
\DoxyCodeLine{01994\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ GetType*\ result\_buffer,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{int}\ result\_count,}
\DoxyCodeLine{01995\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \textcolor{keywordtype}{int}\ target\_rank,}
\DoxyCodeLine{01996\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \textcolor{keywordtype}{unsigned}\ \textcolor{keywordtype}{int}\ target\_disp,}
\DoxyCodeLine{01997\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \textcolor{keywordtype}{int}\ target\_count,\ MPI\_Op\ operation)\textcolor{keyword}{\ const}}
\DoxyCodeLine{01998\ \textcolor{keyword}{\ \ \ \ }\{}
\DoxyCodeLine{01999\ \ \ \ \ \ \ \ \ \textcolor{keyword}{auto}\ guard\ =\ exec-\/>get\_scoped\_device\_id\_guard();}
\DoxyCodeLine{02000\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1request}{request}}\ req;}
\DoxyCodeLine{02001\ \ \ \ \ \ \ \ \ GKO\_ASSERT\_NO\_MPI\_ERRORS(MPI\_Rget\_accumulate(}
\DoxyCodeLine{02002\ \ \ \ \ \ \ \ \ \ \ \ \ origin\_buffer,\ origin\_count,\ \doxymbox{\hyperlink{structgko_1_1experimental_1_1mpi_1_1type__impl}{type\_impl<GetType>::get\_type}}(),}
\DoxyCodeLine{02003\ \ \ \ \ \ \ \ \ \ \ \ \ result\_buffer,\ result\_count,\ \doxymbox{\hyperlink{structgko_1_1experimental_1_1mpi_1_1type__impl}{type\_impl<GetType>::get\_type}}(),}
\DoxyCodeLine{02004\ \ \ \ \ \ \ \ \ \ \ \ \ target\_rank,\ target\_disp,\ target\_count,}
\DoxyCodeLine{02005\ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{structgko_1_1experimental_1_1mpi_1_1type__impl}{type\_impl<GetType>::get\_type}}(),\ operation,\ this-\/>\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1window_aefdede74f361e099145647ac6b8e8de6}{get\_window}}(),}
\DoxyCodeLine{02006\ \ \ \ \ \ \ \ \ \ \ \ \ req.\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1request_a9b4b79bdb828944badb7f342511b245b}{get}}()));}
\DoxyCodeLine{02007\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ req;}
\DoxyCodeLine{02008\ \ \ \ \ \}}
\DoxyCodeLine{02009\ }
\DoxyCodeLine{02020\ \ \ \ \ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ GetType>}
\DoxyCodeLine{02021\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1window_a6a63489f00fe21d3007a49b32f0618dd}{fetch\_and\_op}}(std::shared\_ptr<const\ Executor>\ exec,}
\DoxyCodeLine{02022\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ GetType*\ origin\_buffer,\ GetType*\ result\_buffer,}
\DoxyCodeLine{02023\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \textcolor{keywordtype}{int}\ target\_rank,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{unsigned}\ \textcolor{keywordtype}{int}\ target\_disp,}
\DoxyCodeLine{02024\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ MPI\_Op\ operation)\textcolor{keyword}{\ const}}
\DoxyCodeLine{02025\ \textcolor{keyword}{\ \ \ \ }\{}
\DoxyCodeLine{02026\ \ \ \ \ \ \ \ \ \textcolor{keyword}{auto}\ guard\ =\ exec-\/>get\_scoped\_device\_id\_guard();}
\DoxyCodeLine{02027\ \ \ \ \ \ \ \ \ GKO\_ASSERT\_NO\_MPI\_ERRORS(MPI\_Fetch\_and\_op(}
\DoxyCodeLine{02028\ \ \ \ \ \ \ \ \ \ \ \ \ origin\_buffer,\ result\_buffer,\ \doxymbox{\hyperlink{structgko_1_1experimental_1_1mpi_1_1type__impl}{type\_impl<GetType>::get\_type}}(),}
\DoxyCodeLine{02029\ \ \ \ \ \ \ \ \ \ \ \ \ target\_rank,\ target\_disp,\ operation,\ this-\/>\doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1window_aefdede74f361e099145647ac6b8e8de6}{get\_window}}()));}
\DoxyCodeLine{02030\ \ \ \ \ \}}
\DoxyCodeLine{02031\ }
\DoxyCodeLine{02032\ \textcolor{keyword}{private}:}
\DoxyCodeLine{02033\ \ \ \ \ MPI\_Win\ window\_;}
\DoxyCodeLine{02034\ \};}
\DoxyCodeLine{02035\ }
\DoxyCodeLine{02036\ }
\DoxyCodeLine{02037\ \}\ \ \textcolor{comment}{//\ namespace\ mpi}}
\DoxyCodeLine{02038\ \}\ \ \textcolor{comment}{//\ namespace\ experimental}}
\DoxyCodeLine{02039\ \}\ \ \textcolor{comment}{//\ namespace\ gko}}
\DoxyCodeLine{02040\ }
\DoxyCodeLine{02041\ }
\DoxyCodeLine{02042\ \textcolor{preprocessor}{\#endif\ \ }\textcolor{comment}{//\ GKO\_HAVE\_MPI}}
\DoxyCodeLine{02043\ }
\DoxyCodeLine{02044\ }
\DoxyCodeLine{02045\ \textcolor{preprocessor}{\#endif\ \ }\textcolor{comment}{//\ GKO\_PUBLIC\_CORE\_BASE\_MPI\_HPP\_}}

\end{DoxyCode}
