1 #ifndef VIENNACL_LINALG_CUDA_BISECT_KERNEL_CALLS_HPP_
2 #define VIENNACL_LINALG_CUDA_BISECT_KERNEL_CALLS_HPP_
44 template<
typename NumericT>
46 const unsigned int mat_size,
55 bisectKernelSmall<<< blocks, threads >>>(
70 template<
typename NumericT>
72 const unsigned int mat_size,
79 bisectKernelLarge<<< blocks, threads >>>
83 lg, ug,
static_cast<unsigned int>(0), mat_size, precision,
102 template<
typename NumericT>
104 const unsigned int mat_size,
108 unsigned int num_one_intervals = result.
g_num_one;
112 grid_onei.x = num_blocks;
113 grid_onei.y = 1, grid_onei.z = 1;
117 bisectKernelLarge_OneIntervals<<< grid_onei , threads_onei >>>
120 mat_size, num_one_intervals,
132 template<
typename NumericT>
134 const unsigned int mat_size,
143 dim3 grid_mult(num_blocks_mult, 1, 1);
146 bisectKernelLarge_MultIntervals<<< grid_mult, threads_mult >>>
void bisectLarge(const viennacl::linalg::detail::InputData< NumericT > &input, viennacl::linalg::detail::ResultDataLarge< NumericT > &result, const unsigned int mat_size, const NumericT lg, const NumericT ug, const NumericT precision)
viennacl::vector< NumericT > g_left_mult
left interval limits of intervals containing multiple eigenvalues after the first iteration step ...
#define VIENNACL_BISECT_MAX_THREADS_BLOCK
Helper structures to simplify variable handling.
Determine eigenvalues for small symmetric, tridiagonal matrix.
viennacl::vector< NumericT > g_left_one
left interval limits of intervals containing one eigenvalue after the first iteration step ...
viennacl::scalar< unsigned int > g_num_blocks_mult
number of (thread) blocks of intervals containing multiple eigenvalues after the first steo ...
viennacl::vector< unsigned int > g_blocks_mult
start addresses in g_left_mult etc. of blocks of intervals containing more than one eigenvalue after ...
viennacl::vector< unsigned int > g_left_count_mult
number of eigenvalues less than the left limit of the eigenvalue intervals containing multiple eigenv...
viennacl::vector< unsigned int > g_right_count_mult
number of eigenvalues less than the right limit of the eigenvalue intervals containing multiple eigen...
unsigned int getNumBlocksLinear(const unsigned int num_threads, const unsigned int num_threads_block)
viennacl::vector< NumericT > vcl_g_right
right interval limits at the end of the computation
viennacl::vector< NumericT > g_lambda_mult
eigenvalues that have been generated in the second step from intervals that still contained multiple ...
viennacl::vector< NumericT > vcl_g_left
left interval limits at the end of the computation
viennacl::vector< unsigned int > vcl_g_left_count
number of eigenvalues smaller than the left interval limit
viennacl::vector< unsigned int > g_pos_one
interval indices (position in sorted listed of eigenvalues) of intervals containing one eigenvalue af...
#define VIENNACL_BISECT_MAX_THREADS_BLOCK_SMALL_MATRIX
First step of the bisection algorithm for the computation of eigenvalues.
Determine eigenvalues for large matrices for intervals that contained after the first step one eigenv...
viennacl::vector< NumericT > g_right_one
right interval limits of intervals containing one eigenvalue after the first iteration step ...
viennacl::vector< unsigned int > g_pos_mult
eigenvalue index of intervals that have been generated in the second processing step ...
void bisectLarge_OneIntervals(const viennacl::linalg::detail::InputData< NumericT > &input, viennacl::linalg::detail::ResultDataLarge< NumericT > &result, const unsigned int mat_size, const NumericT precision)
viennacl::vector< unsigned int > vcl_g_right_count
number of eigenvalues bigger than the right interval limit
In this class the data of the result for large matrices is stored.
void bisectSmall(const viennacl::linalg::detail::InputData< NumericT > &input, viennacl::linalg::detail::ResultDataSmall< NumericT > &result, const unsigned int mat_size, const NumericT lg, const NumericT ug, const NumericT precision)
viennacl::vector< unsigned int > g_blocks_mult_sum
accumulated number of intervals in g_left_mult etc. of blocks of intervals containing more than one e...
viennacl::scalar< unsigned int > g_num_one
number of intervals containing one eigenvalue after the first step
#define VIENNACL_CUDA_LAST_ERROR_CHECK(message)
NumericT * cuda_arg(scalar< NumericT > &obj)
Convenience helper function for extracting the CUDA handle from a ViennaCL scalar. Non-const version.
void bisectLarge_MultIntervals(const viennacl::linalg::detail::InputData< NumericT > &input, viennacl::linalg::detail::ResultDataLarge< NumericT > &result, const unsigned int mat_size, const NumericT precision)
In this class the data of the result for small matrices is stored.
Second step of the bisection algorithm for the computation of eigenvalues for large matrices...
viennacl::vector< NumericT > g_right_mult
right interval limits of intervals containing multiple eigenvalues after the first iteration step ...