Implementation of a simultaneous QR factorization of multiple matrices. Experimental. More...
#include <utility>#include <iostream>#include <fstream>#include <string>#include <algorithm>#include <vector>#include <math.h>#include <cmath>#include <sstream>#include "viennacl/ocl/backend.hpp"#include "boost/numeric/ublas/vector.hpp"#include "boost/numeric/ublas/matrix.hpp"#include "boost/numeric/ublas/matrix_proxy.hpp"#include "boost/numeric/ublas/storage.hpp"#include "boost/numeric/ublas/io.hpp"#include "boost/numeric/ublas/matrix_expression.hpp"#include "boost/numeric/ublas/detail/matrix_assign.hpp"#include "viennacl/vector.hpp"#include "viennacl/matrix.hpp"#include "viennacl/linalg/detail/spai/block_matrix.hpp"#include "viennacl/linalg/detail/spai/block_vector.hpp"#include "viennacl/linalg/opencl/kernels/spai.hpp"Go to the source code of this file.
Namespaces | |
| viennacl | |
| Main namespace in ViennaCL. Holds all the basic types such as vector, matrix, etc. and defines operations upon them. | |
| viennacl::linalg | |
| Provides all linear algebra operations which are not covered by operator overloads. | |
| viennacl::linalg::detail | |
| Namespace holding implementation details for linear algebra routines. Usually not of interest for a library user. | |
| viennacl::linalg::detail::spai | |
| Implementation namespace for sparse approximate inverse preconditioner. | |
Functions | |
| template<typename T , typename InputIteratorT > | |
| void | viennacl::linalg::detail::spai::Print (std::ostream &ostr, InputIteratorT it_begin, InputIteratorT it_end) |
| template<typename VectorT , typename MatrixT > | |
| void | viennacl::linalg::detail::spai::write_to_block (VectorT &con_A_I_J, unsigned int start_ind, std::vector< unsigned int > const &I, std::vector< unsigned int > const &J, MatrixT &m) |
| template<typename VectorT > | |
| void | viennacl::linalg::detail::spai::print_continious_matrix (VectorT &con_A_I_J, std::vector< cl_uint > &blocks_ind, std::vector< std::vector< unsigned int > > const &g_I, std::vector< std::vector< unsigned int > > const &g_J) |
| template<typename VectorT > | |
| void | viennacl::linalg::detail::spai::print_continious_vector (VectorT &con_v, std::vector< cl_uint > &block_ind, std::vector< std::vector< unsigned int > > const &g_J) |
| void | viennacl::linalg::detail::spai::compute_blocks_size (std::vector< std::vector< unsigned int > > const &g_I, std::vector< std::vector< unsigned int > > const &g_J, unsigned int &sz, std::vector< cl_uint > &blocks_ind, std::vector< cl_uint > &matrix_dims) |
| **************************************** BLOCK FUNCTIONS ************************************// More... | |
| template<typename SizeT > | |
| void | viennacl::linalg::detail::spai::get_size (std::vector< std::vector< SizeT > > const &inds, SizeT &size) |
| Computes size of particular container of index set. More... | |
| template<typename SizeT > | |
| void | viennacl::linalg::detail::spai::init_start_inds (std::vector< std::vector< SizeT > > const &inds, std::vector< cl_uint > &start_inds) |
| Initializes start indices of particular index set. More... | |
| template<typename MatrixT , typename NumericT > | |
| void | viennacl::linalg::detail::spai::dot_prod (MatrixT const &A, unsigned int beg_ind, NumericT &res) |
| Dot prod of particular column of martix A with it's self starting at a certain index beg_ind. More... | |
| template<typename MatrixT , typename VectorT , typename NumericT > | |
| void | viennacl::linalg::detail::spai::custom_inner_prod (MatrixT const &A, VectorT const &v, unsigned int col_ind, unsigned int start_ind, NumericT &res) |
| Dot prod of particular matrix column with arbitrary vector: A(:, col_ind) More... | |
| template<typename MatrixT , typename VectorT > | |
| void | viennacl::linalg::detail::spai::copy_vector (MatrixT const &A, VectorT &v, unsigned int beg_ind) |
| Copying part of matrix column. More... | |
| template<typename MatrixT , typename VectorT , typename NumericT > | |
| void | viennacl::linalg::detail::spai::householder_vector (MatrixT const &A, unsigned int j, VectorT &v, NumericT &b) |
| Computation of Householder vector, householder reflection c.f. Gene H. Golub, Charles F. Van Loan "Matrix Computations" 3rd edition p.210. More... | |
| template<typename MatrixT , typename VectorT , typename NumericT > | |
| void | viennacl::linalg::detail::spai::apply_householder_reflection (MatrixT &A, unsigned int iter_cnt, VectorT &v, NumericT b) |
| Inplace application of Householder vector to a matrix A. More... | |
| template<typename MatrixT , typename VectorT > | |
| void | viennacl::linalg::detail::spai::store_householder_vector (MatrixT &A, unsigned int ind, VectorT &v) |
| Storage of vector v in column(A, ind), starting from ind-1 index of a column. More... | |
| template<typename MatrixT , typename VectorT > | |
| void | viennacl::linalg::detail::spai::single_qr (MatrixT &R, VectorT &b_v) |
| Inplace QR factorization via Householder reflections c.f. Gene H. Golub, Charles F. Van Loan "Matrix Computations" 3rd edition p.224. More... | |
| template<typename SizeT > | |
| void | viennacl::linalg::detail::spai::get_max_block_size (std::vector< std::vector< SizeT > > const &inds, SizeT &max_size) |
| Getting max size of rows/columns from container of index set. More... | |
| template<typename MatrixT , typename VectorT , typename NumericT > | |
| void | viennacl::linalg::detail::spai::custom_dot_prod (MatrixT const &A, VectorT const &v, unsigned int ind, NumericT &res) |
| Dot_prod(column(A, ind), v) starting from index ind+1. More... | |
| template<typename MatrixT , typename VectorT > | |
| void | viennacl::linalg::detail::spai::apply_q_trans_vec (MatrixT const &R, VectorT const &b_v, VectorT &y) |
| Recovery Q from matrix R and vector of betas b_v. More... | |
| template<typename MatrixT , typename VectorT > | |
| void | viennacl::linalg::detail::spai::apply_q_trans_mat (MatrixT const &R, VectorT const &b_v, MatrixT &A) |
| Multiplication of Q'*A, where Q is in implicit for lower part of R and vector of betas - b_v. More... | |
| template<typename NumericT > | |
| void | viennacl::linalg::detail::spai::block_qr (std::vector< std::vector< unsigned int > > &g_I, std::vector< std::vector< unsigned int > > &g_J, block_matrix &g_A_I_J_vcl, block_vector &g_bv_vcl, std::vector< cl_uint > &g_is_update, viennacl::context ctx) |
| Inplace QR factorization via Householder reflections c.f. Gene H. Golub, Charles F. Van Loan "Matrix Computations" 3rd edition p.224 performed on GPU. More... | |
Implementation of a simultaneous QR factorization of multiple matrices. Experimental.
SPAI code contributed by Nikolay Lukash
Definition in file qr.hpp.