\doxysection{gko::\+log::\+Performance\+Hint Class Reference}
\hypertarget{classgko_1_1log_1_1PerformanceHint}{}\label{classgko_1_1log_1_1PerformanceHint}\index{gko::log::PerformanceHint@{gko::log::PerformanceHint}}


\doxylink{classgko_1_1log_1_1PerformanceHint}{Performance\+Hint} is a \doxylink{classgko_1_1log_1_1Logger}{Logger} which analyzes the performance of the application and outputs hints for unnecessary copies and allocations.  




{\ttfamily \+\#include $<$ginkgo/\+core/\+log/\+performance\+\_\+hint.\+hpp$>$}



Inheritance diagram for gko::\+log::\+Performance\+Hint:\+
\nopagebreak
\begin{figure}[H]
\begin{center}
\leavevmode
\includegraphics[width=209pt]{classgko_1_1log_1_1PerformanceHint__inherit__graph}
\end{center}
\end{figure}


Collaboration diagram for gko::\+log::\+Performance\+Hint:\+
\nopagebreak
\begin{figure}[H]
\begin{center}
\leavevmode
\includegraphics[width=209pt]{classgko_1_1log_1_1PerformanceHint__coll__graph}
\end{center}
\end{figure}
\doxysubsubsection*{Public Member Functions}
\begin{DoxyCompactItemize}
\item 
void \doxymbox{\hyperlink{classgko_1_1log_1_1PerformanceHint_aa3bd3b91c24a67ea52350f1ebcfe43ff}{on\+\_\+allocation\+\_\+completed}} (const \doxymbox{\hyperlink{classgko_1_1Executor}{Executor}} \texorpdfstring{$\ast$}{*}exec, const \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type}} \&num\+\_\+bytes, const \doxymbox{\hyperlink{namespacegko_a70648f1299a0c1297e2bf86f47264626}{uintptr}} \&location) const override
\begin{DoxyCompactList}\small\item\em \doxylink{classgko_1_1Executor}{Executor}\textquotesingle{}s allocation completed event. \end{DoxyCompactList}\item 
void \doxymbox{\hyperlink{classgko_1_1log_1_1PerformanceHint_a620e8a379028087ef250cc6f9cb87e74}{on\+\_\+free\+\_\+completed}} (const \doxymbox{\hyperlink{classgko_1_1Executor}{Executor}} \texorpdfstring{$\ast$}{*}exec, const \doxymbox{\hyperlink{namespacegko_a70648f1299a0c1297e2bf86f47264626}{uintptr}} \&location) const override
\begin{DoxyCompactList}\small\item\em \doxylink{classgko_1_1Executor}{Executor}\textquotesingle{}s free completed event. \end{DoxyCompactList}\item 
void \doxymbox{\hyperlink{classgko_1_1log_1_1PerformanceHint_ac903d32fd9cc4cb6fa8265f9cf57c78a}{on\+\_\+copy\+\_\+completed}} (const \doxymbox{\hyperlink{classgko_1_1Executor}{Executor}} \texorpdfstring{$\ast$}{*}from, const \doxymbox{\hyperlink{classgko_1_1Executor}{Executor}} \texorpdfstring{$\ast$}{*}to, const \doxymbox{\hyperlink{namespacegko_a70648f1299a0c1297e2bf86f47264626}{uintptr}} \&location\+\_\+from, const \doxymbox{\hyperlink{namespacegko_a70648f1299a0c1297e2bf86f47264626}{uintptr}} \&location\+\_\+to, const \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type}} \&num\+\_\+bytes) const override
\begin{DoxyCompactList}\small\item\em \doxylink{classgko_1_1Executor}{Executor}\textquotesingle{}s copy completed event. \end{DoxyCompactList}\item 
\Hypertarget{classgko_1_1log_1_1PerformanceHint_a5570eaac4f55d6a84293f4611c790f2c}\label{classgko_1_1log_1_1PerformanceHint_a5570eaac4f55d6a84293f4611c790f2c} 
void {\bfseries print\+\_\+status} () const
\begin{DoxyCompactList}\small\item\em Writes out the cross-\/executor writes and allocations that have been stored so far. \end{DoxyCompactList}\end{DoxyCompactItemize}
\doxysubsection*{Public Member Functions inherited from \doxymbox{\hyperlink{classgko_1_1log_1_1Logger}{gko::\+log::\+\+Logger}}}
\begin{DoxyCompactItemize}
\item 
{\footnotesize template$<$\doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type}} Event, typename... Params$>$ }\\std::\+enable\+\_\+if\+\_\+t$<$ Event==0 \&\&(0$<$ \doxymbox{\hyperlink{classgko_1_1log_1_1Logger_a8794cd4bf2fd4d24ba9879bdca884dab}{event\+\_\+count\+\_\+max}})$>$ {\bfseries on} (Params \&\&... params) const
\item 
{\footnotesize template$<$\doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type}} Event, typename... Params$>$ }\\std::\+enable\+\_\+if\+\_\+t$<$ Event==1 \&\&(1$<$ \doxymbox{\hyperlink{classgko_1_1log_1_1Logger_a8794cd4bf2fd4d24ba9879bdca884dab}{event\+\_\+count\+\_\+max}})$>$ {\bfseries on} (Params \&\&... params) const
\item 
{\footnotesize template$<$\doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type}} Event, typename... Params$>$ }\\std::\+enable\+\_\+if\+\_\+t$<$ Event==2 \&\&(2$<$ \doxymbox{\hyperlink{classgko_1_1log_1_1Logger_a8794cd4bf2fd4d24ba9879bdca884dab}{event\+\_\+count\+\_\+max}})$>$ {\bfseries on} (Params \&\&... params) const
\item 
{\footnotesize template$<$\doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type}} Event, typename... Params$>$ }\\std::\+enable\+\_\+if\+\_\+t$<$ Event==3 \&\&(3$<$ \doxymbox{\hyperlink{classgko_1_1log_1_1Logger_a8794cd4bf2fd4d24ba9879bdca884dab}{event\+\_\+count\+\_\+max}})$>$ {\bfseries on} (Params \&\&... params) const
\item 
{\footnotesize template$<$\doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type}} Event, typename... Params$>$ }\\std::\+enable\+\_\+if\+\_\+t$<$ Event==4 \&\&(4$<$ \doxymbox{\hyperlink{classgko_1_1log_1_1Logger_a8794cd4bf2fd4d24ba9879bdca884dab}{event\+\_\+count\+\_\+max}})$>$ {\bfseries on} (Params \&\&... params) const
\item 
{\footnotesize template$<$\doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type}} Event, typename... Params$>$ }\\std::\+enable\+\_\+if\+\_\+t$<$ Event==5 \&\&(5$<$ \doxymbox{\hyperlink{classgko_1_1log_1_1Logger_a8794cd4bf2fd4d24ba9879bdca884dab}{event\+\_\+count\+\_\+max}})$>$ {\bfseries on} (Params \&\&... params) const
\item 
{\footnotesize template$<$\doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type}} Event, typename... Params$>$ }\\std::\+enable\+\_\+if\+\_\+t$<$ Event==6 \&\&(6$<$ \doxymbox{\hyperlink{classgko_1_1log_1_1Logger_a8794cd4bf2fd4d24ba9879bdca884dab}{event\+\_\+count\+\_\+max}})$>$ {\bfseries on} (Params \&\&... params) const
\item 
{\footnotesize template$<$\doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type}} Event, typename... Params$>$ }\\std::\+enable\+\_\+if\+\_\+t$<$ Event==7 \&\&(7$<$ \doxymbox{\hyperlink{classgko_1_1log_1_1Logger_a8794cd4bf2fd4d24ba9879bdca884dab}{event\+\_\+count\+\_\+max}})$>$ {\bfseries on} (Params \&\&... params) const
\item 
{\footnotesize template$<$\doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type}} Event, typename... Params$>$ }\\std::\+enable\+\_\+if\+\_\+t$<$ Event==8 \&\&(8$<$ \doxymbox{\hyperlink{classgko_1_1log_1_1Logger_a8794cd4bf2fd4d24ba9879bdca884dab}{event\+\_\+count\+\_\+max}})$>$ {\bfseries on} (Params \&\&... params) const
\item 
{\footnotesize template$<$\doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type}} Event, typename... Params$>$ }\\std::\+enable\+\_\+if\+\_\+t$<$ Event==9 \&\&(9$<$ \doxymbox{\hyperlink{classgko_1_1log_1_1Logger_a8794cd4bf2fd4d24ba9879bdca884dab}{event\+\_\+count\+\_\+max}})$>$ {\bfseries on} (Params \&\&... params) const
\item 
{\footnotesize template$<$\doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type}} Event, typename... Params$>$ }\\std::\+enable\+\_\+if\+\_\+t$<$ Event==10 \&\&(10$<$ \doxymbox{\hyperlink{classgko_1_1log_1_1Logger_a8794cd4bf2fd4d24ba9879bdca884dab}{event\+\_\+count\+\_\+max}})$>$ {\bfseries on} (Params \&\&... params) const
\item 
{\footnotesize template$<$\doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type}} Event, typename... Params$>$ }\\std::\+enable\+\_\+if\+\_\+t$<$ Event==11 \&\&(11$<$ \doxymbox{\hyperlink{classgko_1_1log_1_1Logger_a8794cd4bf2fd4d24ba9879bdca884dab}{event\+\_\+count\+\_\+max}})$>$ {\bfseries on} (Params \&\&... params) const
\item 
{\footnotesize template$<$\doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type}} Event, typename... Params$>$ }\\std::\+enable\+\_\+if\+\_\+t$<$ Event==12 \&\&(12$<$ \doxymbox{\hyperlink{classgko_1_1log_1_1Logger_a8794cd4bf2fd4d24ba9879bdca884dab}{event\+\_\+count\+\_\+max}})$>$ {\bfseries on} (Params \&\&... params) const
\item 
{\footnotesize template$<$\doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type}} Event, typename... Params$>$ }\\std::\+enable\+\_\+if\+\_\+t$<$ Event==13 \&\&(13$<$ \doxymbox{\hyperlink{classgko_1_1log_1_1Logger_a8794cd4bf2fd4d24ba9879bdca884dab}{event\+\_\+count\+\_\+max}})$>$ {\bfseries on} (Params \&\&... params) const
\item 
{\footnotesize template$<$\doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type}} Event, typename... Params$>$ }\\std::\+enable\+\_\+if\+\_\+t$<$ Event==14 \&\&(14$<$ \doxymbox{\hyperlink{classgko_1_1log_1_1Logger_a8794cd4bf2fd4d24ba9879bdca884dab}{event\+\_\+count\+\_\+max}})$>$ {\bfseries on} (Params \&\&... params) const
\item 
{\footnotesize template$<$\doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type}} Event, typename... Params$>$ }\\std::\+enable\+\_\+if\+\_\+t$<$ Event==15 \&\&(15$<$ \doxymbox{\hyperlink{classgko_1_1log_1_1Logger_a8794cd4bf2fd4d24ba9879bdca884dab}{event\+\_\+count\+\_\+max}})$>$ {\bfseries on} (Params \&\&... params) const
\item 
{\footnotesize template$<$\doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type}} Event, typename... Params$>$ }\\std::\+enable\+\_\+if\+\_\+t$<$ Event==16 \&\&(16$<$ \doxymbox{\hyperlink{classgko_1_1log_1_1Logger_a8794cd4bf2fd4d24ba9879bdca884dab}{event\+\_\+count\+\_\+max}})$>$ {\bfseries on} (Params \&\&... params) const
\item 
{\footnotesize template$<$\doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type}} Event, typename... Params$>$ }\\std::\+enable\+\_\+if\+\_\+t$<$ Event==17 \&\&(17$<$ \doxymbox{\hyperlink{classgko_1_1log_1_1Logger_a8794cd4bf2fd4d24ba9879bdca884dab}{event\+\_\+count\+\_\+max}})$>$ {\bfseries on} (Params \&\&... params) const
\item 
{\footnotesize template$<$\doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type}} Event, typename... Params$>$ }\\std::\+enable\+\_\+if\+\_\+t$<$ Event==18 \&\&(18$<$ \doxymbox{\hyperlink{classgko_1_1log_1_1Logger_a8794cd4bf2fd4d24ba9879bdca884dab}{event\+\_\+count\+\_\+max}})$>$ {\bfseries on} (Params \&\&... params) const
\item 
{\footnotesize template$<$\doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type}} Event, typename... Params$>$ }\\std::\+enable\+\_\+if\+\_\+t$<$ Event==19 \&\&(19$<$ \doxymbox{\hyperlink{classgko_1_1log_1_1Logger_a8794cd4bf2fd4d24ba9879bdca884dab}{event\+\_\+count\+\_\+max}})$>$ {\bfseries on} (Params \&\&... params) const
\item 
{\footnotesize template$<$\doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type}} Event, typename... Params$>$ }\\std::\+enable\+\_\+if\+\_\+t$<$ Event==20 \&\&(20$<$ \doxymbox{\hyperlink{classgko_1_1log_1_1Logger_a8794cd4bf2fd4d24ba9879bdca884dab}{event\+\_\+count\+\_\+max}})$>$ {\bfseries on} (Params \&\&... params) const
\item 
{\footnotesize template$<$\doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type}} Event, typename... Params$>$ }\\std::\+enable\+\_\+if\+\_\+t$<$ Event==21 \&\&(21$<$ \doxymbox{\hyperlink{classgko_1_1log_1_1Logger_a8794cd4bf2fd4d24ba9879bdca884dab}{event\+\_\+count\+\_\+max}})$>$ {\bfseries on} (Params \&\&... params) const
\item 
{\footnotesize template$<$\doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type}} Event, typename... Params$>$ }\\std::\+enable\+\_\+if\+\_\+t$<$ Event==22 \&\&(22$<$ \doxymbox{\hyperlink{classgko_1_1log_1_1Logger_a8794cd4bf2fd4d24ba9879bdca884dab}{event\+\_\+count\+\_\+max}})$>$ {\bfseries on} (Params \&\&... params) const
\item 
{\footnotesize template$<$\doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type}} Event, typename... Params$>$ }\\std::\+enable\+\_\+if\+\_\+t$<$ Event==23 \&\&(23$<$ \doxymbox{\hyperlink{classgko_1_1log_1_1Logger_a8794cd4bf2fd4d24ba9879bdca884dab}{event\+\_\+count\+\_\+max}})$>$ {\bfseries on} (Params \&\&... params) const
\item 
{\footnotesize template$<$\doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type}} Event, typename... Params$>$ }\\std::\+enable\+\_\+if\+\_\+t$<$ Event==24 \&\&(24$<$ \doxymbox{\hyperlink{classgko_1_1log_1_1Logger_a8794cd4bf2fd4d24ba9879bdca884dab}{event\+\_\+count\+\_\+max}})$>$ {\bfseries on} (Params \&\&... params) const
\item 
{\footnotesize template$<$\doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type}} Event, typename... Params$>$ }\\std::\+enable\+\_\+if\+\_\+t$<$ Event==25 \&\&(25$<$ \doxymbox{\hyperlink{classgko_1_1log_1_1Logger_a8794cd4bf2fd4d24ba9879bdca884dab}{event\+\_\+count\+\_\+max}})$>$ {\bfseries on} (Params \&\&... params) const
\item 
{\footnotesize template$<$\doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type}} Event, typename... Params$>$ }\\std::\+enable\+\_\+if\+\_\+t$<$ Event==26 \&\&(26$<$ \doxymbox{\hyperlink{classgko_1_1log_1_1Logger_a8794cd4bf2fd4d24ba9879bdca884dab}{event\+\_\+count\+\_\+max}})$>$ {\bfseries on} (Params \&\&... params) const
\item 
virtual bool \doxymbox{\hyperlink{classgko_1_1log_1_1Logger_a6f60c7a79a4716836d232558c58777d0}{needs\+\_\+propagation}} () const
\begin{DoxyCompactList}\small\item\em Returns true if this logger, when attached to an \doxylink{classgko_1_1Executor}{Executor}, needs to be forwarded all events from objects on this executor. \end{DoxyCompactList}\end{DoxyCompactItemize}
\doxysubsubsection*{Static Public Member Functions}
\begin{DoxyCompactItemize}
\item 
static std::\+unique\+\_\+ptr$<$ Performance\+Hint $>$ \doxymbox{\hyperlink{classgko_1_1log_1_1PerformanceHint_ac57a0a98f2a0320d01805724abbd2249}{create}} (std::\+ostream \&os=std::\+cerr, \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type}} allocation\+\_\+size\+\_\+limit=16, \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type}} copy\+\_\+size\+\_\+limit=16, \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type}} histogram\+\_\+max\+\_\+size=1024)
\begin{DoxyCompactList}\small\item\em Creates a \doxylink{classgko_1_1log_1_1PerformanceHint}{Performance\+Hint} logger. \end{DoxyCompactList}\end{DoxyCompactItemize}
\doxysubsubsection*{Additional Inherited Members}
\doxysubsection*{Public Types inherited from \doxymbox{\hyperlink{classgko_1_1log_1_1Logger}{gko::\+log::\+\+Logger}}}
\begin{DoxyCompactItemize}
\item 
using {\bfseries mask\+\_\+type} = \doxymbox{\hyperlink{namespacegko_a09ee89da532d8b1fa6fdecec2d20b9bf}{gko::\+uint64}}
\end{DoxyCompactItemize}
\doxysubsection*{Static Public Attributes inherited from \doxymbox{\hyperlink{classgko_1_1log_1_1Logger}{gko::\+log::\+\+Logger}}}
\begin{DoxyCompactItemize}
\item 
static constexpr \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type}} {\bfseries event\+\_\+count\+\_\+max} = sizeof(mask\+\_\+type) \texorpdfstring{$\ast$}{*} \doxymbox{\hyperlink{namespacegko_acae2e648052ec788bd8ba9e0192652a6}{byte\+\_\+size}}
\begin{DoxyCompactList}\small\item\em Maximum amount of events (bits) with the current implementation. \end{DoxyCompactList}\item 
static constexpr mask\+\_\+type {\bfseries all\+\_\+events\+\_\+mask} = \texorpdfstring{$\sim$}{\string~}mask\+\_\+type\{0\}
\begin{DoxyCompactList}\small\item\em Bitset Mask which activates all events. \end{DoxyCompactList}\item 
static constexpr \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type}} {\bfseries allocation\+\_\+started} \{0\}
\item 
static constexpr mask\+\_\+type {\bfseries allocation\+\_\+started\+\_\+mask} \{mask\+\_\+type\{1\} $<$$<$ 0\}
\item 
static constexpr \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type}} {\bfseries allocation\+\_\+completed} \{1\}
\item 
static constexpr mask\+\_\+type {\bfseries allocation\+\_\+completed\+\_\+mask} \{mask\+\_\+type\{1\} $<$$<$ 1\}
\item 
static constexpr \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type}} {\bfseries free\+\_\+started} \{2\}
\item 
static constexpr mask\+\_\+type {\bfseries free\+\_\+started\+\_\+mask} \{mask\+\_\+type\{1\} $<$$<$ 2\}
\item 
static constexpr \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type}} {\bfseries free\+\_\+completed} \{3\}
\item 
static constexpr mask\+\_\+type {\bfseries free\+\_\+completed\+\_\+mask} \{mask\+\_\+type\{1\} $<$$<$ 3\}
\item 
static constexpr \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type}} {\bfseries copy\+\_\+started} \{4\}
\item 
static constexpr mask\+\_\+type {\bfseries copy\+\_\+started\+\_\+mask} \{mask\+\_\+type\{1\} $<$$<$ 4\}
\item 
static constexpr \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type}} {\bfseries copy\+\_\+completed} \{5\}
\item 
static constexpr mask\+\_\+type {\bfseries copy\+\_\+completed\+\_\+mask} \{mask\+\_\+type\{1\} $<$$<$ 5\}
\item 
static constexpr \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type}} {\bfseries operation\+\_\+launched} \{6\}
\item 
static constexpr mask\+\_\+type {\bfseries operation\+\_\+launched\+\_\+mask} \{mask\+\_\+type\{1\} $<$$<$ 6\}
\item 
static constexpr \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type}} {\bfseries operation\+\_\+completed} \{7\}
\item 
static constexpr mask\+\_\+type {\bfseries operation\+\_\+completed\+\_\+mask} \{mask\+\_\+type\{1\} $<$$<$ 7\}
\item 
static constexpr \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type}} {\bfseries polymorphic\+\_\+object\+\_\+create\+\_\+started} \{8\}
\item 
static constexpr mask\+\_\+type {\bfseries polymorphic\+\_\+object\+\_\+create\+\_\+started\+\_\+mask} \{mask\+\_\+type\{1\} $<$$<$ 8\}
\item 
static constexpr \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type}} {\bfseries polymorphic\+\_\+object\+\_\+create\+\_\+completed} \{9\}
\item 
static constexpr mask\+\_\+type {\bfseries polymorphic\+\_\+object\+\_\+create\+\_\+completed\+\_\+mask} \{mask\+\_\+type\{1\} $<$$<$ 9\}
\item 
static constexpr \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type}} {\bfseries polymorphic\+\_\+object\+\_\+copy\+\_\+started} \{10\}
\item 
static constexpr mask\+\_\+type {\bfseries polymorphic\+\_\+object\+\_\+copy\+\_\+started\+\_\+mask} \{mask\+\_\+type\{1\} $<$$<$ 10\}
\item 
static constexpr \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type}} {\bfseries polymorphic\+\_\+object\+\_\+copy\+\_\+completed} \{11\}
\item 
static constexpr mask\+\_\+type {\bfseries polymorphic\+\_\+object\+\_\+copy\+\_\+completed\+\_\+mask} \{mask\+\_\+type\{1\} $<$$<$ 11\}
\item 
static constexpr \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type}} {\bfseries polymorphic\+\_\+object\+\_\+deleted} \{12\}
\item 
static constexpr mask\+\_\+type {\bfseries polymorphic\+\_\+object\+\_\+deleted\+\_\+mask} \{mask\+\_\+type\{1\} $<$$<$ 12\}
\item 
static constexpr \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type}} {\bfseries linop\+\_\+apply\+\_\+started} \{13\}
\item 
static constexpr mask\+\_\+type {\bfseries linop\+\_\+apply\+\_\+started\+\_\+mask} \{mask\+\_\+type\{1\} $<$$<$ 13\}
\item 
static constexpr \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type}} {\bfseries linop\+\_\+apply\+\_\+completed} \{14\}
\item 
static constexpr mask\+\_\+type {\bfseries linop\+\_\+apply\+\_\+completed\+\_\+mask} \{mask\+\_\+type\{1\} $<$$<$ 14\}
\item 
static constexpr \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type}} {\bfseries linop\+\_\+advanced\+\_\+apply\+\_\+started} \{15\}
\item 
static constexpr mask\+\_\+type {\bfseries linop\+\_\+advanced\+\_\+apply\+\_\+started\+\_\+mask} \{mask\+\_\+type\{1\} $<$$<$ 15\}
\item 
static constexpr \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type}} {\bfseries linop\+\_\+advanced\+\_\+apply\+\_\+completed} \{16\}
\item 
static constexpr mask\+\_\+type {\bfseries linop\+\_\+advanced\+\_\+apply\+\_\+completed\+\_\+mask} \{mask\+\_\+type\{1\} $<$$<$ 16\}
\item 
static constexpr \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type}} {\bfseries linop\+\_\+factory\+\_\+generate\+\_\+started} \{17\}
\item 
static constexpr mask\+\_\+type {\bfseries linop\+\_\+factory\+\_\+generate\+\_\+started\+\_\+mask} \{mask\+\_\+type\{1\} $<$$<$ 17\}
\item 
static constexpr \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type}} {\bfseries linop\+\_\+factory\+\_\+generate\+\_\+completed} \{18\}
\item 
static constexpr mask\+\_\+type {\bfseries linop\+\_\+factory\+\_\+generate\+\_\+completed\+\_\+mask} \{mask\+\_\+type\{1\} $<$$<$ 18\}
\item 
static constexpr \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type}} {\bfseries criterion\+\_\+check\+\_\+started} \{19\}
\item 
static constexpr mask\+\_\+type {\bfseries criterion\+\_\+check\+\_\+started\+\_\+mask} \{mask\+\_\+type\{1\} $<$$<$ 19\}
\item 
static constexpr \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type}} {\bfseries criterion\+\_\+check\+\_\+completed} \{20\}
\item 
static constexpr mask\+\_\+type {\bfseries criterion\+\_\+check\+\_\+completed\+\_\+mask} \{mask\+\_\+type\{1\} $<$$<$ 20\}
\item 
static constexpr \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type}} {\bfseries iteration\+\_\+complete} \{21\}
\item 
static constexpr mask\+\_\+type {\bfseries iteration\+\_\+complete\+\_\+mask} \{mask\+\_\+type\{1\} $<$$<$ 21\}
\item 
static constexpr \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type}} {\bfseries polymorphic\+\_\+object\+\_\+move\+\_\+started} \{22\}
\item 
static constexpr mask\+\_\+type {\bfseries polymorphic\+\_\+object\+\_\+move\+\_\+started\+\_\+mask} \{mask\+\_\+type\{1\} $<$$<$ 22\}
\item 
static constexpr \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type}} {\bfseries polymorphic\+\_\+object\+\_\+move\+\_\+completed} \{23\}
\item 
static constexpr mask\+\_\+type {\bfseries polymorphic\+\_\+object\+\_\+move\+\_\+completed\+\_\+mask} \{mask\+\_\+type\{1\} $<$$<$ 23\}
\item 
static constexpr \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type}} {\bfseries batch\+\_\+linop\+\_\+factory\+\_\+generate\+\_\+started} \{24\}
\item 
static constexpr mask\+\_\+type {\bfseries batch\+\_\+linop\+\_\+factory\+\_\+generate\+\_\+started\+\_\+mask} \{mask\+\_\+type\{1\} $<$$<$ 24\}
\item 
static constexpr \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type}} {\bfseries batch\+\_\+linop\+\_\+factory\+\_\+generate\+\_\+completed} \{25\}
\item 
static constexpr mask\+\_\+type {\bfseries batch\+\_\+linop\+\_\+factory\+\_\+generate\+\_\+completed\+\_\+mask} \{mask\+\_\+type\{1\} $<$$<$ 25\}
\item 
static constexpr \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type}} {\bfseries batch\+\_\+solver\+\_\+completed} \{26\}
\item 
static constexpr mask\+\_\+type {\bfseries batch\+\_\+solver\+\_\+completed\+\_\+mask} \{mask\+\_\+type\{1\} $<$$<$ 26\}
\item 
static constexpr mask\+\_\+type \doxymbox{\hyperlink{classgko_1_1log_1_1Logger_af263708ebb15007bc0086e7c438c190c}{executor\+\_\+events\+\_\+mask}}
\begin{DoxyCompactList}\small\item\em Bitset Mask which activates all executor events. \end{DoxyCompactList}\item 
static constexpr mask\+\_\+type \doxymbox{\hyperlink{classgko_1_1log_1_1Logger_a179f3d3ac86782922cbc63e33272840a}{operation\+\_\+events\+\_\+mask}}
\begin{DoxyCompactList}\small\item\em Bitset Mask which activates all operation events. \end{DoxyCompactList}\item 
static constexpr mask\+\_\+type \doxymbox{\hyperlink{classgko_1_1log_1_1Logger_a5fb997f1c06c0602103d8dab616a96bc}{polymorphic\+\_\+object\+\_\+events\+\_\+mask}}
\begin{DoxyCompactList}\small\item\em Bitset Mask which activates all polymorphic object events. \end{DoxyCompactList}\item 
static constexpr mask\+\_\+type \doxymbox{\hyperlink{classgko_1_1log_1_1Logger_a3e75086ec35aea9d9c0ade7774bfc1ba}{linop\+\_\+events\+\_\+mask}}
\begin{DoxyCompactList}\small\item\em Bitset Mask which activates all linop events. \end{DoxyCompactList}\item 
static constexpr mask\+\_\+type \doxymbox{\hyperlink{classgko_1_1log_1_1Logger_ad6fb77d4d5610bc7299087f7149a7f16}{linop\+\_\+factory\+\_\+events\+\_\+mask}}
\begin{DoxyCompactList}\small\item\em Bitset Mask which activates all linop factory events. \end{DoxyCompactList}\item 
static constexpr mask\+\_\+type \doxymbox{\hyperlink{classgko_1_1log_1_1Logger_a3a6ea4ed2e7b25cd1ca869e4d3bdb07a}{batch\+\_\+linop\+\_\+factory\+\_\+events\+\_\+mask}}
\begin{DoxyCompactList}\small\item\em Bitset Mask which activates all batch linop factory events. \end{DoxyCompactList}\item 
static constexpr mask\+\_\+type \doxymbox{\hyperlink{classgko_1_1log_1_1Logger_a7f4ac79625bd3f0287230236013f6048}{criterion\+\_\+events\+\_\+mask}}
\begin{DoxyCompactList}\small\item\em Bitset Mask which activates all criterion events. \end{DoxyCompactList}\end{DoxyCompactItemize}


