triangular factor R and reflectors V which are used to update the trailing sub-matrix M.[]{data-label="fig:qr_fig"}](qr_fig.pdf){width="65.00000%"}

Performance
-----------

Figures \[fig:batch\_qr\] and \[fig:batch\_qr\_rect\] show the performance of our batched QR for 1000 square and rectangular matrices with a panel width of $16$, tuned for the P100 GPU. We compare against the vendor implementation in CUBLAS as well as the high performance library MAGMA. We can see that our proposed version performs well for rectangular matrices with column size of 32 and starts losing ground against MAGMA for the larger square matrix sizes where the blocked algorithm starts to show its performance benefits. A nested implementation where our kernel can be used to factor relatively large panels in a blocked algorithm will likely show some additional performance improvements for the large square matrices, but we leave that as future work.

[0.45]{} ![Comparing batched QR kernels for 1000 matrices of varying size on a P100 GPU in single and double precision.](qr_perf_1.pdf "fig:")

[0.45]{} ![Comparing batched QR kernels for 1000 matrices of varying size on a P100 GPU in single and double precision.](qr_perf_2.pdf "fig:")

Register Memory One-Sided Jacobi {#sec:registers}
================================

In this section we will discuss the first batched SVD kernel where the matrix data 