larger matrix sizes that must reside in global memory. Section \[sec:randomized\] details the implementation of the batched randomized SVD routine. We then discuss some details of the application to hierarchical matrix compression in Section \[sec:application\]. We conclude and discuss future work in Section \[sec:conclusion\].

Background {#sec:background}
==========

In this section we give a review of the most common algorithms used to compute the QR factorization and the SVD of a matrix as well as discuss some considerations when optimizing on the GPU.

QR Factorization
----------------

The QR factorization decomposes an $m \times n$ matrix $A$ into the product of an orthogonal $m \times m$ matrix $Q$ and an upper triangular $m \times n$ matrix $R$ [@golub2013matrix]. We can also compute a reduced form of the decomposition where Q is an $m \times n$ matrix and R is $n \times n$ upper triangular. The most common QR algorithm is based on transforming $A$ into an upper triangular matrix using a series of orthogonal transformations generated using Householder reflectors. Other algorithms such as the Gram-Schmidt or Modified Gram-Schmidt can produce the QR factorization by orthogonalizing a column with all previous columns; however, these methods are less stable than the Householder orthogonalization and 