\doxysubsection{Detailed Description}
\doxylink{classgko_1_1log_1_1PerformanceHint}{Performance\+Hint} is a \doxylink{classgko_1_1log_1_1Logger}{Logger} which analyzes the performance of the application and outputs hints for unnecessary copies and allocations. 

The specific patterns it checks for are:\+
\begin{DoxyItemize}
\item repeated cross-\/executor copies from or to the same pointer
\item repeated allocation/\+free pairs of the same size 
\end{DoxyItemize}

\label{doc-func-members}
\Hypertarget{classgko_1_1log_1_1PerformanceHint_doc-func-members}
\doxysubsection{Member Function Documentation}
\Hypertarget{classgko_1_1log_1_1PerformanceHint_ac57a0a98f2a0320d01805724abbd2249}\index{gko::log::PerformanceHint@{gko::log::PerformanceHint}!create@{create}}
\index{create@{create}!gko::log::PerformanceHint@{gko::log::PerformanceHint}}
\doxysubsubsection{\texorpdfstring{create()}{create()}}
{\footnotesize\ttfamily \label{classgko_1_1log_1_1PerformanceHint_ac57a0a98f2a0320d01805724abbd2249} 
std::\+unique\+\_\+ptr$<$ Performance\+Hint $>$ gko::\+log::\+\+Performance\+Hint::\+create (\begin{DoxyParamCaption}\item[{std::\+ostream \&}]{os}{ = {\ttfamily std:\+:\+cerr}, }\item[{\doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type}}}]{allocation\+\_\+size\+\_\+limit}{ = {\ttfamily 16}, }\item[{\doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type}}}]{copy\+\_\+size\+\_\+limit}{ = {\ttfamily 16}, }\item[{\doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type}}}]{histogram\+\_\+max\+\_\+size}{ = {\ttfamily 1024}}\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [static]}}



