\doxysection{gko::\+Executor Class Reference}
\hypertarget{classgko_1_1Executor}{}\label{classgko_1_1Executor}\index{gko::Executor@{gko::Executor}}


The first step in using the Ginkgo library consists of creating an executor.  




{\ttfamily \+\#include $<$ginkgo/\+core/\+base/\+executor.\+hpp$>$}



Inheritance diagram for gko::\+Executor:\+
\nopagebreak
\begin{figure}[H]
\begin{center}
\leavevmode
\includegraphics[width=350pt]{classgko_1_1Executor__inherit__graph}
\end{center}
\end{figure}


Collaboration diagram for gko::\+Executor:\+
\nopagebreak
\begin{figure}[H]
\begin{center}
\leavevmode
\includegraphics[width=316pt]{classgko_1_1Executor__coll__graph}
\end{center}
\end{figure}
\doxysubsubsection*{Public Member Functions}
\begin{DoxyCompactItemize}
\item 
\Hypertarget{classgko_1_1Executor_a4d564aa4d197e1cd8a563b611d3ea8dc}\label{classgko_1_1Executor_a4d564aa4d197e1cd8a563b611d3ea8dc} 
{\bfseries Executor} (Executor \&)=delete
\item 
\Hypertarget{classgko_1_1Executor_ad9770f8bb4b67e9d9e7eb32a62253061}\label{classgko_1_1Executor_ad9770f8bb4b67e9d9e7eb32a62253061} 
{\bfseries Executor} (Executor \&\&)=delete
\item 
\Hypertarget{classgko_1_1Executor_a2412266f4289d2d425c401b0f944da05}\label{classgko_1_1Executor_a2412266f4289d2d425c401b0f944da05} 
Executor \& {\bfseries operator=} (Executor \&)=delete
\item 
\Hypertarget{classgko_1_1Executor_a69afc4a8eb228cd4d412ae8f4b7d0e27}\label{classgko_1_1Executor_a69afc4a8eb228cd4d412ae8f4b7d0e27} 
Executor \& {\bfseries operator=} (Executor \&\&)=delete
\item 
virtual void \doxymbox{\hyperlink{classgko_1_1Executor_a1de8e2668b76e66690acf5eef9e8324d}{run}} (const \doxymbox{\hyperlink{classgko_1_1Operation}{Operation}} \&op) const =0
\begin{DoxyCompactList}\small\item\em Runs the specified \doxylink{classgko_1_1Operation}{Operation} using this \doxylink{classgko_1_1Executor}{Executor}. \end{DoxyCompactList}\item 
{\footnotesize template$<$typename Closure\+Omp, typename Closure\+Cuda, typename Closure\+Hip, typename Closure\+Dpcpp$>$ }\\void \doxymbox{\hyperlink{classgko_1_1Executor_a294787f033b02fd013af087d02a4ae1b}{run}} (const Closure\+Omp \&op\+\_\+omp, const Closure\+Cuda \&op\+\_\+cuda, const Closure\+Hip \&op\+\_\+hip, const Closure\+Dpcpp \&op\+\_\+dpcpp) const
\begin{DoxyCompactList}\small\item\em Runs one of the passed in functors, depending on the \doxylink{classgko_1_1Executor}{Executor} type. \end{DoxyCompactList}\item 
{\footnotesize template$<$typename Closure\+Reference, typename Closure\+Omp, typename Closure\+Cuda, typename Closure\+Hip, typename Closure\+Dpcpp$>$ }\\void \doxymbox{\hyperlink{classgko_1_1Executor_abe906f109824da54447e504ff88aa97f}{run}} (std::\+string name, const Closure\+Reference \&op\+\_\+ref, const Closure\+Omp \&op\+\_\+omp, const Closure\+Cuda \&op\+\_\+cuda, const Closure\+Hip \&op\+\_\+hip, const Closure\+Dpcpp \&op\+\_\+dpcpp) const
\begin{DoxyCompactList}\small\item\em Runs one of the passed in functors, depending on the \doxylink{classgko_1_1Executor}{Executor} type. \end{DoxyCompactList}\item 
{\footnotesize template$<$typename T$>$ }\\T \texorpdfstring{$\ast$}{*} \doxymbox{\hyperlink{classgko_1_1Executor_a99e1d008646298b06ce10979253de1ec}{alloc}} (\doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type}} num\+\_\+elems) const
\begin{DoxyCompactList}\small\item\em Allocates memory in this \doxylink{classgko_1_1Executor}{Executor}. \end{DoxyCompactList}\item 
void \doxymbox{\hyperlink{classgko_1_1Executor_a0befe43d21c93e199d1620eaae4ccc0c}{free}} (void \texorpdfstring{$\ast$}{*}ptr) const noexcept
\begin{DoxyCompactList}\small\item\em Frees memory previously allocated with \doxylink{classgko_1_1Executor_a99e1d008646298b06ce10979253de1ec}{Executor::\+alloc()}. \end{DoxyCompactList}\item 
{\footnotesize template$<$typename T$>$ }\\void \doxymbox{\hyperlink{classgko_1_1Executor_a8050a118e6ac312a768ec56d3d3aae20}{copy\+\_\+from}} (\doxymbox{\hyperlink{classgko_1_1ptr__param}{ptr\+\_\+param}}$<$ const Executor $>$ src\+\_\+exec, \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type}} num\+\_\+elems, const T \texorpdfstring{$\ast$}{*}src\+\_\+ptr, T \texorpdfstring{$\ast$}{*}dest\+\_\+ptr) const
\begin{DoxyCompactList}\small\item\em Copies data from another \doxylink{classgko_1_1Executor}{Executor}. \end{DoxyCompactList}\item 
{\footnotesize template$<$typename T$>$ }\\void \doxymbox{\hyperlink{classgko_1_1Executor_a45377b6ee4c1d1852ec299ce2133eabb}{copy}} (\doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type}} num\+\_\+elems, const T \texorpdfstring{$\ast$}{*}src\+\_\+ptr, T \texorpdfstring{$\ast$}{*}dest\+\_\+ptr) const
\begin{DoxyCompactList}\small\item\em Copies data within this \doxylink{classgko_1_1Executor}{Executor}. \end{DoxyCompactList}\item 
{\footnotesize template$<$typename T$>$ }\\T \doxymbox{\hyperlink{classgko_1_1Executor_ab5ee27c7997a4e109831e27c42242073}{copy\+\_\+val\+\_\+to\+\_\+host}} (const T \texorpdfstring{$\ast$}{*}ptr) const
\begin{DoxyCompactList}\small\item\em Retrieves a single element at the given location from executor memory. \end{DoxyCompactList}\item 
virtual std::\+shared\+\_\+ptr$<$ Executor $>$ \doxymbox{\hyperlink{classgko_1_1Executor_aa23172c7579fe4a9a41af8eba62ed54f}{get\+\_\+master}} () noexcept=0
\begin{DoxyCompactList}\small\item\em Returns the master \doxylink{classgko_1_1OmpExecutor}{Omp\+Executor} of this \doxylink{classgko_1_1Executor}{Executor}. \end{DoxyCompactList}\item 
virtual std::\+shared\+\_\+ptr$<$ const Executor $>$ \doxymbox{\hyperlink{classgko_1_1Executor_a30d5407c37711d49184914026d815708}{get\+\_\+master}} () const noexcept=0
\begin{DoxyCompactList}\small\item\em Returns the master \doxylink{classgko_1_1OmpExecutor}{Omp\+Executor} of this \doxylink{classgko_1_1Executor}{Executor}.    \end{DoxyCompactList}\item 
virtual void \doxymbox{\hyperlink{classgko_1_1Executor_a24eeee7648c0f0fd07c9866d07154875}{synchronize}} () const =0
\begin{DoxyCompactList}\small\item\em Synchronize the operations launched on the executor with its master. \end{DoxyCompactList}\item 
void \doxymbox{\hyperlink{classgko_1_1Executor_a520dad04b7e74f285ab0956873a5413d}{add\+\_\+logger}} (std::\+shared\+\_\+ptr$<$ const \doxymbox{\hyperlink{classgko_1_1log_1_1Logger}{log::\+\+Logger}} $>$ logger) override
\item 
void \doxymbox{\hyperlink{classgko_1_1Executor_af04cdc1a9af6c8efc34ddebb9e7aaf00}{remove\+\_\+logger}} (const \doxymbox{\hyperlink{classgko_1_1log_1_1Logger}{log::\+\+Logger}} \texorpdfstring{$\ast$}{*}logger) override
\item 
void \doxymbox{\hyperlink{classgko_1_1Executor_a8801d54a4ac842def0b88d643b37b1db}{set\+\_\+log\+\_\+propagation\+\_\+mode}} (\doxymbox{\hyperlink{namespacegko_aa2543f42cbbe1a9373dc46d04c112bee}{log\+\_\+propagation\+\_\+mode}} mode)
\begin{DoxyCompactList}\small\item\em Sets the logger event propagation mode for the executor. \end{DoxyCompactList}\item 
bool \doxymbox{\hyperlink{classgko_1_1Executor_a3d59329aa9e2db037f2ebb6748bf4a5b}{should\+\_\+propagate\+\_\+log}} () const
\begin{DoxyCompactList}\small\item\em Returns true iff events occurring at an object created on this executor should be logged at propagating loggers attached to this executor, and there is at least one such propagating logger. \end{DoxyCompactList}\item 
bool \doxymbox{\hyperlink{classgko_1_1Executor_a452d0a9f4ea10ea3c3ba5c820e1e8d10}{memory\+\_\+accessible}} (const std::\+shared\+\_\+ptr$<$ const Executor $>$ \&other) const
\begin{DoxyCompactList}\small\item\em Verifies whether the executors share the same memory. \end{DoxyCompactList}\item 
\Hypertarget{classgko_1_1Executor_aa669b06a924ce594bfc44cbbbfd633b4}\label{classgko_1_1Executor_aa669b06a924ce594bfc44cbbbfd633b4} 
virtual \doxymbox{\hyperlink{classgko_1_1scoped__device__id__guard}{scoped\+\_\+device\+\_\+id\+\_\+guard}} {\bfseries get\+\_\+scoped\+\_\+device\+\_\+id\+\_\+guard} () const =0
\item 
virtual std::\+string \doxymbox{\hyperlink{classgko_1_1Executor_a9b25713dfacc7914b69115f815e616b0}{get\+\_\+description}} () const =0
\end{DoxyCompactItemize}
\doxysubsection*{Public Member Functions inherited from \doxymbox{\hyperlink{classgko_1_1log_1_1EnableLogging}{gko::\+log::\+\+Enable\+Logging$<$ Executor $>$}}}
\begin{DoxyCompactItemize}
\item 
const std::\+vector$<$ std::\+shared\+\_\+ptr$<$ const \doxymbox{\hyperlink{classgko_1_1log_1_1Logger}{Logger}} $>$ $>$ \& \doxymbox{\hyperlink{classgko_1_1log_1_1EnableLogging_a5e1fc384c289926c16b7f2236ec8c0ec}{get\+\_\+loggers}} () const override
\begin{DoxyCompactList}\small\item\em Returns the vector containing all loggers registered at this object. \end{DoxyCompactList}\item 
void \doxymbox{\hyperlink{classgko_1_1log_1_1EnableLogging_a46d9630d014e4bb094b9e4f7b7bdc5ee}{clear\+\_\+loggers}} () override
\begin{DoxyCompactList}\small\item\em Remove all loggers registered at this object. \end{DoxyCompactList}\end{DoxyCompactItemize}
\doxysubsection*{Public Member Functions inherited from \doxymbox{\hyperlink{classgko_1_1log_1_1Loggable}{gko::\+log::\+\+Loggable}}}
\begin{DoxyCompactItemize}
\item 
void {\bfseries remove\+\_\+logger} (\doxymbox{\hyperlink{classgko_1_1ptr__param}{ptr\+\_\+param}}$<$ const \doxymbox{\hyperlink{classgko_1_1log_1_1Logger}{Logger}} $>$ logger)
\end{DoxyCompactItemize}
\doxysubsubsection*{Friends}
\begin{DoxyCompactItemize}
\item 
\Hypertarget{classgko_1_1Executor_aabb3902118beb0d94cd4e8030bd8042c}\label{classgko_1_1Executor_aabb3902118beb0d94cd4e8030bd8042c} 
class {\bfseries Omp\+Executor}
\item 
\Hypertarget{classgko_1_1Executor_a4caa2db4f412c4f22c15efb8de9d8f3b}\label{classgko_1_1Executor_a4caa2db4f412c4f22c15efb8de9d8f3b} 
class {\bfseries Hip\+Executor}
\item 
\Hypertarget{classgko_1_1Executor_ad6c80d748fef0a49fcd31a99a9ec76f4}\label{classgko_1_1Executor_ad6c80d748fef0a49fcd31a99a9ec76f4} 
class {\bfseries Dpcpp\+Executor}
\item 
\Hypertarget{classgko_1_1Executor_af53d80448c39cdc65a153620c091ac47}\label{classgko_1_1Executor_af53d80448c39cdc65a153620c091ac47} 
class {\bfseries Cuda\+Executor}
\item 
\Hypertarget{classgko_1_1Executor_ac39bda29402254ea95c0a5d72f628351}\label{classgko_1_1Executor_ac39bda29402254ea95c0a5d72f628351} 
class {\bfseries Reference\+Executor}
\end{DoxyCompactItemize}


