# QRFactorization

```#include <poplin/experimental/QRFactorization.hpp>
```

Decomposition of a matrix into an orthogonal matrix Q and upper triangular matrix R.

namespace poplin

Linear algebra functions.

Decomposition of a matrix into an lower triangular matrix L and upper triangular matrix U.

namespace experimental

Functions

std::array<poplar::Tensor, 2> createQRFactorizationMatrices(poplar::Graph &graph, const poplar::Type &type, const std::size_t m, const std::size_t n, const poplar::DebugContext &debugContext)

Create a tensor that is used as the output Q operand of QR factorization.

This will create matrices A and Q (2D tensors) in the graph. The number of matrix A rows must be greater or equal to the number of columns. Matrix Q is a square matrix. The ordering and tile mapping of the matrices will be set to make a QR factorization with these matrices as the input and output efficiency.

Parameters
• graph – The Poplar graph.

• type – The data type of the returned tensor.

• m – The number of rows of the input matrix A. This is also used to shape the square Q matrix.

• n – The number of columns of the input matrix A.

• debugContext – Debug information.

Returns

The matrices A and Q of type `type` and shape `dimensionA` and `dimensionQ` respectively. The matrices will be include a mapping to tiles.

void QRFactorization(poplar::Graph &graph, poplar::Tensor &A, poplar::Tensor &Q, poplar::program::Sequence &prog, const poplar::DebugContext &debugContext = {}, const poplar::OptionFlags &options = {})

Calculates the QR factorization for the given matrix.

This will compute the QR factorization for the input matrix A. The number of matrix A rows must be greater or equal to the number of columns. The output matrix R will overwrite matrix A. For matrix Q, the identity matrix should be passed.

Supported options:

• `rowsPerIteration`

A hint for the size of rows block to be calculated per iteration. The QRFactorization() function uses a hybrid approach, balancing the number of programs generated and the number of iterations performed by each program. A higher value of this parameter results in a shorter compilation time at the expense of performance.

The default value is 32.

Parameters
• graph – The Poplar graph.

• A – Tensor of floating-point type with shape [M, N].

• Q – Identity matrix of the same type with shape [M, M].

• prog – A reference to a program sequence which the code to perform the arrangement will be appended to.

• debugContext – Optional debug information.

• options – The implementation options of the triangular solver.