  The randomized singular value decomposition (RSVD) is by now a well
established technique for efficiently computing an approximate singular value
decomposition of a matrix. Building on the ideas that underpin the RSVD, the
recently proposed algorithm "randUTV" computes a FULL factorization of a given
matrix that provides low-rank approximations with near-optimal error. Because
the bulk of randUTV is cast in terms of communication-efficient operations like
matrix-matrix multiplication and unpivoted QR factorizations, it is faster than
competing rank-revealing factorization methods like column pivoted QR in most
high performance computational settings. In this article, optimized randUTV
implementations are presented for both shared memory and distributed memory
computing environments. For shared memory, randUTV is redesigned in terms of an
"algorithm-by-blocks" that, together with a runtime task scheduler, eliminates
bottlenecks from data synchronization points to achieve acceleration over the
standard "blocked algorithm", based on a purely fork-join approach. The
distributed memory implementation is based on the ScaLAPACK library. The
performances of our new codes compare favorably with competing factorizations
available on both shared memory and distributed memory architectures.
