StatMech
Loading...
Searching...
No Matches
MatrixUtils::EigenSolver< ObjectOnGPU< Eigen::Matrix< _Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols > > > Class Template Reference
Collaboration diagram for MatrixUtils::EigenSolver< ObjectOnGPU< Eigen::Matrix< _Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols > > >:
Collaboration graph

Public Types

using Scalar = _Scalar
 
using RealScalar = typename Eigen::NumTraits< _Scalar >::Real
 

Public Member Functions

 EigenSolver ()=delete
 
 EigenSolver (EigenSolver const &)=delete
 
 EigenSolver (EigenSolver &&)=delete
 
 EigenSolver (int dim)
 
 EigenSolver (MatrixOnGPU_t const &mat, Eigen::DecompositionOptions option=Eigen::ComputeEigenvectors)=delete
 
 EigenSolver (MatrixOnGPU_t &&mat, Eigen::DecompositionOptions option=Eigen::ComputeEigenvectors)
 
EigenSolvercompute ()
 
EigenSolversetOpt (magma_vec_t option)
 
Eigen::VectorX< RealScalar > const & eigenvalues ()
 
MatrixOnGPU_t const & eigenvectors ()
 
MatrixOnGPU_tinMatrix ()
 

Private Types

using MatrixOnGPU_t = ObjectOnGPU< Eigen::Matrix< _Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols > >
 

Private Attributes

Eigen::VectorX< RealScalarm_hEigVals
 
MatrixOnGPU_t m_dEigVecs
 
bool m_isDiagonalized = false
 
magma_int_t m_info = -1
 
magma_vec_t m_option = MagmaVec
 
magma_uplo_t m_uplo = MagmaLower
 

Member Typedef Documentation

◆ MatrixOnGPU_t

template<typename _Scalar , int _Rows, int _Cols, int _Options, int _MaxRows, int _MaxCols>
using MatrixUtils::EigenSolver< ObjectOnGPU< Eigen::Matrix< _Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols > > >::MatrixOnGPU_t = ObjectOnGPU< Eigen::Matrix<_Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols> >
private

◆ RealScalar

template<typename _Scalar , int _Rows, int _Cols, int _Options, int _MaxRows, int _MaxCols>
using MatrixUtils::EigenSolver< ObjectOnGPU< Eigen::Matrix< _Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols > > >::RealScalar = typename Eigen::NumTraits<_Scalar>::Real

◆ Scalar

template<typename _Scalar , int _Rows, int _Cols, int _Options, int _MaxRows, int _MaxCols>
using MatrixUtils::EigenSolver< ObjectOnGPU< Eigen::Matrix< _Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols > > >::Scalar = _Scalar

Constructor & Destructor Documentation

◆ EigenSolver() [1/6]

template<typename _Scalar , int _Rows, int _Cols, int _Options, int _MaxRows, int _MaxCols>
MatrixUtils::EigenSolver< ObjectOnGPU< Eigen::Matrix< _Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols > > >::EigenSolver ( )
delete

◆ EigenSolver() [2/6]

template<typename _Scalar , int _Rows, int _Cols, int _Options, int _MaxRows, int _MaxCols>
MatrixUtils::EigenSolver< ObjectOnGPU< Eigen::Matrix< _Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols > > >::EigenSolver ( EigenSolver< ObjectOnGPU< Eigen::Matrix< _Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols > > > const &  )
delete

◆ EigenSolver() [3/6]

template<typename _Scalar , int _Rows, int _Cols, int _Options, int _MaxRows, int _MaxCols>
MatrixUtils::EigenSolver< ObjectOnGPU< Eigen::Matrix< _Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols > > >::EigenSolver ( EigenSolver< ObjectOnGPU< Eigen::Matrix< _Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols > > > &&  )
delete

◆ EigenSolver() [4/6]

template<typename _Scalar , int _Rows, int _Cols, int _Options, int _MaxRows, int _MaxCols>
MatrixUtils::EigenSolver< ObjectOnGPU< Eigen::Matrix< _Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols > > >::EigenSolver ( int  dim)
inline

◆ EigenSolver() [5/6]

template<typename _Scalar , int _Rows, int _Cols, int _Options, int _MaxRows, int _MaxCols>
MatrixUtils::EigenSolver< ObjectOnGPU< Eigen::Matrix< _Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols > > >::EigenSolver ( MatrixOnGPU_t const &  mat,
Eigen::DecompositionOptions  option = Eigen::ComputeEigenvectors 
)
delete

◆ EigenSolver() [6/6]

template<typename _Scalar , int _Rows, int _Cols, int _Options, int _MaxRows, int _MaxCols>
MatrixUtils::EigenSolver< ObjectOnGPU< Eigen::Matrix< _Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols > > >::EigenSolver ( MatrixOnGPU_t &&  mat,
Eigen::DecompositionOptions  option = Eigen::ComputeEigenvectors 
)
inline
810 : m_dEigVecs{std::move(mat)}, m_hEigVals(mat.rows()) {
811 if(option == Eigen::EigenvaluesOnly) m_option = MagmaNoVec;
812 this->compute();
813 }