Creates a \doxylink{classgko_1_1log_1_1PerformanceHint}{Performance\+Hint} logger. 

This dynamically allocates the memory, constructs the object and returns an std::\+unique\+\_\+ptr to this object.


\begin{DoxyParams}{Parameters}
{\em os} & the stream used for this logger \\
\hline
{\em allocation\+\_\+size\+\_\+limit} & ignore allocations below this limit (bytes) \\
\hline
{\em copy\+\_\+size\+\_\+limit} & ignore copies below this limit (bytes) \\
\hline
{\em histogram\+\_\+max\+\_\+size} & how many allocation sizes and/\+or pointers to keep track of at most?\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
an std::\+unique\+\_\+ptr to the the constructed object 
\end{DoxyReturn}
\Hypertarget{classgko_1_1log_1_1PerformanceHint_aa3bd3b91c24a67ea52350f1ebcfe43ff}\index{gko::log::PerformanceHint@{gko::log::PerformanceHint}!on\_allocation\_completed@{on\_allocation\_completed}}
\index{on\_allocation\_completed@{on\_allocation\_completed}!gko::log::PerformanceHint@{gko::log::PerformanceHint}}
\doxysubsubsection{\texorpdfstring{on\_allocation\_completed()}{on\_allocation\_completed()}}
{\footnotesize\ttfamily \label{classgko_1_1log_1_1PerformanceHint_aa3bd3b91c24a67ea52350f1ebcfe43ff} 
void gko::\+log::\+\+Performance\+Hint::\+on\+\_\+allocation\+\_\+completed (\begin{DoxyParamCaption}\item[{const \doxymbox{\hyperlink{classgko_1_1Executor}{Executor}} \texorpdfstring{$\ast$}{*}}]{exec}{, }\item[{const \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type}} \&}]{num\+\_\+bytes}{, }\item[{const \doxymbox{\hyperlink{namespacegko_a70648f1299a0c1297e2bf86f47264626}{uintptr}} \&}]{location}{}\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [override]}, {\ttfamily [virtual]}}



\doxylink{classgko_1_1Executor}{Executor}\textquotesingle{}s allocation completed event. 


\begin{DoxyParams}{Parameters}
{\em exec} & the executor used \\
\hline
{\em num\+\_\+bytes} & the number of bytes allocated \\
\hline
{\em location} & the address at which the data was allocated \\
\hline
\end{DoxyParams}


Reimplemented from \doxymbox{\hyperlink{classgko_1_1log_1_1Logger}{gko::\+log::\+\+Logger}}.

\Hypertarget{classgko_1_1log_1_1PerformanceHint_ac903d32fd9cc4cb6fa8265f9cf57c78a}\index{gko::log::PerformanceHint@{gko::log::PerformanceHint}!on\_copy\_completed@{on\_copy\_completed}}
\index{on\_copy\_completed@{on\_copy\_completed}!gko::log::PerformanceHint@{gko::log::PerformanceHint}}
\doxysubsubsection{\texorpdfstring{on\_copy\_completed()}{on\_copy\_completed()}}
{\footnotesize\ttfamily \label{classgko_1_1log_1_1PerformanceHint_ac903d32fd9cc4cb6fa8265f9cf57c78a} 
void gko::\+log::\+\+Performance\+Hint::\+on\+\_\+copy\+\_\+completed (\begin{DoxyParamCaption}\item[{const \doxymbox{\hyperlink{classgko_1_1Executor}{Executor}} \texorpdfstring{$\ast$}{*}}]{exec\+\_\+from}{, }\item[{const \doxymbox{\hyperlink{classgko_1_1Executor}{Executor}} \texorpdfstring{$\ast$}{*}}]{exec\+\_\+to}{, }\item[{const \doxymbox{\hyperlink{namespacegko_a70648f1299a0c1297e2bf86f47264626}{uintptr}} \&}]{loc\+\_\+from}{, }\item[{const \doxymbox{\hyperlink{namespacegko_a70648f1299a0c1297e2bf86f47264626}{uintptr}} \&}]{loc\+\_\+to}{, }\item[{const \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type}} \&}]{num\+\_\+bytes}{}\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [override]}, {\ttfamily [virtual]}}