\doxysubsection{Detailed Description}
The first step in using the Ginkgo library consists of creating an executor. 

Executors are used to specify the location for the data of linear algebra objects, and to determine where the operations will be executed. Ginkgo currently supports five different executor types:\+


\begin{DoxyItemize}
\item \doxylink{classgko_1_1OmpExecutor}{Omp\+Executor} specifies that the data should be stored and the associated operations executed on an Open\+MP-\/supporting device (e.\+g. host CPU);
\item \doxylink{classgko_1_1CudaExecutor}{Cuda\+Executor} specifies that the data should be stored and the operations executed on the NVIDIA GPU accelerator;
\item \doxylink{classgko_1_1HipExecutor}{Hip\+Executor} specifies that the data should be stored and the operations executed on either an NVIDIA or AMD GPU accelerator;
\item \doxylink{classgko_1_1DpcppExecutor}{Dpcpp\+Executor} specifies that the data should be stored and the operations executed on an hardware supporting DPC++;
\item \doxylink{classgko_1_1ReferenceExecutor}{Reference\+Executor} executes a non-\/optimized reference implementation, which can be used to debug the library.
\end{DoxyItemize}

The following code snippet demonstrates the simplest possible use of the Ginkgo library:\+


\begin{DoxyCode}{0}
\DoxyCodeLine{\textcolor{keyword}{auto}\ omp\ =\ gko::create<gko::OmpExecutor>();}
\DoxyCodeLine{\textcolor{keyword}{auto}\ A\ =\ gko::read\_from\_mtx<gko::matrix::Csr<float>>(\textcolor{stringliteral}{"{}A.mtx"{}},\ omp);}