Member Function Documentation

◆ compute()

template<typename _Scalar , int _Rows, int _Cols, int _Options, int _MaxRows, int _MaxCols>
EigenSolver & MatrixUtils::EigenSolver< ObjectOnGPU< Eigen::Matrix< _Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols > > >::compute ( )
inline
815 {
816 m_hEigVals.resize(m_dEigVecs.rows());
817 debug_print("EigenSolver(GPU)" << __func__
818 << ": m_dEigVecs.rows()=" << m_dEigVecs.rows()
819 << ", m_dEigVecs.cols()=" << m_dEigVecs.cols()
820 << ", m_dEigVecs.LD()=" << m_dEigVecs.LD());
821 Eigen::MatrixX<Scalar> wA(m_dEigVecs.LD(), m_dEigVecs.rows());
822 std::vector<Scalar> work(1);
823 std::vector<RealScalar> rwork(1);
824 std::vector<magma_int_t> iwork(1);
825
826 // Query about the sizes of workspaces.
827 m_info = magma_heevd_gpu_wrapper(
829 m_hEigVals.data(), wA.data(), wA.rows(), work.data(), -1, rwork.data(), -1,
830 iwork.data(), -1, &m_info);
831 work.resize(static_cast<magma_int_t>(real(work[0])));
832 rwork.resize(static_cast<magma_int_t>(rwork[0]));
833 iwork.resize(iwork[0]);
834
835 // Calculate eigenvalues and eigenvectors.
836 m_info = magma_heevd_gpu_wrapper(
838 m_hEigVals.data(), wA.data(), wA.rows(), work.data(), work.size(), rwork.data(),
839 rwork.size(), iwork.data(), iwork.size(), &m_info);
840 m_isDiagonalized = true;
841 return *this;
842 }
__host__ Scalar * data() const
Definition MatrixUtils.cuh:200
debug_print("# Determining GPU configuration.")

◆ eigenvalues()

template<typename _Scalar , int _Rows, int _Cols, int _Options, int _MaxRows, int _MaxCols>
Eigen::VectorX< RealScalar > const & MatrixUtils::EigenSolver< ObjectOnGPU< Eigen::Matrix< _Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols > > >::eigenvalues ( )
inline
849{ return m_hEigVals; }

◆ eigenvectors()

template<typename _Scalar , int _Rows, int _Cols, int _Options, int _MaxRows, int _MaxCols>
MatrixOnGPU_t const & MatrixUtils::EigenSolver< ObjectOnGPU< Eigen::Matrix< _Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols > > >::eigenvectors ( )
inline
850{ return m_dEigVecs; }

◆ inMatrix()

template<typename _Scalar , int _Rows, int _Cols, int _Options, int _MaxRows, int _MaxCols>
MatrixOnGPU_t & MatrixUtils::EigenSolver< ObjectOnGPU< Eigen::Matrix< _Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols > > >::inMatrix ( )
inline
851{ return m_dEigVecs; }

◆ setOpt()

template<typename _Scalar , int _Rows, int _Cols, int _Options, int _MaxRows, int _MaxCols>
EigenSolver & MatrixUtils::EigenSolver< ObjectOnGPU< Eigen::Matrix< _Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols > > >::setOpt ( magma_vec_t  option)
inline
844 {
845 m_option = option;
846 return *this;
847 }

Member Data Documentation

◆ m_dEigVecs

template<typename _Scalar , int _Rows, int _Cols, int _Options, int _MaxRows, int _MaxCols>
MatrixOnGPU_t MatrixUtils::EigenSolver< ObjectOnGPU< Eigen::Matrix< _Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols > > >::m_dEigVecs
private

◆ m_hEigVals

template<typename _Scalar , int _Rows, int _Cols, int _Options, int _MaxRows, int _MaxCols>
Eigen::VectorX<RealScalar> MatrixUtils::EigenSolver< ObjectOnGPU< Eigen::Matrix< _Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols > > >::m_hEigVals
private

◆ m_info

template<typename _Scalar , int _Rows, int _Cols, int _Options, int _MaxRows, int _MaxCols>
magma_int_t MatrixUtils::EigenSolver< ObjectOnGPU< Eigen::Matrix< _Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols > > >::m_info = -1
private

◆ m_isDiagonalized

template<typename _Scalar , int _Rows, int _Cols, int _Options, int _MaxRows, int _MaxCols>
bool MatrixUtils::EigenSolver< ObjectOnGPU< Eigen::Matrix< _Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols > > >::m_isDiagonalized = false
private

◆ m_option

template<typename _Scalar , int _Rows, int _Cols, int _Options, int _MaxRows, int _MaxCols>
magma_vec_t MatrixUtils::EigenSolver< ObjectOnGPU< Eigen::Matrix< _Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols > > >::m_option = MagmaVec
private

◆ m_uplo

template<typename _Scalar , int _Rows, int _Cols, int _Options, int _MaxRows, int _MaxCols>
magma_uplo_t MatrixUtils::EigenSolver< ObjectOnGPU< Eigen::Matrix< _Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols > > >::m_uplo = MagmaLower
private

The documentation for this class was generated from the following file: