5#include <src/math-helpers.hh>
16 auto [c_l, s_l, r] = internal::lartg(a, b);
18 return std::array<T, 2>{c_l, -s_l};
30 const std::array<T, 2>& givens,
32 const T c = givens[0];
33 const T s = givens[1];
35 const size_t n = d.
size();
36 const size_t ne = e.
size();
38 auto d_get = [&](
size_t k) -> T {
39 return QR ? d(k) : d(n - 1 - k);
41 auto d_set = [&](
size_t k, T val) {
48 auto e_get = [&](
size_t k) -> T {
49 return QR ? e(k) : e(ne - 1 - k);
51 auto e_set = [&](
size_t k, T val) {
62 T ej = (j < ne) ? e_get(j) : T(0);
64 T di_new = c * (c * di - ei * s) - s * (ei * c - s * dj);
65 T dj_new = c * (c * dj + ei * s) + s * (ei * c + s * di);
70 T e_im1 = e_get(i - 1);
71 e_set(i - 1, e_im1 * c - prev_bulge * s);
74 T ei_new = c * (c * ei + s * di) - s * (c * dj + s * ei);
86template <Backend B,
typename T>
105template <Backend B,
typename T>
131template <Backend B,
typename T>
Non-owning view of a batch of matrices: the argument type of every entry point.
Non-owning view of a batch of strided vectors: the vector argument type of the entry points.
int size() const
Entries per item.
JobType
Whether an eigensolver computes eigenvectors (LAPACK jobz).
std::array< T, 2 > givens_rotation(const T &a, const T &b)
T apply_givens_rotation(const VectorView< T > &d, const VectorView< T > &e, const T &prev_bulge, size_t i, size_t j, const std::array< T, 2 > &givens, bool QR)
Event steqr_legacy(Queue &ctx, const VectorView< T > &d_in, const VectorView< T > &e_in, const VectorView< T > &eigenvalues, const Span< std::byte > &ws, JobType jobz, SteqrParams< T > params, const MatrixView< T, MatrixFormat::Dense > &eigvects, Span< int32_t > info=Span< int32_t >())
Event steqr_wg(Queue &ctx, const VectorView< T > &d_in, const VectorView< T > &e_in, const VectorView< T > &eigenvalues, const Span< std::byte > &ws, JobType jobz, SteqrParams< T > params, const MatrixView< T, MatrixFormat::Dense > &eigvects, Span< int32_t > info=Span< int32_t >())
Event steqr_dispatch(Queue &ctx, const VectorView< T > &d_in, const VectorView< T > &e_in, const VectorView< T > &eigenvalues, const Span< std::byte > &ws, JobType jobz, SteqrParams< T > params, const MatrixView< T, MatrixFormat::Dense > &eigvects, Span< int32_t > info=Span< int32_t >())
size_t steqr_wg_buffer_size(Queue &ctx, const VectorView< T > &d, const VectorView< T > &e, const VectorView< T > &eigenvalues, JobType jobz, SteqrParams< T > params)
size_t steqr_legacy_buffer_size(Queue &ctx, const VectorView< T > &d, const VectorView< T > &e, const VectorView< T > &eigenvalues, JobType jobz, SteqrParams< T > params)
Completion handle of enqueued work, returned by every entry point.
Where BatchLAS work runs: a device, a backend, an ordered SYCL queue and a workspace arena.
Non-owning view of size() contiguous elements of type T.
Parameters for steqr() and steqr_cta(), and for stedc()'s leaf solves.