\doxylink{classgko_1_1Executor}{Executor}\textquotesingle{}s copy completed event. 


\begin{DoxyParams}{Parameters}
{\em exec\+\_\+from} & the executor copied from \\
\hline
{\em exec\+\_\+to} & the executor copied to \\
\hline
{\em loc\+\_\+from} & the address at which the data was copied from \\
\hline
{\em loc\+\_\+to} & the address at which the data was copied to \\
\hline
{\em num\+\_\+bytes} & the number of bytes copied \\
\hline
\end{DoxyParams}


Reimplemented from \doxymbox{\hyperlink{classgko_1_1log_1_1Logger}{gko::\+log::\+\+Logger}}.

\Hypertarget{classgko_1_1log_1_1PerformanceHint_a620e8a379028087ef250cc6f9cb87e74}\index{gko::log::PerformanceHint@{gko::log::PerformanceHint}!on\_free\_completed@{on\_free\_completed}}
\index{on\_free\_completed@{on\_free\_completed}!gko::log::PerformanceHint@{gko::log::PerformanceHint}}
\doxysubsubsection{\texorpdfstring{on\_free\_completed()}{on\_free\_completed()}}
{\footnotesize\ttfamily \label{classgko_1_1log_1_1PerformanceHint_a620e8a379028087ef250cc6f9cb87e74} 
void gko::\+log::\+\+Performance\+Hint::\+on\+\_\+free\+\_\+completed (\begin{DoxyParamCaption}\item[{const \doxymbox{\hyperlink{classgko_1_1Executor}{Executor}} \texorpdfstring{$\ast$}{*}}]{exec}{, }\item[{const \doxymbox{\hyperlink{namespacegko_a70648f1299a0c1297e2bf86f47264626}{uintptr}} \&}]{location}{}\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [override]}, {\ttfamily [virtual]}}



\doxylink{classgko_1_1Executor}{Executor}\textquotesingle{}s free completed event. 


\begin{DoxyParams}{Parameters}
{\em exec} & the executor used \\
\hline
{\em location} & the address at which the data was freed \\
\hline
\end{DoxyParams}


Reimplemented from \doxymbox{\hyperlink{classgko_1_1log_1_1Logger}{gko::\+log::\+\+Logger}}.



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