\end{DoxyCode}


First, we create a OMP executor, which will be used in the next line to specify where we want the data for the matrix A to be stored. The second line will read a matrix from the matrix market file \textquotesingle{}A.\+mtx\textquotesingle{}, and store the data on the CPU in CSR format (\doxylink{classgko_1_1matrix_1_1Csr}{gko::\+matrix::\+\+Csr} is a Ginkgo matrix class which stores its data in CSR format). At this point, matrix A is bound to the CPU, and any routines called on it will be performed on the CPU. This approach is usually desired in sparse linear algebra, as the cost of individual operations is several orders of magnitude lower than the cost of copying the matrix to the GPU.

If matrix A is going to be reused multiple times, it could be beneficial to copy it over to the accelerator, and perform the operations there, as demonstrated by the next code snippet:\+


\begin{DoxyCode}{0}
\DoxyCodeLine{\textcolor{keyword}{auto}\ cuda\ =\ gko::create<gko::CudaExecutor>(0,\ omp);}
\DoxyCodeLine{\textcolor{keyword}{auto}\ dA\ =\ gko::copy\_to<gko::matrix::Csr<float>>(A.get(),\ cuda);}

\end{DoxyCode}


The first line of the snippet creates a new CUDA executor. Since there may be multiple NVIDIA GPUs present on the system, the first parameter instructs the library to use the first device (i.\+e. the one with device ID zero, as in cuda\+Set\+Device() routine from the CUDA runtime API). In addition, since GPUs are not stand-\/alone processors, it is required to pass a "{}master"{} \doxylink{classgko_1_1OmpExecutor}{Omp\+Executor} which will be used to schedule the requested CUDA kernels on the accelerator.

The second command creates a copy of the matrix A on the GPU. Notice the use of the get() method. As Ginkgo aims to provide automatic memory management of its objects, the result of calling gko::\+read\+\_\+from\+\_\+mtx() is a smart pointer (std::\+unique\+\_\+ptr) to the created object. On the other hand, as the library will not hold a reference to A once the copy is completed, the input parameter for gko::\+copy\+\_\+to() is a plain pointer. Thus, the get() method is used to convert from a std::\+unique\+\_\+ptr to a plain pointer, as expected by gko::\+copy\+\_\+to().

As a side note, the gko::\+copy\+\_\+to routine is far more powerful than just copying data between different devices. It can also be used to convert data between different formats. For example, if the above code used \doxylink{classgko_1_1matrix_1_1Ell}{gko::\+matrix::\+\+Ell} as the template parameter, dA would be stored on the GPU, in ELLPACK format.

Finally, if all the processing of the matrix is supposed to be done on the GPU, and a CPU copy of the matrix is not required, we could have read the matrix to the GPU directly:\+


\begin{DoxyCode}{0}
\DoxyCodeLine{\textcolor{keyword}{auto}\ omp\ =\ gko::create<gko::OmpExecutor>();}
\DoxyCodeLine{\textcolor{keyword}{auto}\ cuda\ =\ gko::create<gko::CudaExecutor>(0,\ omp);}
\DoxyCodeLine{\textcolor{keyword}{auto}\ dA\ =\ gko::read\_from\_mtx<gko::matrix::Csr<float>>(\textcolor{stringliteral}{"{}A.mtx"{}},\ cuda);}

