\doxysection{csr.\+hpp}
\hypertarget{csr_8hpp_source}{}\label{csr_8hpp_source}\index{ginkgo/core/matrix/csr.hpp@{ginkgo/core/matrix/csr.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\_MATRIX\_CSR\_HPP\_}}
\DoxyCodeLine{00006\ \textcolor{preprocessor}{\#define\ GKO\_PUBLIC\_CORE\_MATRIX\_CSR\_HPP\_}}
\DoxyCodeLine{00007\ }
\DoxyCodeLine{00008\ }
\DoxyCodeLine{00009\ \textcolor{preprocessor}{\#include\ <ginkgo/core/base/array.hpp>}}
\DoxyCodeLine{00010\ \textcolor{preprocessor}{\#include\ <ginkgo/core/base/index\_set.hpp>}}
\DoxyCodeLine{00011\ \textcolor{preprocessor}{\#include\ <ginkgo/core/base/lin\_op.hpp>}}
\DoxyCodeLine{00012\ \textcolor{preprocessor}{\#include\ <ginkgo/core/base/math.hpp>}}
\DoxyCodeLine{00013\ \textcolor{preprocessor}{\#include\ <ginkgo/core/matrix/permutation.hpp>}}
\DoxyCodeLine{00014\ \textcolor{preprocessor}{\#include\ <ginkgo/core/matrix/scaled\_permutation.hpp>}}
\DoxyCodeLine{00015\ }
\DoxyCodeLine{00016\ }
\DoxyCodeLine{00017\ \textcolor{keyword}{namespace\ }\doxymbox{\hyperlink{namespacegko}{gko}}\ \{}
\DoxyCodeLine{00018\ \textcolor{keyword}{namespace\ }\doxymbox{\hyperlink{namespacegko_1_1matrix}{matrix}}\ \{}
\DoxyCodeLine{00019\ }
\DoxyCodeLine{00020\ }
\DoxyCodeLine{00021\ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ ValueType>}
\DoxyCodeLine{00022\ \textcolor{keyword}{class\ }\doxymbox{\hyperlink{classgko_1_1matrix_1_1Dense}{Dense}};}
\DoxyCodeLine{00023\ }
\DoxyCodeLine{00024\ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ ValueType>}
\DoxyCodeLine{00025\ \textcolor{keyword}{class\ }\doxymbox{\hyperlink{classgko_1_1matrix_1_1Diagonal}{Diagonal}};}
\DoxyCodeLine{00026\ }
\DoxyCodeLine{00027\ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ ValueType,\ \textcolor{keyword}{typename}\ IndexType>}
\DoxyCodeLine{00028\ \textcolor{keyword}{class\ }\doxymbox{\hyperlink{classgko_1_1matrix_1_1Coo}{Coo}};}
\DoxyCodeLine{00029\ }
\DoxyCodeLine{00030\ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ ValueType,\ \textcolor{keyword}{typename}\ IndexType>}
\DoxyCodeLine{00031\ \textcolor{keyword}{class\ }\doxymbox{\hyperlink{classgko_1_1matrix_1_1Ell}{Ell}};}
\DoxyCodeLine{00032\ }
\DoxyCodeLine{00033\ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ ValueType,\ \textcolor{keyword}{typename}\ IndexType>}
\DoxyCodeLine{00034\ \textcolor{keyword}{class\ }\doxymbox{\hyperlink{classgko_1_1matrix_1_1Hybrid}{Hybrid}};}
\DoxyCodeLine{00035\ }
\DoxyCodeLine{00036\ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ ValueType,\ \textcolor{keyword}{typename}\ IndexType>}
\DoxyCodeLine{00037\ \textcolor{keyword}{class\ }\doxymbox{\hyperlink{classgko_1_1matrix_1_1Sellp}{Sellp}};}
\DoxyCodeLine{00038\ }
\DoxyCodeLine{00039\ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ ValueType,\ \textcolor{keyword}{typename}\ IndexType>}
\DoxyCodeLine{00040\ \textcolor{keyword}{class\ }\doxymbox{\hyperlink{classgko_1_1matrix_1_1SparsityCsr}{SparsityCsr}};}
\DoxyCodeLine{00041\ }
\DoxyCodeLine{00042\ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ ValueType,\ \textcolor{keyword}{typename}\ IndexType>}
\DoxyCodeLine{00043\ \textcolor{keyword}{class\ }\doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr}{Csr}};}
\DoxyCodeLine{00044\ }
\DoxyCodeLine{00045\ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ ValueType,\ \textcolor{keyword}{typename}\ IndexType>}
\DoxyCodeLine{00046\ \textcolor{keyword}{class\ }\doxymbox{\hyperlink{classgko_1_1matrix_1_1Fbcsr}{Fbcsr}};}
\DoxyCodeLine{00047\ }
\DoxyCodeLine{00048\ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ ValueType,\ \textcolor{keyword}{typename}\ IndexType>}
\DoxyCodeLine{00049\ \textcolor{keyword}{class\ }\doxymbox{\hyperlink{classgko_1_1matrix_1_1CsrBuilder}{CsrBuilder}};}
\DoxyCodeLine{00050\ }
\DoxyCodeLine{00051\ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ IndexType>}
\DoxyCodeLine{00052\ \textcolor{keyword}{class\ }\doxymbox{\hyperlink{classgko_1_1matrix_1_1Permutation}{Permutation}};}
\DoxyCodeLine{00053\ }
\DoxyCodeLine{00054\ }
\DoxyCodeLine{00055\ \textcolor{keyword}{namespace\ }detail\ \{}
\DoxyCodeLine{00056\ }
\DoxyCodeLine{00057\ }
\DoxyCodeLine{00058\ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ ValueType\ =\ default\_precision,\ \textcolor{keyword}{typename}\ IndexType\ =\ \textcolor{keywordtype}{int}32>}
\DoxyCodeLine{00059\ \textcolor{keywordtype}{void}\ strategy\_rebuild\_helper(\doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr}{Csr<ValueType,\ IndexType>}}*\ result);}
\DoxyCodeLine{00060\ }
\DoxyCodeLine{00061\ }
\DoxyCodeLine{00062\ \}\ \ \textcolor{comment}{//\ namespace\ detail}}
\DoxyCodeLine{00063\ }
\DoxyCodeLine{00064\ }
\DoxyCodeLine{00103\ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ ValueType\ =\ default\_precision,\ \textcolor{keyword}{typename}\ IndexType\ =\ \textcolor{keywordtype}{int}32>}
\DoxyCodeLine{00104\ \textcolor{keyword}{class\ }\doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_a9094bdf34a8c56f115252f0fe5a7f5ae}{Csr}}\ :\ \textcolor{keyword}{public}\ \doxymbox{\hyperlink{classgko_1_1EnableLinOp}{EnableLinOp}}<Csr<ValueType,\ IndexType>>,}
\DoxyCodeLine{00105\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{public}\ ConvertibleTo<Csr<next\_precision<ValueType>,\ IndexType>>,}
\DoxyCodeLine{00106\ \textcolor{preprocessor}{\#if\ GINKGO\_ENABLE\_HALF\ ||\ GINKGO\_ENABLE\_BFLOAT16}}
\DoxyCodeLine{00107\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{public}\ ConvertibleTo<Csr<next\_precision<ValueType,\ 2>,\ IndexType>>,}
\DoxyCodeLine{00108\ \textcolor{preprocessor}{\#endif}}
\DoxyCodeLine{00109\ \textcolor{preprocessor}{\#if\ GINKGO\_ENABLE\_HALF\ \&\&\ GINKGO\_ENABLE\_BFLOAT16}}
\DoxyCodeLine{00110\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{public}\ ConvertibleTo<Csr<next\_precision<ValueType,\ 3>,\ IndexType>>,}
\DoxyCodeLine{00111\ \textcolor{preprocessor}{\#endif}}
\DoxyCodeLine{00112\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{public}\ ConvertibleTo<Dense<ValueType>>,}
\DoxyCodeLine{00113\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{public}\ ConvertibleTo<Coo<ValueType,\ IndexType>>,}
\DoxyCodeLine{00114\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{public}\ ConvertibleTo<Ell<ValueType,\ IndexType>>,}
\DoxyCodeLine{00115\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{public}\ ConvertibleTo<Fbcsr<ValueType,\ IndexType>>,}
\DoxyCodeLine{00116\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{public}\ ConvertibleTo<Hybrid<ValueType,\ IndexType>>,}
\DoxyCodeLine{00117\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{public}\ ConvertibleTo<Sellp<ValueType,\ IndexType>>,}
\DoxyCodeLine{00118\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{public}\ ConvertibleTo<SparsityCsr<ValueType,\ IndexType>>,}
\DoxyCodeLine{00119\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{public}\ \doxymbox{\hyperlink{classgko_1_1DiagonalExtractable}{DiagonalExtractable}}<ValueType>,}
\DoxyCodeLine{00120\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{public}\ \doxymbox{\hyperlink{classgko_1_1ReadableFromMatrixData}{ReadableFromMatrixData}}<ValueType,\ IndexType>,}
\DoxyCodeLine{00121\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{public}\ \doxymbox{\hyperlink{classgko_1_1WritableToMatrixData}{WritableToMatrixData}}<ValueType,\ IndexType>,}
\DoxyCodeLine{00122\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{public}\ \doxymbox{\hyperlink{classgko_1_1Transposable}{Transposable}},}
\DoxyCodeLine{00123\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{public}\ \doxymbox{\hyperlink{classgko_1_1Permutable}{Permutable}}<IndexType>,}
\DoxyCodeLine{00124\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{public}\ \doxymbox{\hyperlink{classgko_1_1EnableAbsoluteComputation}{EnableAbsoluteComputation}}<}
\DoxyCodeLine{00125\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ remove\_complex<Csr<ValueType,\ IndexType>>>,}
\DoxyCodeLine{00126\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{public}\ \doxymbox{\hyperlink{classgko_1_1ScaledIdentityAddable}{ScaledIdentityAddable}}\ \{}
\DoxyCodeLine{00127\ \ \ \ \ \textcolor{keyword}{friend}\ \textcolor{keyword}{class\ }\doxymbox{\hyperlink{classgko_1_1EnablePolymorphicObject}{EnablePolymorphicObject}}<\doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_a9094bdf34a8c56f115252f0fe5a7f5ae}{Csr}},\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}>;}
\DoxyCodeLine{00128\ \ \ \ \ \textcolor{keyword}{friend}\ \textcolor{keyword}{class\ }\doxymbox{\hyperlink{classgko_1_1matrix_1_1Coo}{Coo}}<ValueType,\ IndexType>;}
\DoxyCodeLine{00129\ \ \ \ \ \textcolor{keyword}{friend}\ \textcolor{keyword}{class\ }\doxymbox{\hyperlink{classgko_1_1matrix_1_1Dense}{Dense}}<ValueType>;}
\DoxyCodeLine{00130\ \ \ \ \ \textcolor{keyword}{friend}\ \textcolor{keyword}{class\ }\doxymbox{\hyperlink{classgko_1_1matrix_1_1Diagonal}{Diagonal}}<ValueType>;}
\DoxyCodeLine{00131\ \ \ \ \ \textcolor{keyword}{friend}\ \textcolor{keyword}{class\ }\doxymbox{\hyperlink{classgko_1_1matrix_1_1Ell}{Ell}}<ValueType,\ IndexType>;}
\DoxyCodeLine{00132\ \ \ \ \ \textcolor{keyword}{friend}\ \textcolor{keyword}{class\ }\doxymbox{\hyperlink{classgko_1_1matrix_1_1Hybrid}{Hybrid}}<ValueType,\ IndexType>;}
\DoxyCodeLine{00133\ \ \ \ \ \textcolor{keyword}{friend}\ \textcolor{keyword}{class\ }\doxymbox{\hyperlink{classgko_1_1matrix_1_1Sellp}{Sellp}}<ValueType,\ IndexType>;}
\DoxyCodeLine{00134\ \ \ \ \ \textcolor{keyword}{friend}\ \textcolor{keyword}{class\ }\doxymbox{\hyperlink{classgko_1_1matrix_1_1SparsityCsr}{SparsityCsr}}<ValueType,\ IndexType>;}
\DoxyCodeLine{00135\ \ \ \ \ \textcolor{keyword}{friend}\ \textcolor{keyword}{class\ }\doxymbox{\hyperlink{classgko_1_1matrix_1_1Fbcsr}{Fbcsr}}<ValueType,\ IndexType>;}
\DoxyCodeLine{00136\ \ \ \ \ \textcolor{keyword}{friend}\ \textcolor{keyword}{class\ }\doxymbox{\hyperlink{classgko_1_1matrix_1_1CsrBuilder}{CsrBuilder}}<ValueType,\ IndexType>;}
\DoxyCodeLine{00137\ \ \ \ \ \textcolor{keyword}{friend}\ \textcolor{keyword}{class\ }\doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_a9094bdf34a8c56f115252f0fe5a7f5ae}{Csr}}<\doxymbox{\hyperlink{namespacegko_a4ad20e5381a84928753efde0b2bc7f85}{to\_complex}}<ValueType>,\ IndexType>;}
\DoxyCodeLine{00138\ \ \ \ \ GKO\_ASSERT\_SUPPORTED\_VALUE\_AND\_INDEX\_TYPE;}
\DoxyCodeLine{00139\ }
\DoxyCodeLine{00140\ \textcolor{keyword}{public}:}
\DoxyCodeLine{00141\ \ \ \ \ \textcolor{keyword}{using\ }\doxymbox{\hyperlink{classgko_1_1EnableLinOp}{EnableLinOp}}<\doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_a9094bdf34a8c56f115252f0fe5a7f5ae}{Csr}}>::convert\_to;}
\DoxyCodeLine{00142\ \ \ \ \ \textcolor{keyword}{using\ }\doxymbox{\hyperlink{classgko_1_1EnableLinOp}{EnableLinOp}}<\doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_a9094bdf34a8c56f115252f0fe5a7f5ae}{Csr}}>::move\_to;}
\DoxyCodeLine{00143\ \ \ \ \ \textcolor{keyword}{using\ }ConvertibleTo<\doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_a9094bdf34a8c56f115252f0fe5a7f5ae}{Csr<next\_precision<ValueType>}},\ IndexType>>::convert\_to;}
\DoxyCodeLine{00144\ \ \ \ \ \textcolor{keyword}{using\ }ConvertibleTo<\doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_a9094bdf34a8c56f115252f0fe5a7f5ae}{Csr<next\_precision<ValueType>}},\ IndexType>>::move\_to;}
\DoxyCodeLine{00145\ \ \ \ \ \textcolor{keyword}{using\ }ConvertibleTo<\doxymbox{\hyperlink{classgko_1_1matrix_1_1Dense}{Dense<ValueType>}}>::convert\_to;}
\DoxyCodeLine{00146\ \ \ \ \ \textcolor{keyword}{using\ }ConvertibleTo<\doxymbox{\hyperlink{classgko_1_1matrix_1_1Dense}{Dense<ValueType>}}>::move\_to;}
\DoxyCodeLine{00147\ \ \ \ \ \textcolor{keyword}{using\ }ConvertibleTo<\doxymbox{\hyperlink{classgko_1_1matrix_1_1Coo}{Coo<ValueType,\ IndexType>}}>::convert\_to;}
\DoxyCodeLine{00148\ \ \ \ \ \textcolor{keyword}{using\ }ConvertibleTo<\doxymbox{\hyperlink{classgko_1_1matrix_1_1Coo}{Coo<ValueType,\ IndexType>}}>::move\_to;}
\DoxyCodeLine{00149\ \ \ \ \ \textcolor{keyword}{using\ }ConvertibleTo<\doxymbox{\hyperlink{classgko_1_1matrix_1_1Ell}{Ell<ValueType,\ IndexType>}}>::convert\_to;}
\DoxyCodeLine{00150\ \ \ \ \ \textcolor{keyword}{using\ }ConvertibleTo<\doxymbox{\hyperlink{classgko_1_1matrix_1_1Ell}{Ell<ValueType,\ IndexType>}}>::move\_to;}
\DoxyCodeLine{00151\ \ \ \ \ \textcolor{keyword}{using\ }ConvertibleTo<\doxymbox{\hyperlink{classgko_1_1matrix_1_1Fbcsr}{Fbcsr<ValueType,\ IndexType>}}>::convert\_to;}
\DoxyCodeLine{00152\ \ \ \ \ \textcolor{keyword}{using\ }ConvertibleTo<\doxymbox{\hyperlink{classgko_1_1matrix_1_1Fbcsr}{Fbcsr<ValueType,\ IndexType>}}>::move\_to;}
\DoxyCodeLine{00153\ \ \ \ \ \textcolor{keyword}{using\ }ConvertibleTo<\doxymbox{\hyperlink{classgko_1_1matrix_1_1Hybrid}{Hybrid<ValueType,\ IndexType>}}>::convert\_to;}
\DoxyCodeLine{00154\ \ \ \ \ \textcolor{keyword}{using\ }ConvertibleTo<\doxymbox{\hyperlink{classgko_1_1matrix_1_1Hybrid}{Hybrid<ValueType,\ IndexType>}}>::move\_to;}
\DoxyCodeLine{00155\ \ \ \ \ \textcolor{keyword}{using\ }ConvertibleTo<\doxymbox{\hyperlink{classgko_1_1matrix_1_1Sellp}{Sellp<ValueType,\ IndexType>}}>::convert\_to;}
\DoxyCodeLine{00156\ \ \ \ \ \textcolor{keyword}{using\ }ConvertibleTo<\doxymbox{\hyperlink{classgko_1_1matrix_1_1Sellp}{Sellp<ValueType,\ IndexType>}}>::move\_to;}
\DoxyCodeLine{00157\ \ \ \ \ \textcolor{keyword}{using\ }ConvertibleTo<\doxymbox{\hyperlink{classgko_1_1matrix_1_1SparsityCsr}{SparsityCsr<ValueType,\ IndexType>}}>::convert\_to;}
\DoxyCodeLine{00158\ \ \ \ \ \textcolor{keyword}{using\ }ConvertibleTo<\doxymbox{\hyperlink{classgko_1_1matrix_1_1SparsityCsr}{SparsityCsr<ValueType,\ IndexType>}}>::move\_to;}
\DoxyCodeLine{00159\ \ \ \ \ \textcolor{keyword}{using\ }\doxymbox{\hyperlink{classgko_1_1ReadableFromMatrixData}{ReadableFromMatrixData}}<ValueType,\ IndexType>::read;}
\DoxyCodeLine{00160\ }
\DoxyCodeLine{00161\ \ \ \ \ \textcolor{keyword}{using\ }value\_type\ =\ ValueType;}
\DoxyCodeLine{00162\ \ \ \ \ \textcolor{keyword}{using\ }index\_type\ =\ IndexType;}
\DoxyCodeLine{00163\ \ \ \ \ \textcolor{keyword}{using\ }transposed\_type\ =\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_a9094bdf34a8c56f115252f0fe5a7f5ae}{Csr<ValueType,\ IndexType>}};}
\DoxyCodeLine{00164\ \ \ \ \ \textcolor{keyword}{using\ }mat\_data\ =\ \doxymbox{\hyperlink{structgko_1_1matrix__data}{matrix\_data<ValueType,\ IndexType>}};}
\DoxyCodeLine{00165\ \ \ \ \ \textcolor{keyword}{using\ }device\_mat\_data\ =\ \doxymbox{\hyperlink{classgko_1_1device__matrix__data}{device\_matrix\_data<ValueType,\ IndexType>}};}
\DoxyCodeLine{00166\ \ \ \ \ \textcolor{keyword}{using\ }absolute\_type\ =\ \doxymbox{\hyperlink{namespacegko_a107302a750bfa82a2107c77293f791c9}{remove\_complex<Csr>}};}
\DoxyCodeLine{00167\ }
\DoxyCodeLine{00168\ \ \ \ \ \textcolor{keyword}{class\ }\doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_1_1automatical}{automatical}};}
\DoxyCodeLine{00169\ }
\DoxyCodeLine{00176\ \ \ \ \ \textcolor{keyword}{class\ }\doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_1_1strategy__type_aae6804f7a0b899f03bc0d5e0f139129c}{strategy\_type}}\ \{}
\DoxyCodeLine{00177\ \ \ \ \ \ \ \ \ \textcolor{keyword}{friend}\ \textcolor{keyword}{class\ }automatical;}
\DoxyCodeLine{00178\ }
\DoxyCodeLine{00179\ \ \ \ \ \textcolor{keyword}{public}:}
\DoxyCodeLine{00185\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_1_1strategy__type_aae6804f7a0b899f03bc0d5e0f139129c}{strategy\_type}}(std::string\ name)\ :\ name\_(name)\ \{\}}
\DoxyCodeLine{00186\ }
\DoxyCodeLine{00187\ \ \ \ \ \ \ \ \ \textcolor{keyword}{virtual}\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_1_1strategy__type}{\string~strategy\_type}}()\ =\ \textcolor{keywordflow}{default};}
\DoxyCodeLine{00188\ }
\DoxyCodeLine{00194\ \ \ \ \ \ \ \ \ std::string\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_1_1strategy__type_a0c22b251b0c1dfd087a5c097488febe0}{get\_name}}()\ \{\ \textcolor{keywordflow}{return}\ name\_;\ \}}
\DoxyCodeLine{00195\ }
\DoxyCodeLine{00202\ \ \ \ \ \ \ \ \ \textcolor{keyword}{virtual}\ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_1_1strategy__type_a99ea39b16f0c281fdaf8c559f670c10b}{process}}(\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1array}{array<index\_type>}}\&\ mtx\_row\_ptrs,}
\DoxyCodeLine{00203\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1array}{array<index\_type>}}*\ mtx\_srow)\ =\ 0;}
\DoxyCodeLine{00204\ }
\DoxyCodeLine{00212\ \ \ \ \ \ \ \ \ \textcolor{keyword}{virtual}\ int64\_t\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_1_1strategy__type_a07a6dda9dd04ed8abd914f3a69f330f2}{clac\_size}}(\textcolor{keyword}{const}\ int64\_t\ nnz)\ =\ 0;}
\DoxyCodeLine{00213\ }
\DoxyCodeLine{00218\ \ \ \ \ \ \ \ \ \textcolor{keyword}{virtual}\ std::shared\_ptr<strategy\_type>\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_1_1strategy__type_a7d1561856f7ae17ca5e39076cb6c4207}{copy}}()\ =\ 0;}
\DoxyCodeLine{00219\ }
\DoxyCodeLine{00220\ \ \ \ \ \textcolor{keyword}{protected}:}
\DoxyCodeLine{00221\ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{void}\ set\_name(std::string\ name)\ \{\ name\_\ =\ name;\ \}}
\DoxyCodeLine{00222\ }
\DoxyCodeLine{00223\ \ \ \ \ \textcolor{keyword}{private}:}
\DoxyCodeLine{00224\ \ \ \ \ \ \ \ \ std::string\ name\_;}
\DoxyCodeLine{00225\ \ \ \ \ \};}
\DoxyCodeLine{00226\ }
\DoxyCodeLine{00233\ \ \ \ \ \textcolor{keyword}{class\ }\doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_1_1classical_a98620198be4dc96d661b7bd1007407b2}{classical}}\ :\ \textcolor{keyword}{public}\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_1_1strategy__type_aae6804f7a0b899f03bc0d5e0f139129c}{strategy\_type}}\ \{}
\DoxyCodeLine{00234\ \ \ \ \ \textcolor{keyword}{public}:}
\DoxyCodeLine{00238\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_1_1classical_a98620198be4dc96d661b7bd1007407b2}{classical}}()\ :\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_1_1strategy__type_aae6804f7a0b899f03bc0d5e0f139129c}{strategy\_type}}(\textcolor{stringliteral}{"{}classical"{}}),\ max\_length\_per\_row\_(0)\ \{\}}
\DoxyCodeLine{00239\ }
\DoxyCodeLine{00240\ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_1_1classical_a2740db9fa954cb7f8f4145a1f87f82a6}{process}}(\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1array}{array<index\_type>}}\&\ mtx\_row\_ptrs,}
\DoxyCodeLine{00241\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1array}{array<index\_type>}}*\ mtx\_srow)\textcolor{keyword}{\ override}}
\DoxyCodeLine{00242\ \textcolor{keyword}{\ \ \ \ \ \ \ \ }\{}
\DoxyCodeLine{00243\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{auto}\ host\_mtx\_exec\ =\ mtx\_row\_ptrs.\doxymbox{\hyperlink{classgko_1_1array_a169a0f4e9fc1aa81b8e7fef15de57af7}{get\_executor}}()-\/>get\_master();}
\DoxyCodeLine{00244\ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1array}{array<index\_type>}}\ row\_ptrs\_host(host\_mtx\_exec);}
\DoxyCodeLine{00245\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \textcolor{keywordtype}{bool}\ is\_mtx\_on\_host\{host\_mtx\_exec\ ==}
\DoxyCodeLine{00246\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ mtx\_row\_ptrs.\doxymbox{\hyperlink{classgko_1_1array_a169a0f4e9fc1aa81b8e7fef15de57af7}{get\_executor}}()\};}
\DoxyCodeLine{00247\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ index\_type*\ row\_ptrs\{\};}
\DoxyCodeLine{00248\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (is\_mtx\_on\_host)\ \{}
\DoxyCodeLine{00249\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ row\_ptrs\ =\ mtx\_row\_ptrs.\doxymbox{\hyperlink{classgko_1_1array_a699ce7bef6d2838c8acd10d04f775e2a}{get\_const\_data}}();}
\DoxyCodeLine{00250\ \ \ \ \ \ \ \ \ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \{}
\DoxyCodeLine{00251\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ row\_ptrs\_host\ =\ mtx\_row\_ptrs;}
\DoxyCodeLine{00252\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ row\_ptrs\ =\ row\_ptrs\_host.\doxymbox{\hyperlink{classgko_1_1array_a699ce7bef6d2838c8acd10d04f775e2a}{get\_const\_data}}();}
\DoxyCodeLine{00253\ \ \ \ \ \ \ \ \ \ \ \ \ \}}
\DoxyCodeLine{00254\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{auto}\ num\_rows\ =\ mtx\_row\_ptrs.\doxymbox{\hyperlink{classgko_1_1array_ad38e4c252d698a4581ffa0833ab98c3f}{get\_size}}()\ -\/\ 1;}
\DoxyCodeLine{00255\ \ \ \ \ \ \ \ \ \ \ \ \ max\_length\_per\_row\_\ =\ 0;}
\DoxyCodeLine{00256\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{for}\ (\doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\_type}}\ i\ =\ 0;\ i\ <\ num\_rows;\ i++)\ \{}
\DoxyCodeLine{00257\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ max\_length\_per\_row\_\ =\ std::max(max\_length\_per\_row\_,}
\DoxyCodeLine{00258\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ row\_ptrs[i\ +\ 1]\ -\/\ row\_ptrs[i]);}
\DoxyCodeLine{00259\ \ \ \ \ \ \ \ \ \ \ \ \ \}}
\DoxyCodeLine{00260\ \ \ \ \ \ \ \ \ \}}
\DoxyCodeLine{00261\ }
\DoxyCodeLine{00262\ \ \ \ \ \ \ \ \ int64\_t\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_1_1classical_ae99f47abc647f84793d9f84a9605a77d}{clac\_size}}(\textcolor{keyword}{const}\ int64\_t\ nnz)\textcolor{keyword}{\ override\ }\{\ \textcolor{keywordflow}{return}\ 0;\ \}}
\DoxyCodeLine{00263\ }
\DoxyCodeLine{00264\ \ \ \ \ \ \ \ \ index\_type\ get\_max\_length\_per\_row()\ const\ noexcept}
\DoxyCodeLine{00265\ \ \ \ \ \ \ \ \ \{}
\DoxyCodeLine{00266\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ max\_length\_per\_row\_;}
\DoxyCodeLine{00267\ \ \ \ \ \ \ \ \ \}}
\DoxyCodeLine{00268\ }
\DoxyCodeLine{00269\ \ \ \ \ \ \ \ \ std::shared\_ptr<strategy\_type>\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_1_1classical_a546d5af3262cd3bc1c201a0268d7fe28}{copy}}()\textcolor{keyword}{\ override}}
\DoxyCodeLine{00270\ \textcolor{keyword}{\ \ \ \ \ \ \ \ }\{}
\DoxyCodeLine{00271\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ std::make\_shared<classical>();}
\DoxyCodeLine{00272\ \ \ \ \ \ \ \ \ \}}
\DoxyCodeLine{00273\ }
\DoxyCodeLine{00274\ \ \ \ \ \textcolor{keyword}{private}:}
\DoxyCodeLine{00275\ \ \ \ \ \ \ \ \ index\_type\ max\_length\_per\_row\_;}
\DoxyCodeLine{00276\ \ \ \ \ \};}
\DoxyCodeLine{00277\ }
\DoxyCodeLine{00283\ \ \ \ \ \textcolor{keyword}{class\ }\doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_1_1merge__path_a3761055a7460cbdfb2fb330fda047e7a}{merge\_path}}\ :\ \textcolor{keyword}{public}\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_1_1strategy__type_aae6804f7a0b899f03bc0d5e0f139129c}{strategy\_type}}\ \{}
\DoxyCodeLine{00284\ \ \ \ \ \textcolor{keyword}{public}:}
\DoxyCodeLine{00288\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_1_1merge__path_a3761055a7460cbdfb2fb330fda047e7a}{merge\_path}}()\ :\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_1_1strategy__type_aae6804f7a0b899f03bc0d5e0f139129c}{strategy\_type}}(\textcolor{stringliteral}{"{}merge\_path"{}})\ \{\}}
\DoxyCodeLine{00289\ }
\DoxyCodeLine{00290\ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_1_1merge__path_a7e8f5961354e58eaf7f2c25031dbd65f}{process}}(\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1array}{array<index\_type>}}\&\ mtx\_row\_ptrs,}
\DoxyCodeLine{00291\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1array}{array<index\_type>}}*\ mtx\_srow)\textcolor{keyword}{\ override}}
\DoxyCodeLine{00292\ \textcolor{keyword}{\ \ \ \ \ \ \ \ }\{\}}
\DoxyCodeLine{00293\ }
\DoxyCodeLine{00294\ \ \ \ \ \ \ \ \ int64\_t\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_1_1merge__path_a2072b7810a1fbc515ca87807ed8adcdb}{clac\_size}}(\textcolor{keyword}{const}\ int64\_t\ nnz)\textcolor{keyword}{\ override\ }\{\ \textcolor{keywordflow}{return}\ 0;\ \}}
\DoxyCodeLine{00295\ }
\DoxyCodeLine{00296\ \ \ \ \ \ \ \ \ std::shared\_ptr<strategy\_type>\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_1_1merge__path_a35af6309c6fa366c55fd2059344b9ea6}{copy}}()\textcolor{keyword}{\ override}}
\DoxyCodeLine{00297\ \textcolor{keyword}{\ \ \ \ \ \ \ \ }\{}
\DoxyCodeLine{00298\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ std::make\_shared<merge\_path>();}
\DoxyCodeLine{00299\ \ \ \ \ \ \ \ \ \}}
\DoxyCodeLine{00300\ \ \ \ \ \};}
\DoxyCodeLine{00301\ }
\DoxyCodeLine{00308\ \ \ \ \ \textcolor{keyword}{class\ }\doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_1_1cusparse_a9aae722e5f5838291bf1f1798277a83c}{cusparse}}\ :\ \textcolor{keyword}{public}\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_1_1strategy__type_aae6804f7a0b899f03bc0d5e0f139129c}{strategy\_type}}\ \{}
\DoxyCodeLine{00309\ \ \ \ \ \textcolor{keyword}{public}:}
\DoxyCodeLine{00313\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_1_1cusparse_a9aae722e5f5838291bf1f1798277a83c}{cusparse}}()\ :\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_1_1strategy__type_aae6804f7a0b899f03bc0d5e0f139129c}{strategy\_type}}(\textcolor{stringliteral}{"{}cusparse"{}})\ \{\}}
\DoxyCodeLine{00314\ }
\DoxyCodeLine{00315\ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_1_1cusparse_af444511e48f557734dd79d93f064bda8}{process}}(\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1array}{array<index\_type>}}\&\ mtx\_row\_ptrs,}
\DoxyCodeLine{00316\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1array}{array<index\_type>}}*\ mtx\_srow)\textcolor{keyword}{\ override}}
\DoxyCodeLine{00317\ \textcolor{keyword}{\ \ \ \ \ \ \ \ }\{\}}
\DoxyCodeLine{00318\ }
\DoxyCodeLine{00319\ \ \ \ \ \ \ \ \ int64\_t\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_1_1cusparse_a094614c818d821cb0a71a4266fbef2d0}{clac\_size}}(\textcolor{keyword}{const}\ int64\_t\ nnz)\textcolor{keyword}{\ override\ }\{\ \textcolor{keywordflow}{return}\ 0;\ \}}
\DoxyCodeLine{00320\ }
\DoxyCodeLine{00321\ \ \ \ \ \ \ \ \ std::shared\_ptr<strategy\_type>\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_1_1cusparse_a639d2496cc83184d2960d3976fb1abca}{copy}}()\textcolor{keyword}{\ override}}
\DoxyCodeLine{00322\ \textcolor{keyword}{\ \ \ \ \ \ \ \ }\{}
\DoxyCodeLine{00323\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ std::make\_shared<cusparse>();}
\DoxyCodeLine{00324\ \ \ \ \ \ \ \ \ \}}
\DoxyCodeLine{00325\ \ \ \ \ \};}
\DoxyCodeLine{00326\ }
\DoxyCodeLine{00332\ \ \ \ \ \textcolor{keyword}{class\ }\doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_1_1sparselib_a2b50338d0f7679bc94b09d63341c5c6f}{sparselib}}\ :\ \textcolor{keyword}{public}\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_1_1strategy__type_aae6804f7a0b899f03bc0d5e0f139129c}{strategy\_type}}\ \{}
\DoxyCodeLine{00333\ \ \ \ \ \textcolor{keyword}{public}:}
\DoxyCodeLine{00337\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_1_1sparselib_a2b50338d0f7679bc94b09d63341c5c6f}{sparselib}}()\ :\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_1_1strategy__type_aae6804f7a0b899f03bc0d5e0f139129c}{strategy\_type}}(\textcolor{stringliteral}{"{}sparselib"{}})\ \{\}}
\DoxyCodeLine{00338\ }
\DoxyCodeLine{00339\ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_1_1sparselib_a2167e481d117f8208525c15cf6b3bb4d}{process}}(\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1array}{array<index\_type>}}\&\ mtx\_row\_ptrs,}
\DoxyCodeLine{00340\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1array}{array<index\_type>}}*\ mtx\_srow)\textcolor{keyword}{\ override}}
\DoxyCodeLine{00341\ \textcolor{keyword}{\ \ \ \ \ \ \ \ }\{\}}
\DoxyCodeLine{00342\ }
\DoxyCodeLine{00343\ \ \ \ \ \ \ \ \ int64\_t\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_1_1sparselib_a106f7ba1d05091e56d27c3b50f141740}{clac\_size}}(\textcolor{keyword}{const}\ int64\_t\ nnz)\textcolor{keyword}{\ override\ }\{\ \textcolor{keywordflow}{return}\ 0;\ \}}
\DoxyCodeLine{00344\ }
\DoxyCodeLine{00345\ \ \ \ \ \ \ \ \ std::shared\_ptr<strategy\_type>\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_1_1sparselib_add8e101467e4e4cb44da0fbaa2c524c1}{copy}}()\textcolor{keyword}{\ override}}
\DoxyCodeLine{00346\ \textcolor{keyword}{\ \ \ \ \ \ \ \ }\{}
\DoxyCodeLine{00347\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ std::make\_shared<sparselib>();}
\DoxyCodeLine{00348\ \ \ \ \ \ \ \ \ \}}
\DoxyCodeLine{00349\ \ \ \ \ \};}
\DoxyCodeLine{00350\ }
\DoxyCodeLine{00354\ \ \ \ \ \textcolor{keyword}{class\ }\doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_1_1load__balance_ab1862c520e88fb4e801a8fec8ab44328}{load\_balance}}\ :\ \textcolor{keyword}{public}\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_1_1strategy__type_aae6804f7a0b899f03bc0d5e0f139129c}{strategy\_type}}\ \{}
\DoxyCodeLine{00355\ \ \ \ \ \textcolor{keyword}{public}:}
\DoxyCodeLine{00362\ \ \ \ \ \ \ \ \ [[deprecated]]\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_1_1load__balance_ab1862c520e88fb4e801a8fec8ab44328}{load\_balance}}()}
\DoxyCodeLine{00363\ \ \ \ \ \ \ \ \ \ \ \ \ :\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_1_1load__balance_ab1862c520e88fb4e801a8fec8ab44328}{load\_balance}}(\doxymbox{\hyperlink{namespacestd}{std}}::move(}
\DoxyCodeLine{00364\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{namespacegko}{gko}}::\doxymbox{\hyperlink{classgko_1_1CudaExecutor}{CudaExecutor}}::\doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_a5261906eecda7da087638981d011a9b2}{create}}(0,\ \doxymbox{\hyperlink{namespacegko}{gko}}::\doxymbox{\hyperlink{classgko_1_1OmpExecutor}{OmpExecutor}}::\doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_a5261906eecda7da087638981d011a9b2}{create}}())))}
\DoxyCodeLine{00365\ \ \ \ \ \ \ \ \ \{\}}
\DoxyCodeLine{00366\ }
\DoxyCodeLine{00372\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_1_1load__balance_ad80a0ef5dd9bb2e4f311e59e5e4e013e}{load\_balance}}(std::shared\_ptr<const\ CudaExecutor>\ exec)}
\DoxyCodeLine{00373\ \ \ \ \ \ \ \ \ \ \ \ \ :\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_1_1load__balance_ab1862c520e88fb4e801a8fec8ab44328}{load\_balance}}(exec-\/>get\_num\_warps(),\ exec-\/>get\_warp\_size())}
\DoxyCodeLine{00374\ \ \ \ \ \ \ \ \ \{\}}
\DoxyCodeLine{00375\ }
\DoxyCodeLine{00381\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_1_1load__balance_a3d211f9e4a10d864dca92113b9e3f48b}{load\_balance}}(std::shared\_ptr<const\ HipExecutor>\ exec)}
\DoxyCodeLine{00382\ \ \ \ \ \ \ \ \ \ \ \ \ :\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_1_1load__balance_ab1862c520e88fb4e801a8fec8ab44328}{load\_balance}}(exec-\/>get\_num\_warps(),\ exec-\/>get\_warp\_size(),\ false)}
\DoxyCodeLine{00383\ \ \ \ \ \ \ \ \ \{\}}
\DoxyCodeLine{00384\ }
\DoxyCodeLine{00392\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_1_1load__balance_affc74589b5b502e32ee78c97f266aaf7}{load\_balance}}(std::shared\_ptr<const\ DpcppExecutor>\ exec)}
\DoxyCodeLine{00393\ \ \ \ \ \ \ \ \ \ \ \ \ :\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_1_1load__balance_ab1862c520e88fb4e801a8fec8ab44328}{load\_balance}}(exec-\/>get\_num\_subgroups(),\ 32,\ false,\ \textcolor{stringliteral}{"{}intel"{}})}
\DoxyCodeLine{00394\ \ \ \ \ \ \ \ \ \{\}}
\DoxyCodeLine{00395\ }
\DoxyCodeLine{00407\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_1_1load__balance_ad0b5c6131bed93ec17948968ec27d1c8}{load\_balance}}(int64\_t\ nwarps,\ \textcolor{keywordtype}{int}\ warp\_size\ =\ 32,}
\DoxyCodeLine{00408\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{bool}\ cuda\_strategy\ =\ \textcolor{keyword}{true},}
\DoxyCodeLine{00409\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ std::string\ strategy\_name\ =\ \textcolor{stringliteral}{"{}none"{}})}
\DoxyCodeLine{00410\ \ \ \ \ \ \ \ \ \ \ \ \ :\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_1_1strategy__type_aae6804f7a0b899f03bc0d5e0f139129c}{strategy\_type}}(\textcolor{stringliteral}{"{}load\_balance"{}}),}
\DoxyCodeLine{00411\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ nwarps\_(nwarps),}
\DoxyCodeLine{00412\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ warp\_size\_(warp\_size),}
\DoxyCodeLine{00413\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ cuda\_strategy\_(cuda\_strategy),}
\DoxyCodeLine{00414\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ strategy\_name\_(strategy\_name)}
\DoxyCodeLine{00415\ \ \ \ \ \ \ \ \ \{\}}
\DoxyCodeLine{00416\ }
\DoxyCodeLine{00417\ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_1_1load__balance_a0849e0d936dda023474673d7316e73d8}{process}}(\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1array}{array<index\_type>}}\&\ mtx\_row\_ptrs,}
\DoxyCodeLine{00418\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1array}{array<index\_type>}}*\ mtx\_srow)\textcolor{keyword}{\ override}}
\DoxyCodeLine{00419\ \textcolor{keyword}{\ \ \ \ \ \ \ \ }\{}
\DoxyCodeLine{00420\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{auto}\ nwarps\ =\ mtx\_srow-\/>\doxymbox{\hyperlink{classgko_1_1array_ad38e4c252d698a4581ffa0833ab98c3f}{get\_size}}();}
\DoxyCodeLine{00421\ }
\DoxyCodeLine{00422\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (nwarps\ >\ 0)\ \{}
\DoxyCodeLine{00423\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{auto}\ host\_srow\_exec\ =\ mtx\_srow-\/>\doxymbox{\hyperlink{classgko_1_1array_a169a0f4e9fc1aa81b8e7fef15de57af7}{get\_executor}}()-\/>get\_master();}
\DoxyCodeLine{00424\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{auto}\ host\_mtx\_exec\ =\ mtx\_row\_ptrs.\doxymbox{\hyperlink{classgko_1_1array_a169a0f4e9fc1aa81b8e7fef15de57af7}{get\_executor}}()-\/>get\_master();}
\DoxyCodeLine{00425\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \textcolor{keywordtype}{bool}\ is\_srow\_on\_host\{host\_srow\_exec\ ==}
\DoxyCodeLine{00426\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ mtx\_srow-\/>\doxymbox{\hyperlink{classgko_1_1array_a169a0f4e9fc1aa81b8e7fef15de57af7}{get\_executor}}()\};}
\DoxyCodeLine{00427\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \textcolor{keywordtype}{bool}\ is\_mtx\_on\_host\{host\_mtx\_exec\ ==}
\DoxyCodeLine{00428\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ mtx\_row\_ptrs.\doxymbox{\hyperlink{classgko_1_1array_a169a0f4e9fc1aa81b8e7fef15de57af7}{get\_executor}}()\};}
\DoxyCodeLine{00429\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1array}{array<index\_type>}}\ row\_ptrs\_host(host\_mtx\_exec);}
\DoxyCodeLine{00430\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1array}{array<index\_type>}}\ srow\_host(host\_srow\_exec);}
\DoxyCodeLine{00431\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ index\_type*\ row\_ptrs\{\};}
\DoxyCodeLine{00432\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ index\_type*\ srow\{\};}
\DoxyCodeLine{00433\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (is\_srow\_on\_host)\ \{}
\DoxyCodeLine{00434\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ srow\ =\ mtx\_srow-\/>\doxymbox{\hyperlink{classgko_1_1array_a10eab2ea8b6b4efaae84e6a143d61eed}{get\_data}}();}
\DoxyCodeLine{00435\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \{}
\DoxyCodeLine{00436\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ srow\_host\ =\ *mtx\_srow;}
\DoxyCodeLine{00437\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ srow\ =\ srow\_host.\doxymbox{\hyperlink{classgko_1_1array_a10eab2ea8b6b4efaae84e6a143d61eed}{get\_data}}();}
\DoxyCodeLine{00438\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}}
\DoxyCodeLine{00439\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (is\_mtx\_on\_host)\ \{}
\DoxyCodeLine{00440\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ row\_ptrs\ =\ mtx\_row\_ptrs.\doxymbox{\hyperlink{classgko_1_1array_a699ce7bef6d2838c8acd10d04f775e2a}{get\_const\_data}}();}
\DoxyCodeLine{00441\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \{}
\DoxyCodeLine{00442\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ row\_ptrs\_host\ =\ mtx\_row\_ptrs;}
\DoxyCodeLine{00443\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ row\_ptrs\ =\ row\_ptrs\_host.\doxymbox{\hyperlink{classgko_1_1array_a699ce7bef6d2838c8acd10d04f775e2a}{get\_const\_data}}();}
\DoxyCodeLine{00444\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}}
\DoxyCodeLine{00445\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{for}\ (\doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\_type}}\ i\ =\ 0;\ i\ <\ nwarps;\ i++)\ \{}
\DoxyCodeLine{00446\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ srow[i]\ =\ 0;}
\DoxyCodeLine{00447\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}}
\DoxyCodeLine{00448\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \textcolor{keyword}{auto}\ num\_rows\ =\ mtx\_row\_ptrs.\doxymbox{\hyperlink{classgko_1_1array_ad38e4c252d698a4581ffa0833ab98c3f}{get\_size}}()\ -\/\ 1;}
\DoxyCodeLine{00449\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \textcolor{keyword}{auto}\ num\_elems\ =\ row\_ptrs[num\_rows];}
\DoxyCodeLine{00450\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \textcolor{keyword}{auto}\ bucket\_divider\ =}
\DoxyCodeLine{00451\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ num\_elems\ >\ 0\ ?\ \doxymbox{\hyperlink{namespacegko_a93065a86872e6511b701b73b75823483}{ceildiv}}(num\_elems,\ warp\_size\_)\ :\ 1;}
\DoxyCodeLine{00452\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{for}\ (\doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\_type}}\ i\ =\ 0;\ i\ <\ num\_rows;\ i++)\ \{}
\DoxyCodeLine{00453\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{auto}\ bucket\ =}
\DoxyCodeLine{00454\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{namespacegko_a93065a86872e6511b701b73b75823483}{ceildiv}}((\doxymbox{\hyperlink{namespacegko_a93065a86872e6511b701b73b75823483}{ceildiv}}(row\_ptrs[i\ +\ 1],\ warp\_size\_)\ *\ nwarps),}
\DoxyCodeLine{00455\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ bucket\_divider);}
\DoxyCodeLine{00456\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (bucket\ <\ nwarps)\ \{}
\DoxyCodeLine{00457\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ srow[bucket]++;}
\DoxyCodeLine{00458\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}}
\DoxyCodeLine{00459\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}}
\DoxyCodeLine{00460\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ find\ starting\ row\ for\ thread\ i}}
\DoxyCodeLine{00461\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{for}\ (\doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\_type}}\ i\ =\ 1;\ i\ <\ nwarps;\ i++)\ \{}
\DoxyCodeLine{00462\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ srow[i]\ +=\ srow[i\ -\/\ 1];}
\DoxyCodeLine{00463\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}}
\DoxyCodeLine{00464\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (!is\_srow\_on\_host)\ \{}
\DoxyCodeLine{00465\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ *mtx\_srow\ =\ srow\_host;}
\DoxyCodeLine{00466\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}}
\DoxyCodeLine{00467\ \ \ \ \ \ \ \ \ \ \ \ \ \}}
\DoxyCodeLine{00468\ \ \ \ \ \ \ \ \ \}}
\DoxyCodeLine{00469\ }
\DoxyCodeLine{00470\ \ \ \ \ \ \ \ \ int64\_t\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_1_1load__balance_ac0413220bebe762defe180d900240fac}{clac\_size}}(\textcolor{keyword}{const}\ int64\_t\ nnz)\textcolor{keyword}{\ override}}
\DoxyCodeLine{00471\ \textcolor{keyword}{\ \ \ \ \ \ \ \ }\{}
\DoxyCodeLine{00472\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (warp\_size\_\ >\ 0)\ \{}
\DoxyCodeLine{00473\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{int}\ multiple\ =\ 8;}
\DoxyCodeLine{00474\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (nnz\ >=\ \textcolor{keyword}{static\_cast<}int64\_t\textcolor{keyword}{>}(2e8))\ \{}
\DoxyCodeLine{00475\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ multiple\ =\ 2048;}
\DoxyCodeLine{00476\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \textcolor{keywordflow}{if}\ (nnz\ >=\ \textcolor{keyword}{static\_cast<}int64\_t\textcolor{keyword}{>}(2e7))\ \{}
\DoxyCodeLine{00477\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ multiple\ =\ 512;}
\DoxyCodeLine{00478\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \textcolor{keywordflow}{if}\ (nnz\ >=\ \textcolor{keyword}{static\_cast<}int64\_t\textcolor{keyword}{>}(2e6))\ \{}
\DoxyCodeLine{00479\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ multiple\ =\ 128;}
\DoxyCodeLine{00480\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \textcolor{keywordflow}{if}\ (nnz\ >=\ \textcolor{keyword}{static\_cast<}int64\_t\textcolor{keyword}{>}(2e5))\ \{}
\DoxyCodeLine{00481\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ multiple\ =\ 32;}
\DoxyCodeLine{00482\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}}
\DoxyCodeLine{00483\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (strategy\_name\_\ ==\ \textcolor{stringliteral}{"{}intel"{}})\ \{}
\DoxyCodeLine{00484\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ multiple\ =\ 8;}
\DoxyCodeLine{00485\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (nnz\ >=\ \textcolor{keyword}{static\_cast<}int64\_t\textcolor{keyword}{>}(2e8))\ \{}
\DoxyCodeLine{00486\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ multiple\ =\ 256;}
\DoxyCodeLine{00487\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \textcolor{keywordflow}{if}\ (nnz\ >=\ \textcolor{keyword}{static\_cast<}int64\_t\textcolor{keyword}{>}(2e7))\ \{}
\DoxyCodeLine{00488\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ multiple\ =\ 32;}
\DoxyCodeLine{00489\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}}
\DoxyCodeLine{00490\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}}
\DoxyCodeLine{00491\ \textcolor{preprocessor}{\#if\ GINKGO\_HIP\_PLATFORM\_HCC}}
\DoxyCodeLine{00492\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (!cuda\_strategy\_)\ \{}
\DoxyCodeLine{00493\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ multiple\ =\ 8;}
\DoxyCodeLine{00494\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (nnz\ >=\ \textcolor{keyword}{static\_cast<}int64\_t\textcolor{keyword}{>}(1e7))\ \{}
\DoxyCodeLine{00495\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ multiple\ =\ 64;}
\DoxyCodeLine{00496\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \textcolor{keywordflow}{if}\ (nnz\ >=\ \textcolor{keyword}{static\_cast<}int64\_t\textcolor{keyword}{>}(1e6))\ \{}
\DoxyCodeLine{00497\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ multiple\ =\ 16;}
\DoxyCodeLine{00498\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}}
\DoxyCodeLine{00499\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}}
\DoxyCodeLine{00500\ \textcolor{preprocessor}{\#endif\ \ }\textcolor{comment}{//\ GINKGO\_HIP\_PLATFORM\_HCC}}
\DoxyCodeLine{00501\ }
\DoxyCodeLine{00502\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{auto}\ nwarps\ =\ nwarps\_\ *\ multiple;}
\DoxyCodeLine{00503\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ \doxymbox{\hyperlink{namespacegko_aaaf8487194bcb40b528969c187a413a0}{min}}(\doxymbox{\hyperlink{namespacegko_a93065a86872e6511b701b73b75823483}{ceildiv}}(nnz,\ warp\_size\_),\ nwarps);}
\DoxyCodeLine{00504\ \ \ \ \ \ \ \ \ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \{}
\DoxyCodeLine{00505\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ 0;}
\DoxyCodeLine{00506\ \ \ \ \ \ \ \ \ \ \ \ \ \}}
\DoxyCodeLine{00507\ \ \ \ \ \ \ \ \ \}}
\DoxyCodeLine{00508\ }
\DoxyCodeLine{00509\ \ \ \ \ \ \ \ \ std::shared\_ptr<strategy\_type>\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_1_1load__balance_a250e60a86f788a0745b58c515d620bbf}{copy}}()\textcolor{keyword}{\ override}}
\DoxyCodeLine{00510\ \textcolor{keyword}{\ \ \ \ \ \ \ \ }\{}
\DoxyCodeLine{00511\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ std::make\_shared<load\_balance>(}
\DoxyCodeLine{00512\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ nwarps\_,\ warp\_size\_,\ cuda\_strategy\_,\ strategy\_name\_);}
\DoxyCodeLine{00513\ \ \ \ \ \ \ \ \ \}}
\DoxyCodeLine{00514\ }
\DoxyCodeLine{00515\ \ \ \ \ \textcolor{keyword}{private}:}
\DoxyCodeLine{00516\ \ \ \ \ \ \ \ \ int64\_t\ nwarps\_;}
\DoxyCodeLine{00517\ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{int}\ warp\_size\_;}
\DoxyCodeLine{00518\ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{bool}\ cuda\_strategy\_;}
\DoxyCodeLine{00519\ \ \ \ \ \ \ \ \ std::string\ strategy\_name\_;}
\DoxyCodeLine{00520\ \ \ \ \ \};}
\DoxyCodeLine{00521\ }
\DoxyCodeLine{00522\ \ \ \ \ \textcolor{keyword}{class\ }\doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_1_1automatical_a4ba9ec73abf4ac52d00811065d50b6d9}{automatical}}\ :\ \textcolor{keyword}{public}\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_1_1strategy__type_aae6804f7a0b899f03bc0d5e0f139129c}{strategy\_type}}\ \{}
\DoxyCodeLine{00523\ \ \ \ \ \textcolor{keyword}{public}:}
\DoxyCodeLine{00524\ \ \ \ \ \ \ \ \ \textcolor{comment}{/*\ Use\ imbalance\ strategy\ when\ the\ maximum\ number\ of\ nonzero\ per\ row\ is}}
\DoxyCodeLine{00525\ \textcolor{comment}{\ \ \ \ \ \ \ \ \ *\ more\ than\ 1024\ on\ NVIDIA\ hardware\ */}}
\DoxyCodeLine{00526\ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ index\_type\ nvidia\_row\_len\_limit\ =\ 1024;}
\DoxyCodeLine{00527\ \ \ \ \ \ \ \ \ \textcolor{comment}{/*\ Use\ imbalance\ strategy\ when\ the\ matrix\ has\ more\ more\ than\ 1e6\ on}}
\DoxyCodeLine{00528\ \textcolor{comment}{\ \ \ \ \ \ \ \ \ *\ NVIDIA\ hardware\ */}}
\DoxyCodeLine{00529\ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ index\_type\ nvidia\_nnz\_limit\{\textcolor{keyword}{static\_cast<}index\_type\textcolor{keyword}{>}(1e6)\};}
\DoxyCodeLine{00530\ \ \ \ \ \ \ \ \ \textcolor{comment}{/*\ Use\ imbalance\ strategy\ when\ the\ maximum\ number\ of\ nonzero\ per\ row\ is}}
\DoxyCodeLine{00531\ \textcolor{comment}{\ \ \ \ \ \ \ \ \ *\ more\ than\ 768\ on\ AMD\ hardware\ */}}
\DoxyCodeLine{00532\ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ index\_type\ amd\_row\_len\_limit\ =\ 768;}
\DoxyCodeLine{00533\ \ \ \ \ \ \ \ \ \textcolor{comment}{/*\ Use\ imbalance\ strategy\ when\ the\ matrix\ has\ more\ more\ than\ 1e8\ on\ AMD}}
\DoxyCodeLine{00534\ \textcolor{comment}{\ \ \ \ \ \ \ \ \ *\ hardware\ */}}
\DoxyCodeLine{00535\ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ index\_type\ amd\_nnz\_limit\{\textcolor{keyword}{static\_cast<}index\_type\textcolor{keyword}{>}(1e8)\};}
\DoxyCodeLine{00536\ \ \ \ \ \ \ \ \ \textcolor{comment}{/*\ Use\ imbalance\ strategy\ when\ the\ maximum\ number\ of\ nonzero\ per\ row\ is}}
\DoxyCodeLine{00537\ \textcolor{comment}{\ \ \ \ \ \ \ \ \ *\ more\ than\ 25600\ on\ Intel\ hardware\ */}}
\DoxyCodeLine{00538\ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ index\_type\ intel\_row\_len\_limit\ =\ 25600;}
\DoxyCodeLine{00539\ \ \ \ \ \ \ \ \ \textcolor{comment}{/*\ Use\ imbalance\ strategy\ when\ the\ matrix\ has\ more\ more\ than\ 3e8\ on}}
\DoxyCodeLine{00540\ \textcolor{comment}{\ \ \ \ \ \ \ \ \ *\ Intel\ hardware\ */}}
\DoxyCodeLine{00541\ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ index\_type\ intel\_nnz\_limit\{\textcolor{keyword}{static\_cast<}index\_type\textcolor{keyword}{>}(3e8)\};}
\DoxyCodeLine{00542\ }
\DoxyCodeLine{00543\ \ \ \ \ \textcolor{keyword}{public}:}
\DoxyCodeLine{00550\ \ \ \ \ \ \ \ \ [[deprecated]]\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_1_1automatical_a4ba9ec73abf4ac52d00811065d50b6d9}{automatical}}()}
\DoxyCodeLine{00551\ \ \ \ \ \ \ \ \ \ \ \ \ :\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_1_1automatical_a4ba9ec73abf4ac52d00811065d50b6d9}{automatical}}(\doxymbox{\hyperlink{namespacestd}{std}}::move(}
\DoxyCodeLine{00552\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{namespacegko}{gko}}::\doxymbox{\hyperlink{classgko_1_1CudaExecutor}{CudaExecutor}}::\doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_a5261906eecda7da087638981d011a9b2}{create}}(0,\ \doxymbox{\hyperlink{namespacegko}{gko}}::\doxymbox{\hyperlink{classgko_1_1OmpExecutor}{OmpExecutor}}::\doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_a5261906eecda7da087638981d011a9b2}{create}}())))}
\DoxyCodeLine{00553\ \ \ \ \ \ \ \ \ \{\}}
\DoxyCodeLine{00554\ }
\DoxyCodeLine{00560\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_1_1automatical_a5e3cff9dc55b22b01ddf3db31731b267}{automatical}}(std::shared\_ptr<const\ CudaExecutor>\ exec)}
\DoxyCodeLine{00561\ \ \ \ \ \ \ \ \ \ \ \ \ :\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_1_1automatical_a4ba9ec73abf4ac52d00811065d50b6d9}{automatical}}(exec-\/>get\_num\_warps(),\ exec-\/>get\_warp\_size())}
\DoxyCodeLine{00562\ \ \ \ \ \ \ \ \ \{\}}
\DoxyCodeLine{00563\ }
\DoxyCodeLine{00569\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_1_1automatical_a9ec5b221681ed8e5f33fd77c9b781690}{automatical}}(std::shared\_ptr<const\ HipExecutor>\ exec)}
\DoxyCodeLine{00570\ \ \ \ \ \ \ \ \ \ \ \ \ :\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_1_1automatical_a4ba9ec73abf4ac52d00811065d50b6d9}{automatical}}(exec-\/>get\_num\_warps(),\ exec-\/>get\_warp\_size(),\ false)}
\DoxyCodeLine{00571\ \ \ \ \ \ \ \ \ \{\}}
\DoxyCodeLine{00572\ }
\DoxyCodeLine{00580\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_1_1automatical_a97deccea06b6b863118fee067662ae4e}{automatical}}(std::shared\_ptr<const\ DpcppExecutor>\ exec)}
\DoxyCodeLine{00581\ \ \ \ \ \ \ \ \ \ \ \ \ :\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_1_1automatical_a4ba9ec73abf4ac52d00811065d50b6d9}{automatical}}(exec-\/>get\_num\_subgroups(),\ 32,\ false,\ \textcolor{stringliteral}{"{}intel"{}})}
\DoxyCodeLine{00582\ \ \ \ \ \ \ \ \ \{\}}
\DoxyCodeLine{00583\ }
\DoxyCodeLine{00595\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_1_1automatical_a270b30353a7069d11d44bad9f05d0a1d}{automatical}}(int64\_t\ nwarps,\ \textcolor{keywordtype}{int}\ warp\_size\ =\ 32,}
\DoxyCodeLine{00596\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{bool}\ cuda\_strategy\ =\ \textcolor{keyword}{true},}
\DoxyCodeLine{00597\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ std::string\ strategy\_name\ =\ \textcolor{stringliteral}{"{}none"{}})}
\DoxyCodeLine{00598\ \ \ \ \ \ \ \ \ \ \ \ \ :\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_1_1strategy__type_aae6804f7a0b899f03bc0d5e0f139129c}{strategy\_type}}(\textcolor{stringliteral}{"{}automatical"{}}),}
\DoxyCodeLine{00599\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ nwarps\_(nwarps),}
\DoxyCodeLine{00600\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ warp\_size\_(warp\_size),}
\DoxyCodeLine{00601\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ cuda\_strategy\_(cuda\_strategy),}
\DoxyCodeLine{00602\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ strategy\_name\_(strategy\_name),}
\DoxyCodeLine{00603\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ max\_length\_per\_row\_(0)}
\DoxyCodeLine{00604\ \ \ \ \ \ \ \ \ \{\}}
\DoxyCodeLine{00605\ }
\DoxyCodeLine{00606\ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_1_1automatical_a97d7160b757fe6d427ba048c349cb034}{process}}(\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1array}{array<index\_type>}}\&\ mtx\_row\_ptrs,}
\DoxyCodeLine{00607\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1array}{array<index\_type>}}*\ mtx\_srow)\textcolor{keyword}{\ override}}
\DoxyCodeLine{00608\ \textcolor{keyword}{\ \ \ \ \ \ \ \ }\{}
\DoxyCodeLine{00609\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ if\ the\ number\ of\ stored\ elements\ is\ larger\ than\ <nnz\_limit>\ or}}
\DoxyCodeLine{00610\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ the\ maximum\ number\ of\ stored\ elements\ per\ row\ is\ larger\ than}}
\DoxyCodeLine{00611\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ <row\_len\_limit>,\ use\ load\_balance\ otherwise\ use\ classical}}
\DoxyCodeLine{00612\ \ \ \ \ \ \ \ \ \ \ \ \ index\_type\ nnz\_limit\ =\ nvidia\_nnz\_limit;}
\DoxyCodeLine{00613\ \ \ \ \ \ \ \ \ \ \ \ \ index\_type\ row\_len\_limit\ =\ nvidia\_row\_len\_limit;}
\DoxyCodeLine{00614\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (strategy\_name\_\ ==\ \textcolor{stringliteral}{"{}intel"{}})\ \{}
\DoxyCodeLine{00615\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ nnz\_limit\ =\ intel\_nnz\_limit;}
\DoxyCodeLine{00616\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ row\_len\_limit\ =\ intel\_row\_len\_limit;}
\DoxyCodeLine{00617\ \ \ \ \ \ \ \ \ \ \ \ \ \}}
\DoxyCodeLine{00618\ \textcolor{preprocessor}{\#if\ GINKGO\_HIP\_PLATFORM\_HCC}}
\DoxyCodeLine{00619\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (!cuda\_strategy\_)\ \{}
\DoxyCodeLine{00620\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ nnz\_limit\ =\ amd\_nnz\_limit;}
\DoxyCodeLine{00621\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ row\_len\_limit\ =\ amd\_row\_len\_limit;}
\DoxyCodeLine{00622\ \ \ \ \ \ \ \ \ \ \ \ \ \}}
\DoxyCodeLine{00623\ \textcolor{preprocessor}{\#endif\ \ }\textcolor{comment}{//\ GINKGO\_HIP\_PLATFORM\_HCC}}
\DoxyCodeLine{00624\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{auto}\ host\_mtx\_exec\ =\ mtx\_row\_ptrs.\doxymbox{\hyperlink{classgko_1_1array_a169a0f4e9fc1aa81b8e7fef15de57af7}{get\_executor}}()-\/>get\_master();}
\DoxyCodeLine{00625\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \textcolor{keywordtype}{bool}\ is\_mtx\_on\_host\{host\_mtx\_exec\ ==}
\DoxyCodeLine{00626\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ mtx\_row\_ptrs.\doxymbox{\hyperlink{classgko_1_1array_a169a0f4e9fc1aa81b8e7fef15de57af7}{get\_executor}}()\};}
\DoxyCodeLine{00627\ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1array}{array<index\_type>}}\ row\_ptrs\_host(host\_mtx\_exec);}
\DoxyCodeLine{00628\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ index\_type*\ row\_ptrs\{\};}
\DoxyCodeLine{00629\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (is\_mtx\_on\_host)\ \{}
\DoxyCodeLine{00630\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ row\_ptrs\ =\ mtx\_row\_ptrs.\doxymbox{\hyperlink{classgko_1_1array_a699ce7bef6d2838c8acd10d04f775e2a}{get\_const\_data}}();}
\DoxyCodeLine{00631\ \ \ \ \ \ \ \ \ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \{}
\DoxyCodeLine{00632\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ row\_ptrs\_host\ =\ mtx\_row\_ptrs;}
\DoxyCodeLine{00633\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ row\_ptrs\ =\ row\_ptrs\_host.\doxymbox{\hyperlink{classgko_1_1array_a699ce7bef6d2838c8acd10d04f775e2a}{get\_const\_data}}();}
\DoxyCodeLine{00634\ \ \ \ \ \ \ \ \ \ \ \ \ \}}
\DoxyCodeLine{00635\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \textcolor{keyword}{auto}\ num\_rows\ =\ mtx\_row\_ptrs.\doxymbox{\hyperlink{classgko_1_1array_ad38e4c252d698a4581ffa0833ab98c3f}{get\_size}}()\ -\/\ 1;}
\DoxyCodeLine{00636\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (row\_ptrs[num\_rows]\ >\ nnz\_limit)\ \{}
\DoxyCodeLine{00637\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_1_1load__balance}{load\_balance}}\ actual\_strategy(nwarps\_,\ warp\_size\_,}
\DoxyCodeLine{00638\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ cuda\_strategy\_,\ strategy\_name\_);}
\DoxyCodeLine{00639\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (is\_mtx\_on\_host)\ \{}
\DoxyCodeLine{00640\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ actual\_strategy.\doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_1_1load__balance_a0849e0d936dda023474673d7316e73d8}{process}}(mtx\_row\_ptrs,\ mtx\_srow);}
\DoxyCodeLine{00641\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \{}
\DoxyCodeLine{00642\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ actual\_strategy.\doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_1_1load__balance_a0849e0d936dda023474673d7316e73d8}{process}}(row\_ptrs\_host,\ mtx\_srow);}
\DoxyCodeLine{00643\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}}
\DoxyCodeLine{00644\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ this-\/>set\_name(actual\_strategy.\doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_1_1strategy__type_a0c22b251b0c1dfd087a5c097488febe0}{get\_name}}());}
\DoxyCodeLine{00645\ \ \ \ \ \ \ \ \ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \{}
\DoxyCodeLine{00646\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ index\_type\ maxnum\ =\ 0;}
\DoxyCodeLine{00647\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{for}\ (\doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\_type}}\ i\ =\ 0;\ i\ <\ num\_rows;\ i++)\ \{}
\DoxyCodeLine{00648\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ maxnum\ =\ std::max(maxnum,\ row\_ptrs[i\ +\ 1]\ -\/\ row\_ptrs[i]);}
\DoxyCodeLine{00649\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}}
\DoxyCodeLine{00650\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (maxnum\ >\ row\_len\_limit)\ \{}
\DoxyCodeLine{00651\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_1_1load__balance}{load\_balance}}\ actual\_strategy(}
\DoxyCodeLine{00652\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ nwarps\_,\ warp\_size\_,\ cuda\_strategy\_,\ strategy\_name\_);}
\DoxyCodeLine{00653\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (is\_mtx\_on\_host)\ \{}
\DoxyCodeLine{00654\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ actual\_strategy.\doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_1_1load__balance_a0849e0d936dda023474673d7316e73d8}{process}}(mtx\_row\_ptrs,\ mtx\_srow);}
\DoxyCodeLine{00655\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \{}
\DoxyCodeLine{00656\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ actual\_strategy.\doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_1_1load__balance_a0849e0d936dda023474673d7316e73d8}{process}}(row\_ptrs\_host,\ mtx\_srow);}
\DoxyCodeLine{00657\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}}
\DoxyCodeLine{00658\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ this-\/>set\_name(actual\_strategy.\doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_1_1strategy__type_a0c22b251b0c1dfd087a5c097488febe0}{get\_name}}());}
\DoxyCodeLine{00659\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \{}
\DoxyCodeLine{00660\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_1_1classical}{classical}}\ actual\_strategy;}
\DoxyCodeLine{00661\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (is\_mtx\_on\_host)\ \{}
\DoxyCodeLine{00662\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ actual\_strategy.\doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_1_1classical_a2740db9fa954cb7f8f4145a1f87f82a6}{process}}(mtx\_row\_ptrs,\ mtx\_srow);}
\DoxyCodeLine{00663\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ max\_length\_per\_row\_\ =}
\DoxyCodeLine{00664\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ actual\_strategy.get\_max\_length\_per\_row();}
\DoxyCodeLine{00665\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \{}
\DoxyCodeLine{00666\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ actual\_strategy.\doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_1_1classical_a2740db9fa954cb7f8f4145a1f87f82a6}{process}}(row\_ptrs\_host,\ mtx\_srow);}
\DoxyCodeLine{00667\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ max\_length\_per\_row\_\ =}
\DoxyCodeLine{00668\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ actual\_strategy.get\_max\_length\_per\_row();}
\DoxyCodeLine{00669\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}}
\DoxyCodeLine{00670\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ this-\/>set\_name(actual\_strategy.\doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_1_1strategy__type_a0c22b251b0c1dfd087a5c097488febe0}{get\_name}}());}
\DoxyCodeLine{00671\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}}
\DoxyCodeLine{00672\ \ \ \ \ \ \ \ \ \ \ \ \ \}}
\DoxyCodeLine{00673\ \ \ \ \ \ \ \ \ \}}
\DoxyCodeLine{00674\ }
\DoxyCodeLine{00675\ \ \ \ \ \ \ \ \ int64\_t\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_1_1automatical_a4c3e6ae322c261f0da10641c58e83398}{clac\_size}}(\textcolor{keyword}{const}\ int64\_t\ nnz)\textcolor{keyword}{\ override}}
\DoxyCodeLine{00676\ \textcolor{keyword}{\ \ \ \ \ \ \ \ }\{}
\DoxyCodeLine{00677\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ std::make\_shared<load\_balance>(}
\DoxyCodeLine{00678\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ nwarps\_,\ warp\_size\_,\ cuda\_strategy\_,\ strategy\_name\_)}
\DoxyCodeLine{00679\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -\/>clac\_size(nnz);}
\DoxyCodeLine{00680\ \ \ \ \ \ \ \ \ \}}
\DoxyCodeLine{00681\ }
\DoxyCodeLine{00682\ \ \ \ \ \ \ \ \ index\_type\ get\_max\_length\_per\_row()\ const\ noexcept}
\DoxyCodeLine{00683\ \ \ \ \ \ \ \ \ \{}
\DoxyCodeLine{00684\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ max\_length\_per\_row\_;}
\DoxyCodeLine{00685\ \ \ \ \ \ \ \ \ \}}
\DoxyCodeLine{00686\ }
\DoxyCodeLine{00687\ \ \ \ \ \ \ \ \ std::shared\_ptr<strategy\_type>\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_1_1automatical_a197c022bc128a9c6b55f3d4cf7d293ac}{copy}}()\textcolor{keyword}{\ override}}
\DoxyCodeLine{00688\ \textcolor{keyword}{\ \ \ \ \ \ \ \ }\{}
\DoxyCodeLine{00689\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ std::make\_shared<automatical>(}
\DoxyCodeLine{00690\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ nwarps\_,\ warp\_size\_,\ cuda\_strategy\_,\ strategy\_name\_);}
\DoxyCodeLine{00691\ \ \ \ \ \ \ \ \ \}}
\DoxyCodeLine{00692\ }
\DoxyCodeLine{00693\ \ \ \ \ \textcolor{keyword}{private}:}
\DoxyCodeLine{00694\ \ \ \ \ \ \ \ \ int64\_t\ nwarps\_;}
\DoxyCodeLine{00695\ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{int}\ warp\_size\_;}
\DoxyCodeLine{00696\ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{bool}\ cuda\_strategy\_;}
\DoxyCodeLine{00697\ \ \ \ \ \ \ \ \ std::string\ strategy\_name\_;}
\DoxyCodeLine{00698\ \ \ \ \ \ \ \ \ index\_type\ max\_length\_per\_row\_;}
\DoxyCodeLine{00699\ \ \ \ \ \};}
\DoxyCodeLine{00700\ }
\DoxyCodeLine{00701\ \ \ \ \ \textcolor{keyword}{friend}\ \textcolor{keyword}{class\ }\doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr}{Csr}}<\doxymbox{\hyperlink{namespacegko_ada2119004771922e8f7fcb6910a0363c}{previous\_precision}}<ValueType>,\ IndexType>;}
\DoxyCodeLine{00702\ }
\DoxyCodeLine{00703\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{namespacegko_a7cb327baf9ca9018d06fa5554464d29d}{convert\_to}}(}
\DoxyCodeLine{00704\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr}{Csr}}<\doxymbox{\hyperlink{namespacegko_aee37f85b217e5e26fe64207d41fa4bac}{next\_precision<ValueType>}},\ IndexType>*\ result)\ \textcolor{keyword}{const\ override};}
\DoxyCodeLine{00705\ }
\DoxyCodeLine{00706\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{namespacegko_a6fcc3453bf500454b56a5f2f196b871c}{move\_to}}(\doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr}{Csr}}<\doxymbox{\hyperlink{namespacegko_aee37f85b217e5e26fe64207d41fa4bac}{next\_precision<ValueType>}},\ IndexType>*\ result)\ \textcolor{keyword}{override};}
\DoxyCodeLine{00707\ }
\DoxyCodeLine{00708\ \textcolor{preprocessor}{\#if\ GINKGO\_ENABLE\_HALF\ ||\ GINKGO\_ENABLE\_BFLOAT16}}
\DoxyCodeLine{00709\ \ \ \ \ \textcolor{keyword}{friend}\ \textcolor{keyword}{class\ }\doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr}{Csr}}<\doxymbox{\hyperlink{namespacegko_ada2119004771922e8f7fcb6910a0363c}{previous\_precision}}<ValueType,\ 2>,\ IndexType>;}
\DoxyCodeLine{00710\ \ \ \ \ \textcolor{keyword}{using\ }ConvertibleTo<}
\DoxyCodeLine{00711\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr}{Csr<next\_precision<ValueType,\ 2>}},\ IndexType>>\doxymbox{\hyperlink{namespacegko_a7cb327baf9ca9018d06fa5554464d29d}{::convert\_to}};}
\DoxyCodeLine{00712\ \ \ \ \ \textcolor{keyword}{using\ }ConvertibleTo<\doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr}{Csr<next\_precision<ValueType,\ 2>}},\ IndexType>>\doxymbox{\hyperlink{namespacegko_a6fcc3453bf500454b56a5f2f196b871c}{::move\_to}};}
\DoxyCodeLine{00713\ }
\DoxyCodeLine{00714\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{namespacegko_a7cb327baf9ca9018d06fa5554464d29d}{convert\_to}}(}
\DoxyCodeLine{00715\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr}{Csr}}<\doxymbox{\hyperlink{namespacegko_aee37f85b217e5e26fe64207d41fa4bac}{next\_precision<ValueType,\ 2>}},\ IndexType>*\ result)\ \textcolor{keyword}{const\ override};}
\DoxyCodeLine{00716\ }
\DoxyCodeLine{00717\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{namespacegko_a6fcc3453bf500454b56a5f2f196b871c}{move\_to}}(\doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr}{Csr}}<\doxymbox{\hyperlink{namespacegko_aee37f85b217e5e26fe64207d41fa4bac}{next\_precision<ValueType,\ 2>}},\ IndexType>*\ result)\ \textcolor{keyword}{override};}
\DoxyCodeLine{00718\ \textcolor{preprocessor}{\#endif}}
\DoxyCodeLine{00719\ }
\DoxyCodeLine{00720\ \textcolor{preprocessor}{\#if\ GINKGO\_ENABLE\_HALF\ \&\&\ GINKGO\_ENABLE\_BFLOAT16}}
\DoxyCodeLine{00721\ \ \ \ \ \textcolor{keyword}{friend}\ \textcolor{keyword}{class\ }\doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr}{Csr}}<\doxymbox{\hyperlink{namespacegko_ada2119004771922e8f7fcb6910a0363c}{previous\_precision}}<ValueType,\ 3>,\ IndexType>;}
\DoxyCodeLine{00722\ \ \ \ \ \textcolor{keyword}{using\ }ConvertibleTo<}
\DoxyCodeLine{00723\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr}{Csr<next\_precision<ValueType,\ 3>}},\ IndexType>>\doxymbox{\hyperlink{namespacegko_a7cb327baf9ca9018d06fa5554464d29d}{::convert\_to}};}
\DoxyCodeLine{00724\ \ \ \ \ \textcolor{keyword}{using\ }ConvertibleTo<\doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr}{Csr<next\_precision<ValueType,\ 3>}},\ IndexType>>\doxymbox{\hyperlink{namespacegko_a6fcc3453bf500454b56a5f2f196b871c}{::move\_to}};}
\DoxyCodeLine{00725\ }
\DoxyCodeLine{00726\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{namespacegko_a7cb327baf9ca9018d06fa5554464d29d}{convert\_to}}(}
\DoxyCodeLine{00727\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr}{Csr}}<\doxymbox{\hyperlink{namespacegko_aee37f85b217e5e26fe64207d41fa4bac}{next\_precision<ValueType,\ 3>}},\ IndexType>*\ result)\ \textcolor{keyword}{const\ override};}
\DoxyCodeLine{00728\ }
\DoxyCodeLine{00729\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{namespacegko_a6fcc3453bf500454b56a5f2f196b871c}{move\_to}}(\doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr}{Csr}}<\doxymbox{\hyperlink{namespacegko_aee37f85b217e5e26fe64207d41fa4bac}{next\_precision<ValueType,\ 3>}},\ IndexType>*\ result)\ \textcolor{keyword}{override};}
\DoxyCodeLine{00730\ \textcolor{preprocessor}{\#endif}}
\DoxyCodeLine{00731\ }
\DoxyCodeLine{00732\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{namespacegko_a7cb327baf9ca9018d06fa5554464d29d}{convert\_to}}(\doxymbox{\hyperlink{classgko_1_1matrix_1_1Dense}{Dense<ValueType>}}*\ other)\ \textcolor{keyword}{const\ override};}
\DoxyCodeLine{00733\ }
\DoxyCodeLine{00734\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{namespacegko_a6fcc3453bf500454b56a5f2f196b871c}{move\_to}}(\doxymbox{\hyperlink{classgko_1_1matrix_1_1Dense}{Dense<ValueType>}}*\ other)\ \textcolor{keyword}{override};}
\DoxyCodeLine{00735\ }
\DoxyCodeLine{00736\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{namespacegko_a7cb327baf9ca9018d06fa5554464d29d}{convert\_to}}(\doxymbox{\hyperlink{classgko_1_1matrix_1_1Coo}{Coo<ValueType,\ IndexType>}}*\ result)\ \textcolor{keyword}{const\ override};}
\DoxyCodeLine{00737\ }
\DoxyCodeLine{00738\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{namespacegko_a6fcc3453bf500454b56a5f2f196b871c}{move\_to}}(\doxymbox{\hyperlink{classgko_1_1matrix_1_1Coo}{Coo<ValueType,\ IndexType>}}*\ result)\ \textcolor{keyword}{override};}
\DoxyCodeLine{00739\ }
\DoxyCodeLine{00740\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{namespacegko_a7cb327baf9ca9018d06fa5554464d29d}{convert\_to}}(\doxymbox{\hyperlink{classgko_1_1matrix_1_1Ell}{Ell<ValueType,\ IndexType>}}*\ result)\ \textcolor{keyword}{const\ override};}
\DoxyCodeLine{00741\ }
\DoxyCodeLine{00742\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{namespacegko_a6fcc3453bf500454b56a5f2f196b871c}{move\_to}}(\doxymbox{\hyperlink{classgko_1_1matrix_1_1Ell}{Ell<ValueType,\ IndexType>}}*\ result)\ \textcolor{keyword}{override};}
\DoxyCodeLine{00743\ }
\DoxyCodeLine{00744\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{namespacegko_a7cb327baf9ca9018d06fa5554464d29d}{convert\_to}}(\doxymbox{\hyperlink{classgko_1_1matrix_1_1Fbcsr}{Fbcsr<ValueType,\ IndexType>}}*\ result)\ \textcolor{keyword}{const\ override};}
\DoxyCodeLine{00745\ }
\DoxyCodeLine{00746\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{namespacegko_a6fcc3453bf500454b56a5f2f196b871c}{move\_to}}(\doxymbox{\hyperlink{classgko_1_1matrix_1_1Fbcsr}{Fbcsr<ValueType,\ IndexType>}}*\ result)\ \textcolor{keyword}{override};}
\DoxyCodeLine{00747\ }
\DoxyCodeLine{00748\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{namespacegko_a7cb327baf9ca9018d06fa5554464d29d}{convert\_to}}(\doxymbox{\hyperlink{classgko_1_1matrix_1_1Hybrid}{Hybrid<ValueType,\ IndexType>}}*\ result)\ \textcolor{keyword}{const\ override};}
\DoxyCodeLine{00749\ }
\DoxyCodeLine{00750\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{namespacegko_a6fcc3453bf500454b56a5f2f196b871c}{move\_to}}(\doxymbox{\hyperlink{classgko_1_1matrix_1_1Hybrid}{Hybrid<ValueType,\ IndexType>}}*\ result)\ \textcolor{keyword}{override};}
\DoxyCodeLine{00751\ }
\DoxyCodeLine{00752\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{namespacegko_a7cb327baf9ca9018d06fa5554464d29d}{convert\_to}}(\doxymbox{\hyperlink{classgko_1_1matrix_1_1Sellp}{Sellp<ValueType,\ IndexType>}}*\ result)\ \textcolor{keyword}{const\ override};}
\DoxyCodeLine{00753\ }
\DoxyCodeLine{00754\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{namespacegko_a6fcc3453bf500454b56a5f2f196b871c}{move\_to}}(\doxymbox{\hyperlink{classgko_1_1matrix_1_1Sellp}{Sellp<ValueType,\ IndexType>}}*\ result)\ \textcolor{keyword}{override};}
\DoxyCodeLine{00755\ }
\DoxyCodeLine{00756\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{namespacegko_a7cb327baf9ca9018d06fa5554464d29d}{convert\_to}}(\doxymbox{\hyperlink{classgko_1_1matrix_1_1SparsityCsr}{SparsityCsr<ValueType,\ IndexType>}}*\ result)\ \textcolor{keyword}{const\ override};}
\DoxyCodeLine{00757\ }
\DoxyCodeLine{00758\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{namespacegko_a6fcc3453bf500454b56a5f2f196b871c}{move\_to}}(\doxymbox{\hyperlink{classgko_1_1matrix_1_1SparsityCsr}{SparsityCsr<ValueType,\ IndexType>}}*\ result)\ \textcolor{keyword}{override};}
\DoxyCodeLine{00759\ }
\DoxyCodeLine{00760\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{namespacegko_abc58509ecdcb48399e12f9a081ed7545}{read}}(\textcolor{keyword}{const}\ mat\_data\&\ data)\ \textcolor{keyword}{override};}
\DoxyCodeLine{00761\ }
\DoxyCodeLine{00762\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{namespacegko_abc58509ecdcb48399e12f9a081ed7545}{read}}(\textcolor{keyword}{const}\ device\_mat\_data\&\ data)\ \textcolor{keyword}{override};}
\DoxyCodeLine{00763\ }
\DoxyCodeLine{00764\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{namespacegko_abc58509ecdcb48399e12f9a081ed7545}{read}}(device\_mat\_data\&\&\ data)\ \textcolor{keyword}{override};}
\DoxyCodeLine{00765\ }
\DoxyCodeLine{00766\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{namespacegko_af82d8f7795fefcf5f38a38895e316c02}{write}}(mat\_data\&\ data)\ \textcolor{keyword}{const\ override};}
\DoxyCodeLine{00767\ }
\DoxyCodeLine{00768\ \ \ \ \ std::unique\_ptr<LinOp>\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_aaa850dcdfabfc020918fa870e50c0b11}{transpose}}()\ \textcolor{keyword}{const\ override};}
\DoxyCodeLine{00769\ }
\DoxyCodeLine{00770\ \ \ \ \ std::unique\_ptr<LinOp>\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_af57eb59b5acb36cae0b3a16ffff9cf4f}{conj\_transpose}}()\ \textcolor{keyword}{const\ override};}
\DoxyCodeLine{00771\ }
\DoxyCodeLine{00777\ \ \ \ \ \textcolor{keyword}{class\ }multiply\_reuse\_info\ \{}
\DoxyCodeLine{00778\ \ \ \ \ \ \ \ \ \textcolor{keyword}{friend}\ \textcolor{keyword}{class\ }Csr;}
\DoxyCodeLine{00779\ }
\DoxyCodeLine{00780\ \ \ \ \ \textcolor{keyword}{public}:}
\DoxyCodeLine{00781\ \ \ \ \ \ \ \ \ \textcolor{keyword}{explicit}\ multiply\_reuse\_info();}
\DoxyCodeLine{00782\ }
\DoxyCodeLine{00783\ \ \ \ \ \ \ \ \ \string~multiply\_reuse\_info();}
\DoxyCodeLine{00784\ }
\DoxyCodeLine{00785\ \ \ \ \ \ \ \ \ multiply\_reuse\_info(\textcolor{keyword}{const}\ multiply\_reuse\_info\&)\ =\ \textcolor{keyword}{delete};}
\DoxyCodeLine{00786\ }
\DoxyCodeLine{00787\ \ \ \ \ \ \ \ \ multiply\_reuse\_info(multiply\_reuse\_info\&\&)\ \textcolor{keyword}{noexcept};}
\DoxyCodeLine{00788\ }
\DoxyCodeLine{00789\ \ \ \ \ \ \ \ \ multiply\_reuse\_info\&\ operator=(\textcolor{keyword}{const}\ multiply\_reuse\_info\&)\ =\ \textcolor{keyword}{delete};}
\DoxyCodeLine{00790\ }
\DoxyCodeLine{00791\ \ \ \ \ \ \ \ \ multiply\_reuse\_info\&\ operator=(multiply\_reuse\_info\&\&)\ \textcolor{keyword}{noexcept};}
\DoxyCodeLine{00792\ }
\DoxyCodeLine{00798\ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_1_1multiply__reuse__info_aa8b9bb2b8ffc1e345663c4780897ed79}{update\_values}}(\doxymbox{\hyperlink{classgko_1_1ptr__param}{ptr\_param<const\ Csr>}}\ mtx1,\ \doxymbox{\hyperlink{classgko_1_1ptr__param}{ptr\_param<const\ Csr>}}\ mtx2,}
\DoxyCodeLine{00799\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1ptr__param}{ptr\_param<Csr>}}\ out)\ \textcolor{keyword}{const};}
\DoxyCodeLine{00800\ }
\DoxyCodeLine{00801\ \ \ \ \ \textcolor{keyword}{private}:}
\DoxyCodeLine{00802\ \ \ \ \ \ \ \ \ \textcolor{keyword}{struct\ }lookup\_data;}
\DoxyCodeLine{00803\ }
\DoxyCodeLine{00804\ \ \ \ \ \ \ \ \ \textcolor{keyword}{explicit}\ multiply\_reuse\_info(std::unique\_ptr<lookup\_data>\ data);}
\DoxyCodeLine{00805\ }
\DoxyCodeLine{00806\ \ \ \ \ \ \ \ \ std::unique\_ptr<lookup\_data>\ internal;}
\DoxyCodeLine{00807\ \ \ \ \ \};}
\DoxyCodeLine{00808\ }
\DoxyCodeLine{00819\ \ \ \ \ std::unique\_ptr<Csr>\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_aab232ee1dfd8b84881e66260cf850cd5}{multiply}}(\doxymbox{\hyperlink{classgko_1_1ptr__param}{ptr\_param<const\ Csr>}}\ other)\ \textcolor{keyword}{const};}
\DoxyCodeLine{00820\ }
\DoxyCodeLine{00837\ \ \ \ \ std::pair<std::unique\_ptr<Csr>,\ multiply\_reuse\_info>\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_a091a0013a0ef9a17d2cbf5ac5f09e06b}{multiply\_reuse}}(}
\DoxyCodeLine{00838\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1ptr__param}{ptr\_param<const\ Csr>}}\ other)\ \textcolor{keyword}{const};}
\DoxyCodeLine{00839\ }
\DoxyCodeLine{00845\ \ \ \ \ \textcolor{keyword}{class\ }multiply\_add\_reuse\_info\ \{}
\DoxyCodeLine{00846\ \ \ \ \ \ \ \ \ \textcolor{keyword}{friend}\ \textcolor{keyword}{class\ }Csr;}
\DoxyCodeLine{00847\ }
\DoxyCodeLine{00848\ \ \ \ \ \textcolor{keyword}{public}:}
\DoxyCodeLine{00849\ \ \ \ \ \ \ \ \ \textcolor{keyword}{explicit}\ multiply\_add\_reuse\_info();}
\DoxyCodeLine{00850\ }
\DoxyCodeLine{00851\ \ \ \ \ \ \ \ \ \string~multiply\_add\_reuse\_info();}
\DoxyCodeLine{00852\ }
\DoxyCodeLine{00853\ \ \ \ \ \ \ \ \ multiply\_add\_reuse\_info(\textcolor{keyword}{const}\ multiply\_add\_reuse\_info\&)\ =\ \textcolor{keyword}{delete};}
\DoxyCodeLine{00854\ }
\DoxyCodeLine{00855\ \ \ \ \ \ \ \ \ multiply\_add\_reuse\_info(multiply\_add\_reuse\_info\&\&)\ \textcolor{keyword}{noexcept};}
\DoxyCodeLine{00856\ }
\DoxyCodeLine{00857\ \ \ \ \ \ \ \ \ multiply\_add\_reuse\_info\&\ operator=(\textcolor{keyword}{const}\ multiply\_add\_reuse\_info\&)\ =}
\DoxyCodeLine{00858\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{delete};}
\DoxyCodeLine{00859\ }
\DoxyCodeLine{00860\ \ \ \ \ \ \ \ \ multiply\_add\_reuse\_info\&\ operator=(multiply\_add\_reuse\_info\&\&)\ \textcolor{keyword}{noexcept};}
\DoxyCodeLine{00861\ }
\DoxyCodeLine{00869\ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_1_1multiply__add__reuse__info_a97921c3b4c3005a51e5a3fc91978f6c2}{update\_values}}(\doxymbox{\hyperlink{classgko_1_1ptr__param}{ptr\_param<const\ Csr>}}\ mtx,}
\DoxyCodeLine{00870\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1ptr__param}{ptr\_param}}<\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Dense}{Dense<value\_type>}}>\ scale\_mult,}
\DoxyCodeLine{00871\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1ptr__param}{ptr\_param<const\ Csr>}}\ mtx\_mult,}
\DoxyCodeLine{00872\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1ptr__param}{ptr\_param}}<\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Dense}{Dense<value\_type>}}>\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_a4a9bcad293b828a49dac453195abd212}{scale\_add}},}
\DoxyCodeLine{00873\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1ptr__param}{ptr\_param<const\ Csr>}}\ mtx\_add,}
\DoxyCodeLine{00874\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1ptr__param}{ptr\_param<Csr>}}\ out)\ \textcolor{keyword}{const};}
\DoxyCodeLine{00875\ }
\DoxyCodeLine{00876\ \ \ \ \ \textcolor{keyword}{private}:}
\DoxyCodeLine{00877\ \ \ \ \ \ \ \ \ \textcolor{keyword}{struct\ }lookup\_data;}
\DoxyCodeLine{00878\ }
\DoxyCodeLine{00879\ \ \ \ \ \ \ \ \ \textcolor{keyword}{explicit}\ multiply\_add\_reuse\_info(std::unique\_ptr<lookup\_data>\ data);}
\DoxyCodeLine{00880\ }
\DoxyCodeLine{00881\ \ \ \ \ \ \ \ \ std::unique\_ptr<lookup\_data>\ internal;}
\DoxyCodeLine{00882\ \ \ \ \ \};}
\DoxyCodeLine{00883\ }
\DoxyCodeLine{00899\ \ \ \ \ std::unique\_ptr<Csr>\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_a3cc824322b23f2256718c761841ece8e}{multiply\_add}}(}
\DoxyCodeLine{00900\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1ptr__param}{ptr\_param}}<\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Dense}{Dense<value\_type>}}>\ scale\_mult,}
\DoxyCodeLine{00901\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1ptr__param}{ptr\_param<const\ Csr>}}\ mtx\_mult,}
\DoxyCodeLine{00902\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1ptr__param}{ptr\_param}}<\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Dense}{Dense<value\_type>}}>\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_a4a9bcad293b828a49dac453195abd212}{scale\_add}},}
\DoxyCodeLine{00903\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1ptr__param}{ptr\_param<const\ Csr>}}\ mtx\_add)\ \textcolor{keyword}{const};}
\DoxyCodeLine{00904\ }
\DoxyCodeLine{00926\ \ \ \ \ std::pair<std::unique\_ptr<Csr>,\ multiply\_add\_reuse\_info>\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_a058af579839922bae27da8bb42f94b66}{multiply\_add\_reuse}}(}
\DoxyCodeLine{00927\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1ptr__param}{ptr\_param}}<\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Dense}{Dense<value\_type>}}>\ scale\_mult,}
\DoxyCodeLine{00928\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1ptr__param}{ptr\_param<const\ Csr>}}\ mtx\_mult,}
\DoxyCodeLine{00929\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1ptr__param}{ptr\_param}}<\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Dense}{Dense<value\_type>}}>\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_a4a9bcad293b828a49dac453195abd212}{scale\_add}},}
\DoxyCodeLine{00930\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1ptr__param}{ptr\_param<const\ Csr>}}\ mtx\_add)\ \textcolor{keyword}{const};}
\DoxyCodeLine{00931\ }
\DoxyCodeLine{00937\ \ \ \ \ \textcolor{keyword}{class\ }scale\_add\_reuse\_info\ \{}
\DoxyCodeLine{00938\ \ \ \ \ \ \ \ \ \textcolor{keyword}{friend}\ \textcolor{keyword}{class\ }Csr;}
\DoxyCodeLine{00939\ }
\DoxyCodeLine{00940\ \ \ \ \ \textcolor{keyword}{public}:}
\DoxyCodeLine{00941\ \ \ \ \ \ \ \ \ \textcolor{keyword}{explicit}\ scale\_add\_reuse\_info();}
\DoxyCodeLine{00942\ }
\DoxyCodeLine{00943\ \ \ \ \ \ \ \ \ \string~scale\_add\_reuse\_info();}
\DoxyCodeLine{00944\ }
\DoxyCodeLine{00945\ \ \ \ \ \ \ \ \ scale\_add\_reuse\_info(\textcolor{keyword}{const}\ scale\_add\_reuse\_info\&)\ =\ \textcolor{keyword}{delete};}
\DoxyCodeLine{00946\ }
\DoxyCodeLine{00947\ \ \ \ \ \ \ \ \ scale\_add\_reuse\_info(scale\_add\_reuse\_info\&\&)\ \textcolor{keyword}{noexcept};}
\DoxyCodeLine{00948\ }
\DoxyCodeLine{00949\ \ \ \ \ \ \ \ \ scale\_add\_reuse\_info\&\ operator=(\textcolor{keyword}{const}\ scale\_add\_reuse\_info\&)\ =\ \textcolor{keyword}{delete};}
\DoxyCodeLine{00950\ }
\DoxyCodeLine{00951\ \ \ \ \ \ \ \ \ scale\_add\_reuse\_info\&\ operator=(scale\_add\_reuse\_info\&\&)\ \textcolor{keyword}{noexcept};}
\DoxyCodeLine{00952\ }
\DoxyCodeLine{00959\ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_1_1scale__add__reuse__info_a966159aa1adb984d1b274e30a022a17c}{update\_values}}(\doxymbox{\hyperlink{classgko_1_1ptr__param}{ptr\_param}}<\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Dense}{Dense<value\_type>}}>\ scale1,}
\DoxyCodeLine{00960\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1ptr__param}{ptr\_param<const\ Csr>}}\ mtx1,}
\DoxyCodeLine{00961\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1ptr__param}{ptr\_param}}<\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Dense}{Dense<value\_type>}}>\ scale2,}
\DoxyCodeLine{00962\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1ptr__param}{ptr\_param<const\ Csr>}}\ mtx2,\ \doxymbox{\hyperlink{classgko_1_1ptr__param}{ptr\_param<Csr>}}\ out)\ \textcolor{keyword}{const};}
\DoxyCodeLine{00963\ }
\DoxyCodeLine{00964\ \ \ \ \ \textcolor{keyword}{private}:}
\DoxyCodeLine{00965\ \ \ \ \ \ \ \ \ \textcolor{keyword}{struct\ }lookup\_data;}
\DoxyCodeLine{00966\ }
\DoxyCodeLine{00967\ \ \ \ \ \ \ \ \ \textcolor{keyword}{explicit}\ scale\_add\_reuse\_info(std::unique\_ptr<lookup\_data>\ data);}
\DoxyCodeLine{00968\ }
\DoxyCodeLine{00969\ \ \ \ \ \ \ \ \ std::unique\_ptr<lookup\_data>\ internal;}
\DoxyCodeLine{00970\ \ \ \ \ \};}
\DoxyCodeLine{00971\ }
\DoxyCodeLine{00986\ \ \ \ \ std::unique\_ptr<Csr>\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_a4a9bcad293b828a49dac453195abd212}{scale\_add}}(}
\DoxyCodeLine{00987\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1ptr__param}{ptr\_param}}<\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Dense}{Dense<value\_type>}}>\ scale\_this,}
\DoxyCodeLine{00988\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1ptr__param}{ptr\_param}}<\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Dense}{Dense<value\_type>}}>\ scale\_other,}
\DoxyCodeLine{00989\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1ptr__param}{ptr\_param<const\ Csr>}}\ mtx\_other)\ \textcolor{keyword}{const};}
\DoxyCodeLine{00990\ }
\DoxyCodeLine{01012\ \ \ \ \ std::pair<std::unique\_ptr<Csr>,\ scale\_add\_reuse\_info>\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_acdc158c60660d50703c2bc3cf97f4fb1}{add\_scale\_reuse}}(}
\DoxyCodeLine{01013\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1ptr__param}{ptr\_param}}<\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Dense}{Dense<value\_type>}}>\ scale\_this,}
\DoxyCodeLine{01014\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1ptr__param}{ptr\_param}}<\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Dense}{Dense<value\_type>}}>\ scale\_other,}
\DoxyCodeLine{01015\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1ptr__param}{ptr\_param<const\ Csr>}}\ mtx\_other)\ \textcolor{keyword}{const};}
\DoxyCodeLine{01016\ }
\DoxyCodeLine{01021\ \ \ \ \ \textcolor{keyword}{struct\ }\doxymbox{\hyperlink{structgko_1_1matrix_1_1Csr_1_1permuting__reuse__info_a19877f63bd773670f0aaef509257c1e6}{permuting\_reuse\_info}}\ \{}
\DoxyCodeLine{01023\ \ \ \ \ \ \ \ \ \textcolor{keyword}{explicit}\ \doxymbox{\hyperlink{structgko_1_1matrix_1_1Csr_1_1permuting__reuse__info_a19877f63bd773670f0aaef509257c1e6}{permuting\_reuse\_info}}();}
\DoxyCodeLine{01024\ }
\DoxyCodeLine{01026\ \ \ \ \ \ \ \ \ \textcolor{keyword}{explicit}\ \doxymbox{\hyperlink{structgko_1_1matrix_1_1Csr_1_1permuting__reuse__info_a972c4d156633e85d215e6a3c629df068}{permuting\_reuse\_info}}(}
\DoxyCodeLine{01027\ \ \ \ \ \ \ \ \ \ \ \ \ std::unique\_ptr<\doxymbox{\hyperlink{classgko_1_1matrix_1_1Permutation}{Permutation<index\_type>}}>\ value\_permutation);}
\DoxyCodeLine{01028\ }
\DoxyCodeLine{01036\ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{structgko_1_1matrix_1_1Csr_1_1permuting__reuse__info_a335568a4da6c11cff5dc7adbd347b4ce}{update\_values}}(\doxymbox{\hyperlink{classgko_1_1ptr__param}{ptr\_param<const\ Csr>}}\ input,}
\DoxyCodeLine{01037\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1ptr__param}{ptr\_param<Csr>}}\ output)\ \textcolor{keyword}{const};}
\DoxyCodeLine{01038\ }
\DoxyCodeLine{01039\ \ \ \ \ \ \ \ \ std::unique\_ptr<Permutation<IndexType>>\ value\_permutation;}
\DoxyCodeLine{01040\ \ \ \ \ \};}
\DoxyCodeLine{01041\ }
\DoxyCodeLine{01054\ \ \ \ \ std::pair<std::unique\_ptr<Csr>,\ permuting\_reuse\_info>\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_accf30d10cf9b83da853b72c138fb192f}{transpose\_reuse}}()}
\DoxyCodeLine{01055\ \ \ \ \ \ \ \ \ \textcolor{keyword}{const};}
\DoxyCodeLine{01056\ }
\DoxyCodeLine{01071\ \ \ \ \ std::unique\_ptr<Csr>\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_a898b9b458ff9e26c87c277fba3a9bdae}{permute}}(}
\DoxyCodeLine{01072\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1ptr__param}{ptr\_param}}<\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Permutation}{Permutation<index\_type>}}>\ permutation,}
\DoxyCodeLine{01073\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{namespacegko_1_1matrix_ade1f3cdbf05032c2d681fa151de02972}{permute\_mode}}\ mode\ =\ \doxymbox{\hyperlink{namespacegko_1_1matrix_ade1f3cdbf05032c2d681fa151de02972afeca3c730601be7fd57f1f0b668b4637}{permute\_mode::symmetric}})\ \textcolor{keyword}{const};}
\DoxyCodeLine{01074\ }
\DoxyCodeLine{01088\ \ \ \ \ std::unique\_ptr<Csr>\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_af0538658a2fad819129927dbd39de0ae}{permute}}(}
\DoxyCodeLine{01089\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1ptr__param}{ptr\_param}}<\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Permutation}{Permutation<index\_type>}}>\ row\_permutation,}
\DoxyCodeLine{01090\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1ptr__param}{ptr\_param}}<\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Permutation}{Permutation<index\_type>}}>\ column\_permutation,}
\DoxyCodeLine{01091\ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{bool}\ invert\ =\ \textcolor{keyword}{false})\ \textcolor{keyword}{const};}
\DoxyCodeLine{01092\ }
\DoxyCodeLine{01113\ \ \ \ \ std::pair<std::unique\_ptr<Csr>,\ permuting\_reuse\_info>\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_a05d792d40944735476606320d91290f4}{permute\_reuse}}(}
\DoxyCodeLine{01114\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1ptr__param}{ptr\_param}}<\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Permutation}{Permutation<index\_type>}}>\ permutation,}
\DoxyCodeLine{01115\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{namespacegko_1_1matrix_ade1f3cdbf05032c2d681fa151de02972}{permute\_mode}}\ mode\ =\ \doxymbox{\hyperlink{namespacegko_1_1matrix_ade1f3cdbf05032c2d681fa151de02972afeca3c730601be7fd57f1f0b668b4637}{permute\_mode::symmetric}})\ \textcolor{keyword}{const};}
\DoxyCodeLine{01116\ }
\DoxyCodeLine{01135\ \ \ \ \ std::pair<std::unique\_ptr<Csr>,\ permuting\_reuse\_info>\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_a6059f7474424460e1e0c25f5bf2c7c37}{permute\_reuse}}(}
\DoxyCodeLine{01136\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1ptr__param}{ptr\_param}}<\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Permutation}{Permutation<index\_type>}}>\ row\_permutation,}
\DoxyCodeLine{01137\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1ptr__param}{ptr\_param}}<\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Permutation}{Permutation<index\_type>}}>\ column\_permutation,}
\DoxyCodeLine{01138\ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{bool}\ invert\ =\ \textcolor{keyword}{false})\ \textcolor{keyword}{const};}
\DoxyCodeLine{01139\ }
\DoxyCodeLine{01149\ \ \ \ \ std::unique\_ptr<Csr>\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_a1c3c66d3baf3b05e52992b6f3f7611f7}{scale\_permute}}(}
\DoxyCodeLine{01150\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1ptr__param}{ptr\_param}}<\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1ScaledPermutation}{ScaledPermutation<value\_type,\ index\_type>}}>\ permutation,}
\DoxyCodeLine{01151\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{namespacegko_1_1matrix_ade1f3cdbf05032c2d681fa151de02972}{permute\_mode}}\ =\ \doxymbox{\hyperlink{namespacegko_1_1matrix_ade1f3cdbf05032c2d681fa151de02972afeca3c730601be7fd57f1f0b668b4637}{permute\_mode::symmetric}})\ \textcolor{keyword}{const};}
\DoxyCodeLine{01152\ }
\DoxyCodeLine{01165\ \ \ \ \ std::unique\_ptr<Csr>\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_acf9d804a766061d117e78a3534b2e80d}{scale\_permute}}(}
\DoxyCodeLine{01166\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1ptr__param}{ptr\_param}}<\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1ScaledPermutation}{ScaledPermutation<value\_type,\ index\_type>}}>}
\DoxyCodeLine{01167\ \ \ \ \ \ \ \ \ \ \ \ \ row\_permutation,}
\DoxyCodeLine{01168\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1ptr__param}{ptr\_param}}<\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1ScaledPermutation}{ScaledPermutation<value\_type,\ index\_type>}}>}
\DoxyCodeLine{01169\ \ \ \ \ \ \ \ \ \ \ \ \ column\_permutation,}
\DoxyCodeLine{01170\ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{bool}\ invert\ =\ \textcolor{keyword}{false})\ \textcolor{keyword}{const};}
\DoxyCodeLine{01171\ }
\DoxyCodeLine{01172\ \ \ \ \ std::unique\_ptr<LinOp>\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_a898b9b458ff9e26c87c277fba3a9bdae}{permute}}(}
\DoxyCodeLine{01173\ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1array}{array<IndexType>}}*\ permutation\_indices)\ \textcolor{keyword}{const\ override};}
\DoxyCodeLine{01174\ }
\DoxyCodeLine{01175\ \ \ \ \ std::unique\_ptr<LinOp>\ inverse\_permute(}
\DoxyCodeLine{01176\ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1array}{array<IndexType>}}*\ inverse\_permutation\_indices)\ \textcolor{keyword}{const\ override};}
\DoxyCodeLine{01177\ }
\DoxyCodeLine{01178\ \ \ \ \ std::unique\_ptr<LinOp>\ row\_permute(}
\DoxyCodeLine{01179\ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1array}{array<IndexType>}}*\ permutation\_indices)\ \textcolor{keyword}{const\ override};}
\DoxyCodeLine{01180\ }
\DoxyCodeLine{01181\ \ \ \ \ std::unique\_ptr<LinOp>\ column\_permute(}
\DoxyCodeLine{01182\ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1array}{array<IndexType>}}*\ permutation\_indices)\ \textcolor{keyword}{const\ override};}
\DoxyCodeLine{01183\ }
\DoxyCodeLine{01184\ \ \ \ \ std::unique\_ptr<LinOp>\ inverse\_row\_permute(}
\DoxyCodeLine{01185\ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1array}{array<IndexType>}}*\ inverse\_permutation\_indices)\ \textcolor{keyword}{const\ override};}
\DoxyCodeLine{01186\ }
\DoxyCodeLine{01187\ \ \ \ \ std::unique\_ptr<LinOp>\ inverse\_column\_permute(}
\DoxyCodeLine{01188\ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1array}{array<IndexType>}}*\ inverse\_permutation\_indices)\ \textcolor{keyword}{const\ override};}
\DoxyCodeLine{01189\ }
\DoxyCodeLine{01190\ \ \ \ \ std::unique\_ptr<Diagonal<ValueType>>\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_a75ddc647a3998ca75e15ac8cd29c24ce}{extract\_diagonal}}()\ \textcolor{keyword}{const\ override};}
\DoxyCodeLine{01191\ }
\DoxyCodeLine{01192\ \ \ \ \ std::unique\_ptr<absolute\_type>\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_a2435b1ff883ca33fa3874bc81aada57b}{compute\_absolute}}()\ \textcolor{keyword}{const\ override};}
\DoxyCodeLine{01193\ }
\DoxyCodeLine{01194\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_ab4cc1ed324551291d385d317e75ad256}{compute\_absolute\_inplace}}()\ \textcolor{keyword}{override};}
\DoxyCodeLine{01195\ }
\DoxyCodeLine{01199\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_ac817665ebedfc099180a785d813db8ef}{sort\_by\_column\_index}}();}
\DoxyCodeLine{01200\ }
\DoxyCodeLine{01201\ \ \ \ \ \textcolor{comment}{/*}}
\DoxyCodeLine{01202\ \textcolor{comment}{\ \ \ \ \ *\ Tests\ if\ all\ row\ entry\ pairs\ (value,\ col\_idx)\ are\ sorted\ by\ column\ index}}
\DoxyCodeLine{01203\ \textcolor{comment}{\ \ \ \ \ *}}
\DoxyCodeLine{01204\ \textcolor{comment}{\ \ \ \ \ *\ @returns\ True\ if\ all\ row\ entry\ pairs\ (value,\ col\_idx)\ are\ sorted\ by}}
\DoxyCodeLine{01205\ \textcolor{comment}{\ \ \ \ \ *\ \ \ \ \ \ \ \ \ \ column\ index}}
\DoxyCodeLine{01206\ \textcolor{comment}{\ \ \ \ \ */}}
\DoxyCodeLine{01207\ \ \ \ \ \textcolor{keywordtype}{bool}\ is\_sorted\_by\_column\_index()\ \textcolor{keyword}{const};}
\DoxyCodeLine{01208\ }
\DoxyCodeLine{01214\ \ \ \ \ value\_type*\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_ade22bdc09b0ef6d9740feeaa702fdd51}{get\_values}}()\ noexcept\ \{\ \textcolor{keywordflow}{return}\ values\_.get\_data();\ \}}
\DoxyCodeLine{01215\ }
\DoxyCodeLine{01223\ \ \ \ \ \textcolor{keyword}{const}\ value\_type*\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_aad85907f0b9717618ed5dabcd56e4e39}{get\_const\_values}}()\ const\ noexcept}
\DoxyCodeLine{01224\ \ \ \ \ \{}
\DoxyCodeLine{01225\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ values\_.get\_const\_data();}
\DoxyCodeLine{01226\ \ \ \ \ \}}
\DoxyCodeLine{01227\ }
\DoxyCodeLine{01232\ \ \ \ \ std::unique\_ptr<Dense<ValueType>>\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_ad0f3a8d348dc828dd32da8c6b4bf93f7}{create\_value\_view}}();}
\DoxyCodeLine{01233\ }
\DoxyCodeLine{01238\ \ \ \ \ std::unique\_ptr<const\ Dense<ValueType>>\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_a8c1115150d40666b4df0eacbacfd474e}{create\_const\_value\_view}}()\ \textcolor{keyword}{const};}
\DoxyCodeLine{01239\ }
\DoxyCodeLine{01245\ \ \ \ \ index\_type*\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_ae701fb37da0c745c314fb3472cef5df4}{get\_col\_idxs}}()\ noexcept\ \{\ \textcolor{keywordflow}{return}\ col\_idxs\_.get\_data();\ \}}
\DoxyCodeLine{01246\ }
\DoxyCodeLine{01254\ \ \ \ \ \textcolor{keyword}{const}\ index\_type*\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_ac3a1ef745f900fd534999a69eae3ff32}{get\_const\_col\_idxs}}()\ const\ noexcept}
\DoxyCodeLine{01255\ \ \ \ \ \{}
\DoxyCodeLine{01256\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ col\_idxs\_.get\_const\_data();}
\DoxyCodeLine{01257\ \ \ \ \ \}}
\DoxyCodeLine{01258\ }
\DoxyCodeLine{01264\ \ \ \ \ index\_type*\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_a83f2a63175bbffa39808543a3d4b3f3b}{get\_row\_ptrs}}()\ noexcept\ \{\ \textcolor{keywordflow}{return}\ row\_ptrs\_.get\_data();\ \}}
\DoxyCodeLine{01265\ }
\DoxyCodeLine{01273\ \ \ \ \ \textcolor{keyword}{const}\ index\_type*\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_a29e603a026ca798346e74ee8408b2f51}{get\_const\_row\_ptrs}}()\ const\ noexcept}
\DoxyCodeLine{01274\ \ \ \ \ \{}
\DoxyCodeLine{01275\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ row\_ptrs\_.get\_const\_data();}
\DoxyCodeLine{01276\ \ \ \ \ \}}
\DoxyCodeLine{01277\ }
\DoxyCodeLine{01283\ \ \ \ \ index\_type*\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_a4a8d2975871fdd779e447a8ef9e991d1}{get\_srow}}()\ noexcept\ \{\ \textcolor{keywordflow}{return}\ srow\_.get\_data();\ \}}
\DoxyCodeLine{01284\ }
\DoxyCodeLine{01292\ \ \ \ \ \textcolor{keyword}{const}\ index\_type*\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_a396e0e99ce4fefca9dcbe45e4fccc838}{get\_const\_srow}}()\ const\ noexcept}
\DoxyCodeLine{01293\ \ \ \ \ \{}
\DoxyCodeLine{01294\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ srow\_.get\_const\_data();}
\DoxyCodeLine{01295\ \ \ \ \ \}}
\DoxyCodeLine{01296\ }
\DoxyCodeLine{01302\ \ \ \ \ \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\_type}}\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_a5b8c25c2fb1bbea62a3afdec8f8340c5}{get\_num\_srow\_elements}}()\ const\ noexcept}
\DoxyCodeLine{01303\ \ \ \ \ \{}
\DoxyCodeLine{01304\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ srow\_.get\_size();}
\DoxyCodeLine{01305\ \ \ \ \ \}}
\DoxyCodeLine{01306\ }
\DoxyCodeLine{01312\ \ \ \ \ \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\_type}}\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_ab70c085fc3df11a4ed9fe74b40844c5c}{get\_num\_stored\_elements}}()\ const\ noexcept}
\DoxyCodeLine{01313\ \ \ \ \ \{}
\DoxyCodeLine{01314\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ values\_.get\_size();}
\DoxyCodeLine{01315\ \ \ \ \ \}}
\DoxyCodeLine{01316\ }
\DoxyCodeLine{01321\ \ \ \ \ std::shared\_ptr<strategy\_type>\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_abb20626b04360436259fdc13b00e59b0}{get\_strategy}}()\ const\ noexcept}
\DoxyCodeLine{01322\ \ \ \ \ \{}
\DoxyCodeLine{01323\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ strategy\_;}
\DoxyCodeLine{01324\ \ \ \ \ \}}
\DoxyCodeLine{01325\ }
\DoxyCodeLine{01331\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_a3e0f6f2a9d773de0551068d514bf9703}{set\_strategy}}(std::shared\_ptr<strategy\_type>\ strategy)}
\DoxyCodeLine{01332\ \ \ \ \ \{}
\DoxyCodeLine{01333\ \ \ \ \ \ \ \ \ strategy\_\ =\ std::move(strategy-\/>copy());}
\DoxyCodeLine{01334\ \ \ \ \ \ \ \ \ this-\/>make\_srow();}
\DoxyCodeLine{01335\ \ \ \ \ \}}
\DoxyCodeLine{01336\ }
\DoxyCodeLine{01343\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_ad1db62aaad519a9774dde49ff411edde}{scale}}(\doxymbox{\hyperlink{classgko_1_1ptr__param}{ptr\_param<const\ LinOp>}}\ alpha)}
\DoxyCodeLine{01344\ \ \ \ \ \{}
\DoxyCodeLine{01345\ \ \ \ \ \ \ \ \ \textcolor{keyword}{auto}\ exec\ =\ this-\/>get\_executor();}
\DoxyCodeLine{01346\ \ \ \ \ \ \ \ \ GKO\_ASSERT\_EQUAL\_DIMENSIONS(alpha,\ \doxymbox{\hyperlink{structgko_1_1dim}{dim<2>}}(1,\ 1));}
\DoxyCodeLine{01347\ \ \ \ \ \ \ \ \ this-\/>scale\_impl(\doxymbox{\hyperlink{namespacegko_adf2f8602dc9453752a787b40bbf13fcf}{make\_temporary\_clone}}(exec,\ alpha).get());}
\DoxyCodeLine{01348\ \ \ \ \ \}}
\DoxyCodeLine{01349\ }
\DoxyCodeLine{01356\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_a3ed41ecd59dcfe1b805ed910fada56a9}{inv\_scale}}(\doxymbox{\hyperlink{classgko_1_1ptr__param}{ptr\_param<const\ LinOp>}}\ alpha)}
\DoxyCodeLine{01357\ \ \ \ \ \{}
\DoxyCodeLine{01358\ \ \ \ \ \ \ \ \ \textcolor{keyword}{auto}\ exec\ =\ this-\/>get\_executor();}
\DoxyCodeLine{01359\ \ \ \ \ \ \ \ \ GKO\_ASSERT\_EQUAL\_DIMENSIONS(alpha,\ \doxymbox{\hyperlink{structgko_1_1dim}{dim<2>}}(1,\ 1));}
\DoxyCodeLine{01360\ \ \ \ \ \ \ \ \ this-\/>inv\_scale\_impl(\doxymbox{\hyperlink{namespacegko_adf2f8602dc9453752a787b40bbf13fcf}{make\_temporary\_clone}}(exec,\ alpha).get());}
\DoxyCodeLine{01361\ \ \ \ \ \}}
\DoxyCodeLine{01362\ }
\DoxyCodeLine{01371\ \ \ \ \ \textcolor{keyword}{static}\ std::unique\_ptr<Csr>\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_a5261906eecda7da087638981d011a9b2}{create}}(std::shared\_ptr<const\ Executor>\ exec,}
\DoxyCodeLine{01372\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ std::shared\_ptr<strategy\_type>\ strategy);}
\DoxyCodeLine{01373\ }
\DoxyCodeLine{01385\ \ \ \ \ \textcolor{keyword}{static}\ std::unique\_ptr<Csr>\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_a2f5e75fa7d4b58fa59b1d9dbead788d2}{create}}(}
\DoxyCodeLine{01386\ \ \ \ \ \ \ \ \ std::shared\_ptr<const\ Executor>\ exec,\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{structgko_1_1dim}{dim<2>}}\&\ size\ =\ \{\},}
\DoxyCodeLine{01387\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\_type}}\ num\_nonzeros\ =\ \{\},}
\DoxyCodeLine{01388\ \ \ \ \ \ \ \ \ std::shared\_ptr<strategy\_type>\ strategy\ =\ \textcolor{keyword}{nullptr});}
\DoxyCodeLine{01389\ }
\DoxyCodeLine{01409\ \ \ \ \ \textcolor{keyword}{static}\ std::unique\_ptr<Csr>\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_a7f84d6372882412d22518bdd655813ff}{create}}(}
\DoxyCodeLine{01410\ \ \ \ \ \ \ \ \ std::shared\_ptr<const\ Executor>\ exec,\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{structgko_1_1dim}{dim<2>}}\&\ size,}
\DoxyCodeLine{01411\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1array}{array<value\_type>}}\ values,\ \doxymbox{\hyperlink{classgko_1_1array}{array<index\_type>}}\ col\_idxs,}
\DoxyCodeLine{01412\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1array}{array<index\_type>}}\ row\_ptrs,}
\DoxyCodeLine{01413\ \ \ \ \ \ \ \ \ std::shared\_ptr<strategy\_type>\ strategy\ =\ \textcolor{keyword}{nullptr});}
\DoxyCodeLine{01414\ }
\DoxyCodeLine{01419\ \ \ \ \ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ InputValueType,\ \textcolor{keyword}{typename}\ InputColumnIndexType,}
\DoxyCodeLine{01420\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{typename}\ InputRowPtrType>}
\DoxyCodeLine{01421\ \ \ \ \ GKO\_DEPRECATED(}
\DoxyCodeLine{01422\ \ \ \ \ \ \ \ \ \textcolor{stringliteral}{"{}explicitly\ construct\ the\ gko::array\ argument\ instead\ of\ passing\ "{}}}
\DoxyCodeLine{01423\ \ \ \ \ \ \ \ \ \textcolor{stringliteral}{"{}initializer\ lists"{}})}
\DoxyCodeLine{01424\ \ \ \ \ static\ \doxymbox{\hyperlink{namespacestd}{std}}::unique\_ptr<\doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_a9094bdf34a8c56f115252f0fe5a7f5ae}{Csr}}>\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_a5261906eecda7da087638981d011a9b2}{create}}(}
\DoxyCodeLine{01425\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{namespacestd}{std}}::shared\_ptr<const\ \doxymbox{\hyperlink{classgko_1_1Executor}{Executor}}>\ exec,\ const\ \doxymbox{\hyperlink{structgko_1_1dim}{dim}}<2>\&\ size,}
\DoxyCodeLine{01426\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{namespacestd}{std}}::initializer\_list<InputValueType>\ values,}
\DoxyCodeLine{01427\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{namespacestd}{std}}::initializer\_list<InputColumnIndexType>\ col\_idxs,}
\DoxyCodeLine{01428\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{namespacestd}{std}}::initializer\_list<InputRowPtrType>\ row\_ptrs)}
\DoxyCodeLine{01429\ \ \ \ \ \{}
\DoxyCodeLine{01430\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_a5261906eecda7da087638981d011a9b2}{create}}(exec,\ size,\ \doxymbox{\hyperlink{classgko_1_1array}{array<value\_type>}}\{exec,\ std::move(values)\},}
\DoxyCodeLine{01431\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1array}{array<index\_type>}}\{exec,\ std::move(col\_idxs)\},}
\DoxyCodeLine{01432\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1array}{array<index\_type>}}\{exec,\ std::move(row\_ptrs)\});}
\DoxyCodeLine{01433\ \ \ \ \ \}}
\DoxyCodeLine{01434\ }
\DoxyCodeLine{01450\ \ \ \ \ \textcolor{keyword}{static}\ std::unique\_ptr<const\ Csr>\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_a8e17829add94a2a443105cceca3a5808}{create\_const}}(}
\DoxyCodeLine{01451\ \ \ \ \ \ \ \ \ std::shared\_ptr<const\ Executor>\ exec,\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{structgko_1_1dim}{dim<2>}}\&\ size,}
\DoxyCodeLine{01452\ \ \ \ \ \ \ \ \ gko::detail::const\_array\_view<ValueType>\&\&\ values,}
\DoxyCodeLine{01453\ \ \ \ \ \ \ \ \ gko::detail::const\_array\_view<IndexType>\&\&\ col\_idxs,}
\DoxyCodeLine{01454\ \ \ \ \ \ \ \ \ gko::detail::const\_array\_view<IndexType>\&\&\ row\_ptrs,}
\DoxyCodeLine{01455\ \ \ \ \ \ \ \ \ std::shared\_ptr<strategy\_type>\ strategy\ =\ \textcolor{keyword}{nullptr});}
\DoxyCodeLine{01456\ }
\DoxyCodeLine{01469\ \ \ \ \ std::unique\_ptr<Csr<ValueType,\ IndexType>>\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_a714b3534b309ecb2bb05958dbbf4885e}{create\_submatrix}}(}
\DoxyCodeLine{01470\ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1index__set}{index\_set<IndexType>}}\&\ row\_index\_set,}
\DoxyCodeLine{01471\ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1index__set}{index\_set<IndexType>}}\&\ column\_index\_set)\ \textcolor{keyword}{const};}
\DoxyCodeLine{01472\ }
\DoxyCodeLine{01484\ \ \ \ \ std::unique\_ptr<Csr<ValueType,\ IndexType>>\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_a2d1d5b4b310ed444ccbb178e241a9822}{create\_submatrix}}(}
\DoxyCodeLine{01485\ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{structgko_1_1span}{span}}\&\ row\_span,\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{structgko_1_1span}{span}}\&\ column\_span)\ \textcolor{keyword}{const};}
\DoxyCodeLine{01486\ }
\DoxyCodeLine{01490\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_a9094bdf34a8c56f115252f0fe5a7f5ae}{Csr}}\&\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_a0f8038628e96f1995e4942863415ad63}{operator=}}(\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_a9094bdf34a8c56f115252f0fe5a7f5ae}{Csr}}\&);}
\DoxyCodeLine{01491\ }
\DoxyCodeLine{01497\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_a9094bdf34a8c56f115252f0fe5a7f5ae}{Csr}}\&\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_a96d132e8d22d7565f93540eb50bcc32c}{operator=}}(\doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_a9094bdf34a8c56f115252f0fe5a7f5ae}{Csr}}\&\&);}
\DoxyCodeLine{01498\ }
\DoxyCodeLine{01502\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_a9094bdf34a8c56f115252f0fe5a7f5ae}{Csr}}(\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_a9094bdf34a8c56f115252f0fe5a7f5ae}{Csr}}\&);}
\DoxyCodeLine{01503\ }
\DoxyCodeLine{01509\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_aee53e78f8b1f8e3d2a6c407baac456d9}{Csr}}(\doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_a9094bdf34a8c56f115252f0fe5a7f5ae}{Csr}}\&\&);}
\DoxyCodeLine{01510\ }
\DoxyCodeLine{01511\ \textcolor{keyword}{protected}:}
\DoxyCodeLine{01512\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_a9094bdf34a8c56f115252f0fe5a7f5ae}{Csr}}(std::shared\_ptr<const\ Executor>\ exec,\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{structgko_1_1dim}{dim<2>}}\&\ size\ =\ \{\},}
\DoxyCodeLine{01513\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\_type}}\ num\_nonzeros\ =\ \{\},}
\DoxyCodeLine{01514\ \ \ \ \ \ \ \ \ std::shared\_ptr<strategy\_type>\ strategy\ =\ \textcolor{keyword}{nullptr});}
\DoxyCodeLine{01515\ }
\DoxyCodeLine{01516\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_a9094bdf34a8c56f115252f0fe5a7f5ae}{Csr}}(std::shared\_ptr<const\ Executor>\ exec,\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{structgko_1_1dim}{dim<2>}}\&\ size,}
\DoxyCodeLine{01517\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1array}{array<value\_type>}}\ values,\ \doxymbox{\hyperlink{classgko_1_1array}{array<index\_type>}}\ col\_idxs,}
\DoxyCodeLine{01518\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1array}{array<index\_type>}}\ row\_ptrs,}
\DoxyCodeLine{01519\ \ \ \ \ \ \ \ \ std::shared\_ptr<strategy\_type>\ strategy\ =\ \textcolor{keyword}{nullptr});}
\DoxyCodeLine{01520\ }
\DoxyCodeLine{01521\ \ \ \ \ \textcolor{keywordtype}{void}\ apply\_impl(\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ b,\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ x)\ \textcolor{keyword}{const\ override};}
\DoxyCodeLine{01522\ }
\DoxyCodeLine{01523\ \ \ \ \ \textcolor{keywordtype}{void}\ apply\_impl(\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ alpha,\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ b,\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ beta,}
\DoxyCodeLine{01524\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ x)\ \textcolor{keyword}{const\ override};}
\DoxyCodeLine{01525\ }
\DoxyCodeLine{01526\ \ \ \ \ \textcolor{comment}{//\ TODO:\ This\ provides\ some\ more\ sane\ settings.\ Please\ fix\ this!}}
\DoxyCodeLine{01527\ \ \ \ \ \textcolor{keyword}{static}\ std::shared\_ptr<strategy\_type>\ make\_default\_strategy(}
\DoxyCodeLine{01528\ \ \ \ \ \ \ \ \ std::shared\_ptr<const\ Executor>\ exec)}
\DoxyCodeLine{01529\ \ \ \ \ \{}
\DoxyCodeLine{01530\ \ \ \ \ \ \ \ \ \textcolor{keyword}{auto}\ cuda\_exec\ =\ std::dynamic\_pointer\_cast<const\ CudaExecutor>(exec);}
\DoxyCodeLine{01531\ \ \ \ \ \ \ \ \ \textcolor{keyword}{auto}\ hip\_exec\ =\ std::dynamic\_pointer\_cast<const\ HipExecutor>(exec);}
\DoxyCodeLine{01532\ \ \ \ \ \ \ \ \ \textcolor{keyword}{auto}\ dpcpp\_exec\ =\ std::dynamic\_pointer\_cast<const\ DpcppExecutor>(exec);}
\DoxyCodeLine{01533\ \ \ \ \ \ \ \ \ std::shared\_ptr<strategy\_type>\ new\_strategy;}
\DoxyCodeLine{01534\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (cuda\_exec)\ \{}
\DoxyCodeLine{01535\ \ \ \ \ \ \ \ \ \ \ \ \ new\_strategy\ =\ std::make\_shared<automatical>(cuda\_exec);}
\DoxyCodeLine{01536\ \ \ \ \ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \textcolor{keywordflow}{if}\ (hip\_exec)\ \{}
\DoxyCodeLine{01537\ \ \ \ \ \ \ \ \ \ \ \ \ new\_strategy\ =\ std::make\_shared<automatical>(hip\_exec);}
\DoxyCodeLine{01538\ \ \ \ \ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \textcolor{keywordflow}{if}\ (dpcpp\_exec)\ \{}
\DoxyCodeLine{01539\ \ \ \ \ \ \ \ \ \ \ \ \ new\_strategy\ =\ std::make\_shared<automatical>(dpcpp\_exec);}
\DoxyCodeLine{01540\ \ \ \ \ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \{}
\DoxyCodeLine{01541\ \ \ \ \ \ \ \ \ \ \ \ \ new\_strategy\ =\ std::make\_shared<classical>();}
\DoxyCodeLine{01542\ \ \ \ \ \ \ \ \ \}}
\DoxyCodeLine{01543\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ new\_strategy;}
\DoxyCodeLine{01544\ \ \ \ \ \}}
\DoxyCodeLine{01545\ }
\DoxyCodeLine{01546\ \ \ \ \ \textcolor{comment}{//\ TODO\ clean\ this\ up\ as\ soon\ as\ we\ improve\ strategy\_type}}
\DoxyCodeLine{01547\ \ \ \ \ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ CsrType>}
\DoxyCodeLine{01548\ \ \ \ \ \textcolor{keywordtype}{void}\ convert\_strategy\_helper(CsrType*\ result)\textcolor{keyword}{\ const}}
\DoxyCodeLine{01549\ \textcolor{keyword}{\ \ \ \ }\{}
\DoxyCodeLine{01550\ \ \ \ \ \ \ \ \ \textcolor{keyword}{auto}\ strat\ =\ this-\/>\doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_abb20626b04360436259fdc13b00e59b0}{get\_strategy}}().get();}
\DoxyCodeLine{01551\ \ \ \ \ \ \ \ \ std::shared\_ptr<typename\ CsrType::strategy\_type>\ new\_strat;}
\DoxyCodeLine{01552\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (\textcolor{keyword}{dynamic\_cast<}\doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_1_1classical}{classical}}*\textcolor{keyword}{>}(strat))\ \{}
\DoxyCodeLine{01553\ \ \ \ \ \ \ \ \ \ \ \ \ new\_strat\ =\ std::make\_shared<typename\ CsrType::classical>();}
\DoxyCodeLine{01554\ \ \ \ \ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \textcolor{keywordflow}{if}\ (\textcolor{keyword}{dynamic\_cast<}\doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_1_1merge__path}{merge\_path}}*\textcolor{keyword}{>}(strat))\ \{}
\DoxyCodeLine{01555\ \ \ \ \ \ \ \ \ \ \ \ \ new\_strat\ =\ std::make\_shared<typename\ CsrType::merge\_path>();}
\DoxyCodeLine{01556\ \ \ \ \ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \textcolor{keywordflow}{if}\ (\textcolor{keyword}{dynamic\_cast<}\doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_1_1cusparse}{cusparse}}*\textcolor{keyword}{>}(strat))\ \{}
\DoxyCodeLine{01557\ \ \ \ \ \ \ \ \ \ \ \ \ new\_strat\ =\ std::make\_shared<typename\ CsrType::cusparse>();}
\DoxyCodeLine{01558\ \ \ \ \ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \textcolor{keywordflow}{if}\ (\textcolor{keyword}{dynamic\_cast<}\doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_1_1sparselib}{sparselib}}*\textcolor{keyword}{>}(strat))\ \{}
\DoxyCodeLine{01559\ \ \ \ \ \ \ \ \ \ \ \ \ new\_strat\ =\ std::make\_shared<typename\ CsrType::sparselib>();}
\DoxyCodeLine{01560\ \ \ \ \ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \{}
\DoxyCodeLine{01561\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{auto}\ rexec\ =\ result-\/>get\_executor();}
\DoxyCodeLine{01562\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{auto}\ cuda\_exec\ =}
\DoxyCodeLine{01563\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ std::dynamic\_pointer\_cast<const\ CudaExecutor>(rexec);}
\DoxyCodeLine{01564\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{auto}\ hip\_exec\ =\ std::dynamic\_pointer\_cast<const\ HipExecutor>(rexec);}
\DoxyCodeLine{01565\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{auto}\ dpcpp\_exec\ =}
\DoxyCodeLine{01566\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ std::dynamic\_pointer\_cast<const\ DpcppExecutor>(rexec);}
\DoxyCodeLine{01567\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{auto}\ lb\ =\ \textcolor{keyword}{dynamic\_cast<}\doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr_1_1load__balance}{load\_balance}}*\textcolor{keyword}{>}(strat);}
\DoxyCodeLine{01568\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (cuda\_exec)\ \{}
\DoxyCodeLine{01569\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (lb)\ \{}
\DoxyCodeLine{01570\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ new\_strat\ =}
\DoxyCodeLine{01571\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ std::make\_shared<typename\ CsrType::load\_balance>(}
\DoxyCodeLine{01572\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ cuda\_exec);}
\DoxyCodeLine{01573\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \{}
\DoxyCodeLine{01574\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ new\_strat\ =\ std::make\_shared<typename\ CsrType::automatical>(}
\DoxyCodeLine{01575\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ cuda\_exec);}
\DoxyCodeLine{01576\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}}
\DoxyCodeLine{01577\ \ \ \ \ \ \ \ \ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \textcolor{keywordflow}{if}\ (hip\_exec)\ \{}
\DoxyCodeLine{01578\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (lb)\ \{}
\DoxyCodeLine{01579\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ new\_strat\ =}
\DoxyCodeLine{01580\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ std::make\_shared<typename\ CsrType::load\_balance>(}
\DoxyCodeLine{01581\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ hip\_exec);}
\DoxyCodeLine{01582\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \{}
\DoxyCodeLine{01583\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ new\_strat\ =\ std::make\_shared<typename\ CsrType::automatical>(}
\DoxyCodeLine{01584\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ hip\_exec);}
\DoxyCodeLine{01585\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}}
\DoxyCodeLine{01586\ \ \ \ \ \ \ \ \ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \textcolor{keywordflow}{if}\ (dpcpp\_exec)\ \{}
\DoxyCodeLine{01587\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (lb)\ \{}
\DoxyCodeLine{01588\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ new\_strat\ =}
\DoxyCodeLine{01589\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ std::make\_shared<typename\ CsrType::load\_balance>(}
\DoxyCodeLine{01590\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ dpcpp\_exec);}
\DoxyCodeLine{01591\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \{}
\DoxyCodeLine{01592\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ new\_strat\ =\ std::make\_shared<typename\ CsrType::automatical>(}
\DoxyCodeLine{01593\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ dpcpp\_exec);}
\DoxyCodeLine{01594\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}}
\DoxyCodeLine{01595\ \ \ \ \ \ \ \ \ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \{}
\DoxyCodeLine{01596\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ Try\ to\ preserve\ this\ executor's\ configuration}}
\DoxyCodeLine{01597\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{auto}\ this\_cuda\_exec\ =}
\DoxyCodeLine{01598\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ std::dynamic\_pointer\_cast<const\ CudaExecutor>(}
\DoxyCodeLine{01599\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ this-\/>get\_executor());}
\DoxyCodeLine{01600\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{auto}\ this\_hip\_exec\ =}
\DoxyCodeLine{01601\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ std::dynamic\_pointer\_cast<const\ HipExecutor>(}
\DoxyCodeLine{01602\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ this-\/>get\_executor());}
\DoxyCodeLine{01603\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{auto}\ this\_dpcpp\_exec\ =}
\DoxyCodeLine{01604\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ std::dynamic\_pointer\_cast<const\ DpcppExecutor>(}
\DoxyCodeLine{01605\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ this-\/>get\_executor());}
\DoxyCodeLine{01606\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (this\_cuda\_exec)\ \{}
\DoxyCodeLine{01607\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (lb)\ \{}
\DoxyCodeLine{01608\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ new\_strat\ =}
\DoxyCodeLine{01609\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ std::make\_shared<typename\ CsrType::load\_balance>(}
\DoxyCodeLine{01610\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ this\_cuda\_exec);}
\DoxyCodeLine{01611\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \{}
\DoxyCodeLine{01612\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ new\_strat\ =}
\DoxyCodeLine{01613\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ std::make\_shared<typename\ CsrType::automatical>(}
\DoxyCodeLine{01614\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ this\_cuda\_exec);}
\DoxyCodeLine{01615\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}}
\DoxyCodeLine{01616\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \textcolor{keywordflow}{if}\ (this\_hip\_exec)\ \{}
\DoxyCodeLine{01617\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (lb)\ \{}
\DoxyCodeLine{01618\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ new\_strat\ =}
\DoxyCodeLine{01619\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ std::make\_shared<typename\ CsrType::load\_balance>(}
\DoxyCodeLine{01620\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ this\_hip\_exec);}
\DoxyCodeLine{01621\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \{}
\DoxyCodeLine{01622\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ new\_strat\ =}
\DoxyCodeLine{01623\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ std::make\_shared<typename\ CsrType::automatical>(}
\DoxyCodeLine{01624\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ this\_hip\_exec);}
\DoxyCodeLine{01625\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}}
\DoxyCodeLine{01626\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \textcolor{keywordflow}{if}\ (this\_dpcpp\_exec)\ \{}
\DoxyCodeLine{01627\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (lb)\ \{}
\DoxyCodeLine{01628\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ new\_strat\ =}
\DoxyCodeLine{01629\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ std::make\_shared<typename\ CsrType::load\_balance>(}
\DoxyCodeLine{01630\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ this\_dpcpp\_exec);}
\DoxyCodeLine{01631\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \{}
\DoxyCodeLine{01632\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ new\_strat\ =}
\DoxyCodeLine{01633\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ std::make\_shared<typename\ CsrType::automatical>(}
\DoxyCodeLine{01634\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ this\_dpcpp\_exec);}
\DoxyCodeLine{01635\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}}
\DoxyCodeLine{01636\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \{}
\DoxyCodeLine{01637\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ FIXME:\ this\ changes\ strategies.}}
\DoxyCodeLine{01638\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ We\ had\ a\ load\ balance\ or\ automatical\ strategy\ from\ a\ non}}
\DoxyCodeLine{01639\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ HIP\ or\ Cuda\ executor\ and\ are\ moving\ to\ a\ non\ HIP\ or\ Cuda}}
\DoxyCodeLine{01640\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ executor.}}
\DoxyCodeLine{01641\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ new\_strat\ =\ std::make\_shared<typename\ CsrType::classical>();}
\DoxyCodeLine{01642\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}}
\DoxyCodeLine{01643\ \ \ \ \ \ \ \ \ \ \ \ \ \}}
\DoxyCodeLine{01644\ \ \ \ \ \ \ \ \ \}}
\DoxyCodeLine{01645\ \ \ \ \ \ \ \ \ result-\/>set\_strategy(new\_strat);}
\DoxyCodeLine{01646\ \ \ \ \ \}}
\DoxyCodeLine{01647\ }
\DoxyCodeLine{01651\ \ \ \ \ \textcolor{keywordtype}{void}\ make\_srow()}
\DoxyCodeLine{01652\ \ \ \ \ \{}
\DoxyCodeLine{01653\ \ \ \ \ \ \ \ \ srow\_.resize\_and\_reset(strategy\_-\/>clac\_size(values\_.get\_size()));}
\DoxyCodeLine{01654\ \ \ \ \ \ \ \ \ strategy\_-\/>process(row\_ptrs\_,\ \&srow\_);}
\DoxyCodeLine{01655\ \ \ \ \ \}}
\DoxyCodeLine{01656\ }
\DoxyCodeLine{01663\ \ \ \ \ \textcolor{keyword}{virtual}\ \textcolor{keywordtype}{void}\ scale\_impl(\textcolor{keyword}{const}\ LinOp*\ alpha);}
\DoxyCodeLine{01664\ }
\DoxyCodeLine{01671\ \ \ \ \ \textcolor{keyword}{virtual}\ \textcolor{keywordtype}{void}\ inv\_scale\_impl(\textcolor{keyword}{const}\ LinOp*\ alpha);}
\DoxyCodeLine{01672\ }
\DoxyCodeLine{01673\ \textcolor{keyword}{private}:}
\DoxyCodeLine{01674\ \ \ \ \ std::shared\_ptr<strategy\_type>\ strategy\_;}
\DoxyCodeLine{01675\ \ \ \ \ array<value\_type>\ values\_;}
\DoxyCodeLine{01676\ \ \ \ \ array<index\_type>\ col\_idxs\_;}
\DoxyCodeLine{01677\ \ \ \ \ array<index\_type>\ row\_ptrs\_;}
\DoxyCodeLine{01678\ \ \ \ \ array<index\_type>\ srow\_;}
\DoxyCodeLine{01679\ }
\DoxyCodeLine{01680\ \ \ \ \ \textcolor{keywordtype}{void}\ add\_scaled\_identity\_impl(\textcolor{keyword}{const}\ LinOp*\ a,\ \textcolor{keyword}{const}\ LinOp*\ b)\ \textcolor{keyword}{override};}
\DoxyCodeLine{01681\ \};}
\DoxyCodeLine{01682\ }
\DoxyCodeLine{01683\ }
\DoxyCodeLine{01684\ \textcolor{keyword}{namespace\ }detail\ \{}
\DoxyCodeLine{01685\ }
\DoxyCodeLine{01686\ }
\DoxyCodeLine{01693\ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ ValueType,\ \textcolor{keyword}{typename}\ IndexType>}
\DoxyCodeLine{01694\ \textcolor{keywordtype}{void}\ strategy\_rebuild\_helper(Csr<ValueType,\ IndexType>*\ result)}
\DoxyCodeLine{01695\ \{}
\DoxyCodeLine{01696\ \ \ \ \ \textcolor{keyword}{using\ }load\_balance\ =\ \textcolor{keyword}{typename}\ Csr<ValueType,\ IndexType>::load\_balance;}
\DoxyCodeLine{01697\ \ \ \ \ \textcolor{keyword}{using\ }automatical\ =\ \textcolor{keyword}{typename}\ Csr<ValueType,\ IndexType>::automatical;}
\DoxyCodeLine{01698\ \ \ \ \ \textcolor{keyword}{auto}\ strategy\ =\ result-\/>get\_strategy();}
\DoxyCodeLine{01699\ \ \ \ \ \textcolor{keyword}{auto}\ executor\ =\ result-\/>get\_executor();}
\DoxyCodeLine{01700\ \ \ \ \ \textcolor{keywordflow}{if}\ (std::dynamic\_pointer\_cast<load\_balance>(strategy))\ \{}
\DoxyCodeLine{01701\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (\textcolor{keyword}{auto}\ exec\ =}
\DoxyCodeLine{01702\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ std::dynamic\_pointer\_cast<const\ HipExecutor>(executor))\ \{}
\DoxyCodeLine{01703\ \ \ \ \ \ \ \ \ \ \ \ \ result-\/>set\_strategy(std::make\_shared<load\_balance>(exec));}
\DoxyCodeLine{01704\ \ \ \ \ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \textcolor{keywordflow}{if}\ (\textcolor{keyword}{auto}\ exec\ =\ std::dynamic\_pointer\_cast<const\ CudaExecutor>(}
\DoxyCodeLine{01705\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ executor))\ \{}
\DoxyCodeLine{01706\ \ \ \ \ \ \ \ \ \ \ \ \ result-\/>set\_strategy(std::make\_shared<load\_balance>(exec));}
\DoxyCodeLine{01707\ \ \ \ \ \ \ \ \ \}}
\DoxyCodeLine{01708\ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \textcolor{keywordflow}{if}\ (std::dynamic\_pointer\_cast<automatical>(strategy))\ \{}
\DoxyCodeLine{01709\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (\textcolor{keyword}{auto}\ exec\ =}
\DoxyCodeLine{01710\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ std::dynamic\_pointer\_cast<const\ HipExecutor>(executor))\ \{}
\DoxyCodeLine{01711\ \ \ \ \ \ \ \ \ \ \ \ \ result-\/>set\_strategy(std::make\_shared<automatical>(exec));}
\DoxyCodeLine{01712\ \ \ \ \ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \textcolor{keywordflow}{if}\ (\textcolor{keyword}{auto}\ exec\ =\ std::dynamic\_pointer\_cast<const\ CudaExecutor>(}
\DoxyCodeLine{01713\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ executor))\ \{}
\DoxyCodeLine{01714\ \ \ \ \ \ \ \ \ \ \ \ \ result-\/>set\_strategy(std::make\_shared<automatical>(exec));}
\DoxyCodeLine{01715\ \ \ \ \ \ \ \ \ \}}
\DoxyCodeLine{01716\ \ \ \ \ \}}
\DoxyCodeLine{01717\ \}}
\DoxyCodeLine{01718\ }
\DoxyCodeLine{01719\ }
\DoxyCodeLine{01720\ \}\ \ \textcolor{comment}{//\ namespace\ detail}}
\DoxyCodeLine{01721\ \}\ \ \textcolor{comment}{//\ namespace\ matrix}}
\DoxyCodeLine{01722\ \}\ \ \textcolor{comment}{//\ namespace\ gko}}
\DoxyCodeLine{01723\ }
\DoxyCodeLine{01724\ }
\DoxyCodeLine{01725\ \textcolor{preprocessor}{\#endif\ \ }\textcolor{comment}{//\ GKO\_PUBLIC\_CORE\_MATRIX\_CSR\_HPP\_}}

\end{DoxyCode}
