All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
iterative_operations.hpp File Reference

Implementations of specialized kernels for fast iterative solvers using OpenMP on the CPU. More...

`#include <cmath>`
`#include <algorithm>`
`#include "viennacl/forwards.h"`
`#include "viennacl/scalar.hpp"`
`#include "viennacl/tools/tools.hpp"`
`#include "viennacl/meta/predicate.hpp"`
`#include "viennacl/meta/enable_if.hpp"`
`#include "viennacl/traits/size.hpp"`
`#include "viennacl/traits/start.hpp"`
`#include "viennacl/linalg/host_based/common.hpp"`
`#include "viennacl/linalg/detail/op_applier.hpp"`
`#include "viennacl/traits/stride.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::host_based
| Holds all compute kernels with conventional host-based execution (buffers in CPU RAM).
| viennacl::linalg::host_based::detail
| Helper functions for the host-based linear algebra backend.

## Macros

#define | VIENNACL_OPENMP_VECTOR_MIN_SIZE 5000

## Functions

template<typename NumericT >
void | viennacl::linalg::host_based::detail::pipelined_prod_impl (compressed_matrix< NumericT > const &A, vector_base< NumericT > const &p, vector_base< NumericT > &Ap, NumericT const *r0star, vector_base< NumericT > &inner_prod_buffer, vcl_size_t buffer_chunk_size, vcl_size_t buffer_chunk_offset)
| Implementation of a fused matrix-vector product with a compressed_matrix for an efficient pipelined CG algorithm. More...
template<typename NumericT >
void | viennacl::linalg::host_based::detail::pipelined_prod_impl (coordinate_matrix< NumericT > const &A, vector_base< NumericT > const &p, vector_base< NumericT > &Ap, NumericT const *r0star, vector_base< NumericT > &inner_prod_buffer, vcl_size_t buffer_chunk_size, vcl_size_t buffer_chunk_offset)
| Implementation of a fused matrix-vector product with a coordinate_matrix for an efficient pipelined CG algorithm. More...
template<typename NumericT >
void | viennacl::linalg::host_based::detail::pipelined_prod_impl (ell_matrix< NumericT > const &A, vector_base< NumericT > const &p, vector_base< NumericT > &Ap, NumericT const *r0star, vector_base< NumericT > &inner_prod_buffer, vcl_size_t buffer_chunk_size, vcl_size_t buffer_chunk_offset)
| Implementation of a fused matrix-vector product with an ell_matrix for an efficient pipelined CG algorithm. More...
template<typename NumericT , typename IndexT >
void | viennacl::linalg::host_based::detail::pipelined_prod_impl (sliced_ell_matrix< NumericT, IndexT > const &A, vector_base< NumericT > const &p, vector_base< NumericT > &Ap, NumericT const *r0star, vector_base< NumericT > &inner_prod_buffer, vcl_size_t buffer_chunk_size, vcl_size_t buffer_chunk_offset)
| Implementation of a fused matrix-vector product with an sliced_ell_matrix for an efficient pipelined CG algorithm. More...
template<typename NumericT >
void | viennacl::linalg::host_based::detail::pipelined_prod_impl (hyb_matrix< NumericT > const &A, vector_base< NumericT > const &p, vector_base< NumericT > &Ap, NumericT const *r0star, vector_base< NumericT > &inner_prod_buffer, vcl_size_t buffer_chunk_size, vcl_size_t buffer_chunk_offset)
| Implementation of a fused matrix-vector product with an hyb_matrix for an efficient pipelined CG algorithm. More...
template<typename NumericT >
void | viennacl::linalg::host_based::pipelined_cg_vector_update (vector_base< NumericT > &result, NumericT alpha, vector_base< NumericT > &p, vector_base< NumericT > &r, vector_base< NumericT > const &Ap, NumericT beta, vector_base< NumericT > &inner_prod_buffer)
| Performs a joint vector update operation needed for an efficient pipelined CG algorithm. More...
template<typename NumericT >
void | viennacl::linalg::host_based::pipelined_cg_prod (compressed_matrix< NumericT > const &A, vector_base< NumericT > const &p, vector_base< NumericT > &Ap, vector_base< NumericT > &inner_prod_buffer)
| Performs a fused matrix-vector product with a compressed_matrix for an efficient pipelined CG algorithm. More...
template<typename NumericT >
void | viennacl::linalg::host_based::pipelined_cg_prod (coordinate_matrix< NumericT > const &A, vector_base< NumericT > const &p, vector_base< NumericT > &Ap, vector_base< NumericT > &inner_prod_buffer)
| Performs a fused matrix-vector product with a coordinate_matrix for an efficient pipelined CG algorithm. More...
template<typename NumericT >
void | viennacl::linalg::host_based::pipelined_cg_prod (ell_matrix< NumericT > const &A, vector_base< NumericT > const &p, vector_base< NumericT > &Ap, vector_base< NumericT > &inner_prod_buffer)
| Performs a fused matrix-vector product with an ell_matrix for an efficient pipelined CG algorithm. More...
template<typename NumericT , typename IndexT >
void | viennacl::linalg::host_based::pipelined_cg_prod (sliced_ell_matrix< NumericT, IndexT > const &A, vector_base< NumericT > const &p, vector_base< NumericT > &Ap, vector_base< NumericT > &inner_prod_buffer)
| Performs a fused matrix-vector product with an sliced_ell_matrix for an efficient pipelined CG algorithm. More...
template<typename NumericT >
void | viennacl::linalg::host_based::pipelined_cg_prod (hyb_matrix< NumericT > const &A, vector_base< NumericT > const &p, vector_base< NumericT > &Ap, vector_base< NumericT > &inner_prod_buffer)
| Performs a fused matrix-vector product with an hyb_matrix for an efficient pipelined CG algorithm. More...
template<typename NumericT >
void | viennacl::linalg::host_based::pipelined_bicgstab_update_s (vector_base< NumericT > &s, vector_base< NumericT > &r, vector_base< NumericT > const &Ap, vector_base< NumericT > &inner_prod_buffer, vcl_size_t buffer_chunk_size, vcl_size_t buffer_chunk_offset)
| Performs a joint vector update operation needed for an efficient pipelined BiCGStab algorithm. More...
template<typename NumericT >

void

viennacl::linalg::host_based::pipelined_bicgstab_vector_update (vector_base< NumericT > &result, NumericT alpha, vector_base< NumericT > &p, NumericT omega, vector_base< NumericT > const &s, vector_base< NumericT > &residual, vector_base< NumericT > const &As, NumericT beta, vector_base< NumericT > const &Ap, vector_base< NumericT > const &r0star, vector_base< NumericT > &inner_prod_buffer, vcl_size_t buffer_chunk_size)

| Performs a joint vector update operation needed for an efficient pipelined BiCGStab algorithm. More...
template<typename NumericT >
void | viennacl::linalg::host_based::pipelined_bicgstab_prod (compressed_matrix< NumericT > const &A, vector_base< NumericT > const &p, vector_base< NumericT > &Ap, vector_base< NumericT > const &r0star, vector_base< NumericT > &inner_prod_buffer, vcl_size_t buffer_chunk_size, vcl_size_t buffer_chunk_offset)
| Performs a fused matrix-vector product with a compressed_matrix for an efficient pipelined BiCGStab algorithm. More...
template<typename NumericT >
void | viennacl::linalg::host_based::pipelined_bicgstab_prod (coordinate_matrix< NumericT > const &A, vector_base< NumericT > const &p, vector_base< NumericT > &Ap, vector_base< NumericT > const &r0star, vector_base< NumericT > &inner_prod_buffer, vcl_size_t buffer_chunk_size, vcl_size_t buffer_chunk_offset)
| Performs a fused matrix-vector product with a coordinate_matrix for an efficient pipelined BiCGStab algorithm. More...
template<typename NumericT >
void | viennacl::linalg::host_based::pipelined_bicgstab_prod (ell_matrix< NumericT > const &A, vector_base< NumericT > const &p, vector_base< NumericT > &Ap, vector_base< NumericT > const &r0star, vector_base< NumericT > &inner_prod_buffer, vcl_size_t buffer_chunk_size, vcl_size_t buffer_chunk_offset)
| Performs a fused matrix-vector product with an ell_matrix for an efficient pipelined BiCGStab algorithm. More...
template<typename NumericT , typename IndexT >
void | viennacl::linalg::host_based::pipelined_bicgstab_prod (sliced_ell_matrix< NumericT, IndexT > const &A, vector_base< NumericT > const &p, vector_base< NumericT > &Ap, vector_base< NumericT > const &r0star, vector_base< NumericT > &inner_prod_buffer, vcl_size_t buffer_chunk_size, vcl_size_t buffer_chunk_offset)
| Performs a fused matrix-vector product with a sliced_ell_matrix for an efficient pipelined BiCGStab algorithm. More...
template<typename NumericT >
void | viennacl::linalg::host_based::pipelined_bicgstab_prod (hyb_matrix< NumericT > const &A, vector_base< NumericT > const &p, vector_base< NumericT > &Ap, vector_base< NumericT > const &r0star, vector_base< NumericT > &inner_prod_buffer, vcl_size_t buffer_chunk_size, vcl_size_t buffer_chunk_offset)
| Performs a fused matrix-vector product with a hyb_matrix for an efficient pipelined BiCGStab algorithm. More...
template<typename T >
void | viennacl::linalg::host_based::pipelined_gmres_normalize_vk (vector_base< T > &v_k, vector_base< T > const &residual, vector_base< T > &R_buffer, vcl_size_t offset_in_R, vector_base< T > const &inner_prod_buffer, vector_base< T > &r_dot_vk_buffer, vcl_size_t buffer_chunk_size, vcl_size_t buffer_chunk_offset)
| Performs a vector normalization needed for an efficient pipelined GMRES algorithm. More...
template<typename T >
void | viennacl::linalg::host_based::pipelined_gmres_gram_schmidt_stage1 (vector_base< T > const &device_krylov_basis, vcl_size_t v_k_size, vcl_size_t v_k_internal_size, vcl_size_t k, vector_base< T > &vi_in_vk_buffer, vcl_size_t buffer_chunk_size)
| Computes first reduction stage for multiple inner products <v_i, v_k>, i=0..k-1. More...
template<typename T >
void | viennacl::linalg::host_based::pipelined_gmres_gram_schmidt_stage2 (vector_base< T > &device_krylov_basis, vcl_size_t v_k_size, vcl_size_t v_k_internal_size, vcl_size_t k, vector_base< T > const &vi_in_vk_buffer, vector_base< T > &R_buffer, vcl_size_t krylov_dim, vector_base< T > &inner_prod_buffer, vcl_size_t buffer_chunk_size)
| Computes the second reduction stage for multiple inner products <v_i, v_k>, i=0..k-1, then updates v_k -= <v_i, v_k> v_i and computes the first reduction stage for ||v_k||. More...
template<typename T >
void | viennacl::linalg::host_based::pipelined_gmres_update_result (vector_base< T > &result, vector_base< T > const &residual, vector_base< T > const &krylov_basis, vcl_size_t v_k_size, vcl_size_t v_k_internal_size, vector_base< T > const &coefficients, vcl_size_t k)
| Computes x += eta_0 r + sum_{i=1}^{k-1} eta_i v_{i-1}. More...
template<typename MatrixType , typename T >
void | viennacl::linalg::host_based::pipelined_gmres_prod (MatrixType const &A, vector_base< T > const &p, vector_base< T > &Ap, vector_base< T > &inner_prod_buffer)

## Detailed Description

Implementations of specialized kernels for fast iterative solvers using OpenMP on the CPU.

Definition in file iterative_operations.hpp.

## Macro Definition Documentation

#define VIENNACL_OPENMP_VECTOR_MIN_SIZE 5000

Definition at line 42 of file iterative_operations.hpp.