\end{DoxyCode}
 Notice that even though reading the matrix directly from a file to the accelerator is not supported, the library is designed to abstract away the intermediate step of reading the matrix to the CPU memory. This is a general design approach taken by the library:\+ in case an operation is not supported by the device, the data will be copied to the CPU, the operation performed there, and finally the results copied back to the device. This approach makes using the library more concise, as explicit copies are not required by the user. Nevertheless, this feature should be taken into account when considering performance implications of using such operations. 

\label{doc-func-members}
\Hypertarget{classgko_1_1Executor_doc-func-members}
\doxysubsection{Member Function Documentation}
\Hypertarget{classgko_1_1Executor_a520dad04b7e74f285ab0956873a5413d}\index{gko::Executor@{gko::Executor}!add\_logger@{add\_logger}}
\index{add\_logger@{add\_logger}!gko::Executor@{gko::Executor}}
\doxysubsubsection{\texorpdfstring{add\_logger()}{add\_logger()}}
{\footnotesize\ttfamily \label{classgko_1_1Executor_a520dad04b7e74f285ab0956873a5413d} 
void gko::\+\+Executor::\+add\+\_\+logger (\begin{DoxyParamCaption}\item[{std::\+shared\+\_\+ptr$<$ const \doxymbox{\hyperlink{classgko_1_1log_1_1Logger}{log::\+\+Logger}} $>$}]{logger}{}\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [override]}, {\ttfamily [virtual]}}





\begin{DoxyNote}{Note}
This specialization keeps track of whether any propagating loggers were attached to the executor. 
\end{DoxyNote}
\begin{DoxySeeAlso}{See also}
Logger::\+needs\+\_\+propagation() 
\end{DoxySeeAlso}


Reimplemented from \doxymbox{\hyperlink{classgko_1_1log_1_1EnableLogging_a7b3493c14a37b4d46487d9c636d784f2}{gko::\+log::\+\+Enable\+Logging$<$ Executor $>$}}.



References \doxymbox{\hyperlink{classgko_1_1Executor_a520dad04b7e74f285ab0956873a5413d}{add\+\_\+logger()}}.



Referenced by \doxymbox{\hyperlink{classgko_1_1Executor_a520dad04b7e74f285ab0956873a5413d}{add\+\_\+logger()}}.

\Hypertarget{classgko_1_1Executor_a99e1d008646298b06ce10979253de1ec}\index{gko::Executor@{gko::Executor}!alloc@{alloc}}
\index{alloc@{alloc}!gko::Executor@{gko::Executor}}
\doxysubsubsection{\texorpdfstring{alloc()}{alloc()}}
{\footnotesize\ttfamily \label{classgko_1_1Executor_a99e1d008646298b06ce10979253de1ec} 
template$<$typename T$>$ \\
T \texorpdfstring{$\ast$}{*} gko::\+\+Executor::\+alloc (\begin{DoxyParamCaption}\item[{\doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type}}}]{num\+\_\+elems}{}\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inline]}}



Allocates memory in this \doxylink{classgko_1_1Executor}{Executor}. 


\begin{DoxyTemplParams}{Template Parameters}
{\em T} & datatype to allocate\\
\hline
\end{DoxyTemplParams}

\begin{DoxyParams}{Parameters}
{\em num\+\_\+elems} & number of elements of type T to allocate\\
\hline
\end{DoxyParams}

\begin{DoxyExceptions}{Exceptions}
{\em \doxylink{classgko_1_1AllocationError}{Allocation\+Error}} & if the allocation failed\\
\hline
\end{DoxyExceptions}
\begin{DoxyReturn}{Returns}
pointer to allocated memory 
\end{DoxyReturn}


Referenced by \doxymbox{\hyperlink{classgko_1_1CudaExecutor_a3d456d0aa03be5ca3bef03c4afad4b68}{gko::\+\+Cuda\+Executor::\+create()}}, \doxymbox{\hyperlink{classgko_1_1HipExecutor_a8afc5210bf8dd8aedfceab4b73f0047b}{gko::\+\+Hip\+Executor::\+create()}}, \doxymbox{\hyperlink{classgko_1_1OmpExecutor_af977cb680e0427ca4eb71eb7b1266211}{gko::\+\+Omp\+Executor::\+create()}}, and \doxymbox{\hyperlink{classgko_1_1OmpExecutor_a157fbc623333a1658f8a3915e7b2da2d}{gko::\+\+Omp\+Executor::\+get\+\_\+description()}}.

\Hypertarget{classgko_1_1Executor_a45377b6ee4c1d1852ec299ce2133eabb}\index{gko::Executor@{gko::Executor}!copy@{copy}}
\index{copy@{copy}!gko::Executor@{gko::Executor}}
\doxysubsubsection{\texorpdfstring{copy()}{copy()}}
{\footnotesize\ttfamily \label{classgko_1_1Executor_a45377b6ee4c1d1852ec299ce2133eabb} 
template$<$typename T$>$ \\
void gko::\+\+Executor::\+copy (\begin{DoxyParamCaption}\item[{\doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type}}}]{num\+\_\+elems}{, }\item[{const T \texorpdfstring{$\ast$}{*}}]{src\+\_\+ptr}{, }\item[{T \texorpdfstring{$\ast$}{*}}]{dest\+\_\+ptr}{}\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inline]}}



Copies data within this \doxylink{classgko_1_1Executor}{Executor}. 


\begin{DoxyTemplParams}{Template Parameters}
{\em T} & datatype to copy\\
\hline
\end{DoxyTemplParams}

\begin{DoxyParams}{Parameters}
{\em num\+\_\+elems} & number of elements of type T to copy \\
\hline
{\em src\+\_\+ptr} & pointer to a block of memory containing the data to be copied \\
\hline
{\em dest\+\_\+ptr} & pointer to an allocated block of memory where the data will be copied to \\
\hline
\end{DoxyParams}


References \doxymbox{\hyperlink{classgko_1_1Executor_a8050a118e6ac312a768ec56d3d3aae20}{copy\+\_\+from()}}.

\Hypertarget{classgko_1_1Executor_a8050a118e6ac312a768ec56d3d3aae20}\index{gko::Executor@{gko::Executor}!copy\_from@{copy\_from}}
\index{copy\_from@{copy\_from}!gko::Executor@{gko::Executor}}
\doxysubsubsection{\texorpdfstring{copy\_from()}{copy\_from()}}
{\footnotesize\ttfamily \label{classgko_1_1Executor_a8050a118e6ac312a768ec56d3d3aae20} 
template$<$typename T$>$ \\
void gko::\+\+Executor::\+copy\+\_\+from (\begin{DoxyParamCaption}\item[{\doxymbox{\hyperlink{classgko_1_1ptr__param}{ptr\+\_\+param}}$<$ const Executor $>$}]{src\+\_\+exec}{, }\item[{\doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type}}}]{num\+\_\+elems}{, }\item[{const T \texorpdfstring{$\ast$}{*}}]{src\+\_\+ptr}{, }\item[{T \texorpdfstring{$\ast$}{*}}]{dest\+\_\+ptr}{}\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inline]}}



Copies data from another \doxylink{classgko_1_1Executor}{Executor}. 


\begin{DoxyTemplParams}{Template Parameters}
{\em T} & datatype to copy\\
\hline
\end{DoxyTemplParams}

\begin{DoxyParams}{Parameters}
{\em src\+\_\+exec} & \doxylink{classgko_1_1Executor}{Executor} from which the memory will be copied \\
\hline
{\em num\+\_\+elems} & number of elements of type T to copy \\
\hline
{\em src\+\_\+ptr} & pointer to a block of memory containing the data to be copied \\
\hline
{\em dest\+\_\+ptr} & pointer to an allocated block of memory where the data will be copied to \\
\hline
\end{DoxyParams}


References \doxymbox{\hyperlink{classgko_1_1Executor_a8050a118e6ac312a768ec56d3d3aae20}{copy\+\_\+from()}}, and \doxymbox{\hyperlink{classgko_1_1ptr__param_ad1245c2636fdba26d3a3fab9fec5e068}{gko::\+ptr\+\_\+param$<$ T $>$::\+get()}}.



Referenced by \doxymbox{\hyperlink{classgko_1_1Executor_a45377b6ee4c1d1852ec299ce2133eabb}{copy()}}, and \doxymbox{\hyperlink{classgko_1_1Executor_a8050a118e6ac312a768ec56d3d3aae20}{copy\+\_\+from()}}.

\Hypertarget{classgko_1_1Executor_ab5ee27c7997a4e109831e27c42242073}\index{gko::Executor@{gko::Executor}!copy\_val\_to\_host@{copy\_val\_to\_host}}
\index{copy\_val\_to\_host@{copy\_val\_to\_host}!gko::Executor@{gko::Executor}}
\doxysubsubsection{\texorpdfstring{copy\_val\_to\_host()}{copy\_val\_to\_host()}}
{\footnotesize\ttfamily \label{classgko_1_1Executor_ab5ee27c7997a4e109831e27c42242073} 
template$<$typename T$>$ \\
T gko::\+\+Executor::\+copy\+\_\+val\+\_\+to\+\_\+host (\begin{DoxyParamCaption}\item[{const T \texorpdfstring{$\ast$}{*}}]{ptr}{}\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inline]}}



Retrieves a single element at the given location from executor memory. 


\begin{DoxyTemplParams}{Template Parameters}
{\em T} & datatype to copy\\
\hline
\end{DoxyTemplParams}

\begin{DoxyParams}{Parameters}
{\em ptr} & the pointer to the element to be copied\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
the value stored at ptr 
\end{DoxyReturn}


References \doxymbox{\hyperlink{classgko_1_1Executor_aa23172c7579fe4a9a41af8eba62ed54f}{get\+\_\+master()}}.

\Hypertarget{classgko_1_1Executor_a0befe43d21c93e199d1620eaae4ccc0c}\index{gko::Executor@{gko::Executor}!free@{free}}
\index{free@{free}!gko::Executor@{gko::Executor}}
\doxysubsubsection{\texorpdfstring{free()}{free()}}
{\footnotesize\ttfamily \label{classgko_1_1Executor_a0befe43d21c93e199d1620eaae4ccc0c} 
void gko::\+\+Executor::\+free (\begin{DoxyParamCaption}\item[{void \texorpdfstring{$\ast$}{*}}]{ptr}{}\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [noexcept]}}



Frees memory previously allocated with \doxylink{classgko_1_1Executor_a99e1d008646298b06ce10979253de1ec}{Executor::\+alloc()}. 

If {\ttfamily ptr} is a {\ttfamily nullptr}, the function has no effect.


\begin{DoxyParams}{Parameters}
{\em ptr} & pointer to the allocated memory block \\
\hline
\end{DoxyParams}
\Hypertarget{classgko_1_1Executor_a9b25713dfacc7914b69115f815e616b0}\index{gko::Executor@{gko::Executor}!get\_description@{get\_description}}
\index{get\_description@{get\_description}!gko::Executor@{gko::Executor}}
\doxysubsubsection{\texorpdfstring{get\_description()}{get\_description()}}
{\footnotesize\ttfamily \label{classgko_1_1Executor_a9b25713dfacc7914b69115f815e616b0} 
virtual std::\+string gko::\+\+Executor::\+get\+\_\+description (\begin{DoxyParamCaption}{}{}\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [pure virtual]}}

\begin{DoxyReturn}{Returns}
a textual representation of the executor and its device. 
\end{DoxyReturn}


Implemented in \doxymbox{\hyperlink{classgko_1_1CudaExecutor_ac429a47e4fab2f11df0dd09fc9652a19}{gko::\+\+Cuda\+Executor}}, \doxymbox{\hyperlink{classgko_1_1DpcppExecutor_a30330475d4668e72586456434171b6d6}{gko::\+\+Dpcpp\+Executor}}, \doxymbox{\hyperlink{classgko_1_1HipExecutor_a205464163af208922487c35a6d198418}{gko::\+\+Hip\+Executor}}, \doxymbox{\hyperlink{classgko_1_1OmpExecutor_a157fbc623333a1658f8a3915e7b2da2d}{gko::\+\+Omp\+Executor}}, and \doxymbox{\hyperlink{classgko_1_1ReferenceExecutor_a84e5353b33e9d648476aed0e76999358}{gko::\+\+Reference\+Executor}}.

