rotmg#

Computes the parameters for a modified Givens rotation.

Description#

Given Cartesian coordinates (x1, y1) of an input vector, the rotmg routines compute the components of a modified Givens transformation matrix H that zeros the y-component of the resulting vector:

\[\begin{split}\left[ \begin{array}{ccc} x1 \\ 0 \end{array} \right] = H \left[ \begin{array}{ccc} x1 & \sqrt{d1} \\ y1 & \sqrt{d2} \end{array} \right]\end{split}\]

rotmg supports the following precisions:

T

float

double

rotmg (Buffer Version)#

Syntax#

namespace oneapi::mkl::blas::column_major {
    void rotmg(sycl::queue &queue,
               sycl::buffer<T,1> &d1,
               sycl::buffer<T,1> &d2,
               sycl::buffer<T,1> &x1,
               sycl::buffer<T,1>  y1,
               sycl::buffer<T,1> &param)
}
namespace oneapi::mkl::blas::row_major {
    void rotmg(sycl::queue &queue,
               sycl::buffer<T,1> &d1,
               sycl::buffer<T,1> &d2,
               sycl::buffer<T,1> &x1,
               sycl::buffer<T,1>  y1,
               sycl::buffer<T,1> &param)
}

Input Parameters#

queue

The queue where the routine should be executed.

d1

Buffer holding the scaling factor for x-coordinate of the input vector.

d2

Buffer holding the scaling factor for y-coordinate of the input vector.

x1

Buffer holding x-coordinate of the input vector.

y1

Scalar specifying y-coordinate of the input vector.

Output Parameters#

d1

Buffer holding the first diagonal element of the updated matrix.

d2

Buffer holding the second diagonal element of the updated matrix.

x1

Buffer holding x-coordinate of the rotated vector before scaling

param

Buffer holding an array of size 5.

The elements of the param array are:

param[0] contains a switch, flag. The other array elements param[1-4] contain the components of the array H: h11, h21, h12, and h22, respectively.

Depending on the values of flag, the components of H are set as follows:

flag = -1.0:

\[\begin{split}H = \left[ \begin{array}{ccc} h_{11} & h_{12} \\ h_{21} & h_{22} \end{array} \right]\end{split}\]

flag = 0.0:

\[\begin{split}H = \left[ \begin{array}{ccc} 1.0 & h_{12} \\ h_{21} & 1.0 \end{array} \right]\end{split}\]

flag = 1.0:

\[\begin{split}H = \left[ \begin{array}{ccc} h_{11} & 1.0 \\ -1.9 & h_{22} \end{array} \right]\end{split}\]

flag = -2.0:

\[\begin{split}H = \left[ \begin{array}{ccc} 1.0 & 0.0 \\ 0.0 & 1.0 \end{array} \right]\end{split}\]

In the last three cases, the matrix entries of 1.0, -1.0, and 0.0 are assumed based on the value of flag and are not required to be set in the param vector.

rotmg (USM Version)#

Syntax#

namespace oneapi::mkl::blas::column_major {
    sycl::event rotmg(sycl::queue &queue,
                      T *d1,
                      T *d2,
                      T *x1,
                      oneapi::mkl::value_or_pointer<T> y1,
                      T *param,
                      const std::vector<sycl::event> &dependencies = {})
}
namespace oneapi::mkl::blas::row_major {
    sycl::event rotmg(sycl::queue &queue,
                      T *d1,
                      T *d2,
                      T *x1,
                      oneapi::mkl::value_or_pointer<T> y1,
                      T *param,
                      const std::vector<sycl::event> &dependencies = {})
}

Input Parameters#

queue

The queue where the routine should be executed.

d1

Pointer to the scaling factor for x-coordinate of the input vector.

d2

Pointer to the scaling factor for y-coordinate of the input vector.

x1

Pointer to x-coordinate of the input vector.

y1

Scalar specifying y-coordinate of the input vector. See Scalar Arguments for more information on the value_or_pointer data type.

dependencies

List of events to wait for before starting computation, if any. If omitted, defaults to no dependencies.

Output Parameters#

d1

Pointer to the first diagonal element of the updated matrix.

d2

Pointer to the second diagonal element of the updated matrix.

x1

Pointer to x-coordinate of the rotated vector before scaling

param

Pointer to an array of size 5.

The elements of the param array are:

param[0] contains a switch, flag. The other array elements param[1-4] contain the components of the array H: h11, h21, h12, and h22, respectively.

Depending on the values of flag, the components of H are set as follows:

flag = -1.0:

\[\begin{split}H = \left[ \begin{array}{ccc} h_{11} & h_{12} \\ h_{21} & h_{22} \end{array} \right]\end{split}\]

flag = 0.0:

\[\begin{split}H = \left[ \begin{array}{ccc} 1.0 & h_{12} \\ h_{21} & 1.0 \end{array} \right]\end{split}\]

flag = 1.0:

\[\begin{split}H = \left[ \begin{array}{ccc} h_{11} & 1.0 \\ -1.0 & h_{22} \end{array} \right]\end{split}\]

flag = -2.0:

\[\begin{split}H = \left[ \begin{array}{ccc} 1.0 & 0.0 \\ 0.0 & 1.0 \end{array} \right]\end{split}\]

In the last three cases, the matrix entries of 1.0, -1.0, and 0.0 are assumed based on the value of flag and are not required to be set in the param vector.

Return Values#

Output event to wait on to ensure computation is complete.