I can't find a single solid explanation of how to implement this -- whitepapers too detailed/confusing. Closest I came to an answer was this:
http://www.hep.ucl.ac.uk/~bino/libbpm/doc/pro/html/gsl__linalg_8c-source.html
see:
[1] gsl_linalg_bidiag_decomp
[2] gsl_linalg_SV_decomp (which calls [1])
Which perform it, but really, really obfusticate the process underneath.