\Hypertarget{classgko_1_1Executor_a30d5407c37711d49184914026d815708}\index{gko::Executor@{gko::Executor}!get\_master@{get\_master}}
\index{get\_master@{get\_master}!gko::Executor@{gko::Executor}}
\doxysubsubsection{\texorpdfstring{get\_master()}{get\_master()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
{\footnotesize\ttfamily \label{classgko_1_1Executor_a30d5407c37711d49184914026d815708} 
virtual std::\+shared\+\_\+ptr$<$ const Executor $>$ gko::\+\+Executor::\+get\+\_\+master (\begin{DoxyParamCaption}{}{}\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [pure virtual]}, {\ttfamily [noexcept]}}



Returns the master \doxylink{classgko_1_1OmpExecutor}{Omp\+Executor} of this \doxylink{classgko_1_1Executor}{Executor}.    

\begin{DoxyReturn}{Returns}
the master \doxylink{classgko_1_1OmpExecutor}{Omp\+Executor} of this \doxylink{classgko_1_1Executor}{Executor}.    
\end{DoxyReturn}


Implemented in \doxymbox{\hyperlink{classgko_1_1CudaExecutor_a8999e5a4598d224fadc6c0047ed6ca17}{gko::\+\+Cuda\+Executor}}, \doxymbox{\hyperlink{classgko_1_1DpcppExecutor_a25e312e44fd224e2b1d81ebe7755e8d9}{gko::\+\+Dpcpp\+Executor}}, \doxymbox{\hyperlink{classgko_1_1HipExecutor_a6ad248f899a60fc779f36119afe62ca0}{gko::\+\+Hip\+Executor}}, and \doxymbox{\hyperlink{classgko_1_1OmpExecutor_a3b8664fadbd3799fdc44b85056ef94b1}{gko::\+\+Omp\+Executor}}.



References \doxymbox{\hyperlink{classgko_1_1Executor_aa23172c7579fe4a9a41af8eba62ed54f}{get\+\_\+master()}}.

\Hypertarget{classgko_1_1Executor_aa23172c7579fe4a9a41af8eba62ed54f}\index{gko::Executor@{gko::Executor}!get\_master@{get\_master}}
\index{get\_master@{get\_master}!gko::Executor@{gko::Executor}}
\doxysubsubsection{\texorpdfstring{get\_master()}{get\_master()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
{\footnotesize\ttfamily \label{classgko_1_1Executor_aa23172c7579fe4a9a41af8eba62ed54f} 
virtual std::\+shared\+\_\+ptr$<$ Executor $>$ gko::\+\+Executor::\+get\+\_\+master (\begin{DoxyParamCaption}{}{}\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}, {\ttfamily [noexcept]}}



Returns the master \doxylink{classgko_1_1OmpExecutor}{Omp\+Executor} of this \doxylink{classgko_1_1Executor}{Executor}. 

\begin{DoxyReturn}{Returns}
the master \doxylink{classgko_1_1OmpExecutor}{Omp\+Executor} of this \doxylink{classgko_1_1Executor}{Executor}. 
\end{DoxyReturn}


Implemented in \doxymbox{\hyperlink{classgko_1_1CudaExecutor_a6466705137b8ac3974734837c7730d74}{gko::\+\+Cuda\+Executor}}, \doxymbox{\hyperlink{classgko_1_1DpcppExecutor_a97089607eb590386ab646edea67d58cb}{gko::\+\+Dpcpp\+Executor}}, \doxymbox{\hyperlink{classgko_1_1HipExecutor_aa7f1d797dbce7f64f0bd458d55b42db5}{gko::\+\+Hip\+Executor}}, and \doxymbox{\hyperlink{classgko_1_1OmpExecutor_a9db279007ed52b4e116c918e370f6474}{gko::\+\+Omp\+Executor}}.



Referenced by \doxymbox{\hyperlink{classgko_1_1Executor_ab5ee27c7997a4e109831e27c42242073}{copy\+\_\+val\+\_\+to\+\_\+host()}}, and \doxymbox{\hyperlink{classgko_1_1Executor_a30d5407c37711d49184914026d815708}{get\+\_\+master()}}.

\Hypertarget{classgko_1_1Executor_a452d0a9f4ea10ea3c3ba5c820e1e8d10}\index{gko::Executor@{gko::Executor}!memory\_accessible@{memory\_accessible}}
\index{memory\_accessible@{memory\_accessible}!gko::Executor@{gko::Executor}}
\doxysubsubsection{\texorpdfstring{memory\_accessible()}{memory\_accessible()}}
{\footnotesize\ttfamily \label{classgko_1_1Executor_a452d0a9f4ea10ea3c3ba5c820e1e8d10} 
bool gko::\+\+Executor::\+memory\+\_\+accessible (\begin{DoxyParamCaption}\item[{const std::\+shared\+\_\+ptr$<$ const Executor $>$ \&}]{other}{}\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inline]}}



Verifies whether the executors share the same memory. 


\begin{DoxyParams}{Parameters}
{\em other} & the other \doxylink{classgko_1_1Executor}{Executor} to compare against\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
whether the executors this and other share the same memory. 
\end{DoxyReturn}
\Hypertarget{classgko_1_1Executor_af04cdc1a9af6c8efc34ddebb9e7aaf00}\index{gko::Executor@{gko::Executor}!remove\_logger@{remove\_logger}}
\index{remove\_logger@{remove\_logger}!gko::Executor@{gko::Executor}}
\doxysubsubsection{\texorpdfstring{remove\_logger()}{remove\_logger()}}
{\footnotesize\ttfamily \label{classgko_1_1Executor_af04cdc1a9af6c8efc34ddebb9e7aaf00} 
void gko::\+\+Executor::\+remove\+\_\+logger (\begin{DoxyParamCaption}\item[{const \doxymbox{\hyperlink{classgko_1_1log_1_1Logger}{log::\+\+Logger}} \texorpdfstring{$\ast$}{*}}]{logger}{}\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [override]}, {\ttfamily [virtual]}}





\begin{DoxyNote}{Note}
This specialization keeps track of whether any propagating loggers were attached to the executor. 
\end{DoxyNote}
\begin{DoxySeeAlso}{See also}
Logger::\+needs\+\_\+propagation() 
\end{DoxySeeAlso}


Reimplemented from \doxymbox{\hyperlink{classgko_1_1log_1_1EnableLogging_aba5317f8a03956a61d770e9b07fc65cc}{gko::\+log::\+\+Enable\+Logging$<$ Executor $>$}}.



References \doxymbox{\hyperlink{classgko_1_1log_1_1Logger_a6f60c7a79a4716836d232558c58777d0}{gko::\+log::\+\+Logger::\+needs\+\_\+propagation()}}.

\Hypertarget{classgko_1_1Executor_a294787f033b02fd013af087d02a4ae1b}\index{gko::Executor@{gko::Executor}!run@{run}}
\index{run@{run}!gko::Executor@{gko::Executor}}
\doxysubsubsection{\texorpdfstring{run()}{run()}\hspace{0.1cm}{\footnotesize\ttfamily [1/3]}}
{\footnotesize\ttfamily \label{classgko_1_1Executor_a294787f033b02fd013af087d02a4ae1b} 
template$<$typename Closure\+Omp, typename Closure\+Cuda, typename Closure\+Hip, typename Closure\+Dpcpp$>$ \\
void gko::\+\+Executor::\+run (\begin{DoxyParamCaption}\item[{const Closure\+Omp \&}]{op\+\_\+omp}{, }\item[{const Closure\+Cuda \&}]{op\+\_\+cuda}{, }\item[{const Closure\+Hip \&}]{op\+\_\+hip}{, }\item[{const Closure\+Dpcpp \&}]{op\+\_\+dpcpp}{}\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inline]}}



Runs one of the passed in functors, depending on the \doxylink{classgko_1_1Executor}{Executor} type. 


\begin{DoxyTemplParams}{Template Parameters}
{\em Closure\+Omp} & type of op\+\_\+omp \\
\hline
{\em Closure\+Cuda} & type of op\+\_\+cuda \\
\hline
{\em Closure\+Hip} & type of op\+\_\+hip \\
\hline
{\em Closure\+Dpcpp} & type of op\+\_\+dpcpp\\
\hline
\end{DoxyTemplParams}

\begin{DoxyParams}{Parameters}
{\em op\+\_\+omp} & functor to run in case of a \doxylink{classgko_1_1OmpExecutor}{Omp\+Executor} or \doxylink{classgko_1_1ReferenceExecutor}{Reference\+Executor} \\
\hline
{\em op\+\_\+cuda} & functor to run in case of a \doxylink{classgko_1_1CudaExecutor}{Cuda\+Executor} \\
\hline
{\em op\+\_\+hip} & functor to run in case of a \doxylink{classgko_1_1HipExecutor}{Hip\+Executor} \\
\hline
{\em op\+\_\+dpcpp} & functor to run in case of a \doxylink{classgko_1_1DpcppExecutor}{Dpcpp\+Executor} \\
\hline
\end{DoxyParams}


References \doxymbox{\hyperlink{classgko_1_1Executor_a1de8e2668b76e66690acf5eef9e8324d}{run()}}.

\Hypertarget{classgko_1_1Executor_a1de8e2668b76e66690acf5eef9e8324d}\index{gko::Executor@{gko::Executor}!run@{run}}
\index{run@{run}!gko::Executor@{gko::Executor}}
\doxysubsubsection{\texorpdfstring{run()}{run()}\hspace{0.1cm}{\footnotesize\ttfamily [2/3]}}
{\footnotesize\ttfamily \label{classgko_1_1Executor_a1de8e2668b76e66690acf5eef9e8324d} 
virtual void gko::\+\+Executor::\+run (\begin{DoxyParamCaption}\item[{const \doxymbox{\hyperlink{classgko_1_1Operation}{Operation}} \&}]{op}{}\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [pure virtual]}}



Runs the specified \doxylink{classgko_1_1Operation}{Operation} using this \doxylink{classgko_1_1Executor}{Executor}. 


\begin{DoxyParams}{Parameters}
{\em op} & the operation to run \\
\hline
\end{DoxyParams}


Implemented in \doxymbox{\hyperlink{classgko_1_1CudaExecutor_a4fdbf8100b039d3858634bf9c502f5d7}{gko::\+\+Cuda\+Executor}}, \doxymbox{\hyperlink{classgko_1_1DpcppExecutor_a4fdbf8100b039d3858634bf9c502f5d7}{gko::\+\+Dpcpp\+Executor}}, \doxymbox{\hyperlink{classgko_1_1HipExecutor_a4fdbf8100b039d3858634bf9c502f5d7}{gko::\+\+Hip\+Executor}}, \doxymbox{\hyperlink{classgko_1_1OmpExecutor_a4fdbf8100b039d3858634bf9c502f5d7}{gko::\+\+Omp\+Executor}}, and \doxymbox{\hyperlink{classgko_1_1ReferenceExecutor_a82b41b42dbd26e8ac5b0146de79e5d34}{gko::\+\+Reference\+Executor}}.



Referenced by \doxymbox{\hyperlink{classgko_1_1Executor_a294787f033b02fd013af087d02a4ae1b}{run()}}.

\Hypertarget{classgko_1_1Executor_abe906f109824da54447e504ff88aa97f}\index{gko::Executor@{gko::Executor}!run@{run}}
\index{run@{run}!gko::Executor@{gko::Executor}}
\doxysubsubsection{\texorpdfstring{run()}{run()}\hspace{0.1cm}{\footnotesize\ttfamily [3/3]}}
{\footnotesize\ttfamily \label{classgko_1_1Executor_abe906f109824da54447e504ff88aa97f} 
template$<$typename Closure\+Reference, typename Closure\+Omp, typename Closure\+Cuda, typename Closure\+Hip, typename Closure\+Dpcpp$>$ \\
void gko::\+\+Executor::\+run (\begin{DoxyParamCaption}\item[{std::\+string}]{name}{, }\item[{const Closure\+Reference \&}]{op\+\_\+ref}{, }\item[{const Closure\+Omp \&}]{op\+\_\+omp}{, }\item[{const Closure\+Cuda \&}]{op\+\_\+cuda}{, }\item[{const Closure\+Hip \&}]{op\+\_\+hip}{, }\item[{const Closure\+Dpcpp \&}]{op\+\_\+dpcpp}{}\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inline]}}



Runs one of the passed in functors, depending on the \doxylink{classgko_1_1Executor}{Executor} type. 


\begin{DoxyTemplParams}{Template Parameters}
{\em Closure\+Reference} & type of op\+\_\+ref \\
\hline
{\em Closure\+Omp} & type of op\+\_\+omp \\
\hline
{\em Closure\+Cuda} & type of op\+\_\+cuda \\
\hline
{\em Closure\+Hip} & type of op\+\_\+hip \\
\hline
{\em Closure\+Dpcpp} & type of op\+\_\+dpcpp\\
\hline
\end{DoxyTemplParams}

\begin{DoxyParams}{Parameters}
{\em name} & the name of the operation \\
\hline
{\em op\+\_\+ref} & functor to run in case of a \doxylink{classgko_1_1ReferenceExecutor}{Reference\+Executor} \\
\hline
{\em op\+\_\+omp} & functor to run in case of a \doxylink{classgko_1_1OmpExecutor}{Omp\+Executor} \\
\hline
{\em op\+\_\+cuda} & functor to run in case of a \doxylink{classgko_1_1CudaExecutor}{Cuda\+Executor} \\
\hline
{\em op\+\_\+hip} & functor to run in case of a \doxylink{classgko_1_1HipExecutor}{Hip\+Executor} \\
\hline
{\em op\+\_\+dpcpp} & functor to run in case of a \doxylink{classgko_1_1DpcppExecutor}{Dpcpp\+Executor} \\
\hline
\end{DoxyParams}
\Hypertarget{classgko_1_1Executor_a8801d54a4ac842def0b88d643b37b1db}\index{gko::Executor@{gko::Executor}!set\_log\_propagation\_mode@{set\_log\_propagation\_mode}}
\index{set\_log\_propagation\_mode@{set\_log\_propagation\_mode}!gko::Executor@{gko::Executor}}
\doxysubsubsection{\texorpdfstring{set\_log\_propagation\_mode()}{set\_log\_propagation\_mode()}}
{\footnotesize\ttfamily \label{classgko_1_1Executor_a8801d54a4ac842def0b88d643b37b1db} 
void gko::\+\+Executor::\+set\+\_\+log\+\_\+propagation\+\_\+mode (\begin{DoxyParamCaption}\item[{\doxymbox{\hyperlink{namespacegko_aa2543f42cbbe1a9373dc46d04c112bee}{log\+\_\+propagation\+\_\+mode}}}]{mode}{}\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}



Sets the logger event propagation mode for the executor. 

This controls whether events that happen at objects created on this executor will also be logged at propagating loggers attached to the executor. \begin{DoxySeeAlso}{See also}
Logger::\+needs\+\_\+propagation() 
\end{DoxySeeAlso}
\Hypertarget{classgko_1_1Executor_a3d59329aa9e2db037f2ebb6748bf4a5b}\index{gko::Executor@{gko::Executor}!should\_propagate\_log@{should\_propagate\_log}}
\index{should\_propagate\_log@{should\_propagate\_log}!gko::Executor@{gko::Executor}}
\doxysubsubsection{\texorpdfstring{should\_propagate\_log()}{should\_propagate\_log()}}
{\footnotesize\ttfamily \label{classgko_1_1Executor_a3d59329aa9e2db037f2ebb6748bf4a5b} 
bool gko::\+\+Executor::\+should\+\_\+propagate\+\_\+log (\begin{DoxyParamCaption}{}{}\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inline]}}



Returns true iff events occurring at an object created on this executor should be logged at propagating loggers attached to this executor, and there is at least one such propagating logger. 

\begin{DoxySeeAlso}{See also}
Logger::\+needs\+\_\+propagation() 

\doxylink{classgko_1_1Executor_a8801d54a4ac842def0b88d643b37b1db}{Executor::\+set\+\_\+log\+\_\+propagation\+\_\+mode(log\+\_\+propagation\+\_\+mode)} 
\end{DoxySeeAlso}


References \doxymbox{\hyperlink{namespacegko_aa2543f42cbbe1a9373dc46d04c112beea2bd9c0ed00116be1258e0cc66617d7c8}{gko::\+automatic}}.

\Hypertarget{classgko_1_1Executor_a24eeee7648c0f0fd07c9866d07154875}\index{gko::Executor@{gko::Executor}!synchronize@{synchronize}}
\index{synchronize@{synchronize}!gko::Executor@{gko::Executor}}
\doxysubsubsection{\texorpdfstring{synchronize()}{synchronize()}}
{\footnotesize\ttfamily \label{classgko_1_1Executor_a24eeee7648c0f0fd07c9866d07154875} 
virtual void gko::\+\+Executor::\+synchronize (\begin{DoxyParamCaption}{}{}\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [pure virtual]}}



Synchronize the operations launched on the executor with its master. 



Implemented in \doxymbox{\hyperlink{classgko_1_1CudaExecutor_a903cf7e3460b14677c0bce5ca08a1b81}{gko::\+\+Cuda\+Executor}}, \doxymbox{\hyperlink{classgko_1_1DpcppExecutor_a6b2a82c46748ddbf097fa2da3ec64d90}{gko::\+\+Dpcpp\+Executor}}, \doxymbox{\hyperlink{classgko_1_1HipExecutor_a0ea0ec8722767138953110b52d325b4a}{gko::\+\+Hip\+Executor}}, and \doxymbox{\hyperlink{classgko_1_1OmpExecutor_ad4e421dcc3d1e5c7e396167a122e57ae}{gko::\+\+Omp\+Executor}}.



References \doxymbox{\hyperlink{classgko_1_1Executor_a24eeee7648c0f0fd07c9866d07154875}{synchronize()}}.



Referenced by \doxymbox{\hyperlink{classgko_1_1Executor_a24eeee7648c0f0fd07c9866d07154875}{synchronize()}}.



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