BOOST_FORCEINLINE result_type operator()( A0& a0, A1& s, A2& u,A3 &vt, A4 const jobu , A5 const jobvt) const { result_type that; details::workspace<typename A0::value_type> w; nt2_la_int m = nt2::height(a0); nt2_la_int n = nt2::width(a0); nt2_la_int ld = a0.leading_size(); nt2_la_int ldu = u.leading_size() > 1 ? u.leading_size() : 1 ; nt2_la_int ldvt= vt.leading_size() > 1 ? vt.leading_size() : 1 ; nt2_la_int lwork_query = -1; char c = std::toupper(jobu); magma_vec_t magma_jobu = c == 'A' ? MagmaAllVec : c == 'S' ? MagmaSomeVec : c == 'O' ? MagmaOverwriteVec : c == 'N' ? MagmaNoVec : (magma_vec_t)0; c = std::toupper(jobvt); magma_vec_t magma_jobvt = c == 'A' ? MagmaAllVec : c == 'S' ? MagmaSomeVec : c == 'O' ? MagmaOverwriteVec : c == 'N' ? MagmaNoVec : (magma_vec_t)0; magma_sgesvd(magma_jobu,magma_jobvt,m, n, 0, ld, 0, 0, ldu , 0, ldvt, w.main() , lwork_query, &that ); w.prepare_main(); nt2::gesvd(a0,s,u,vt,jobu,jobvt,w); return that; }
void magmaf_sgesvd( char *jobu, char *jobvt, magma_int_t *m, magma_int_t *n, float *a, magma_int_t *lda, float *s, float *u, magma_int_t *ldu, float *vt, magma_int_t *ldvt, float *work, magma_int_t *lwork, magma_int_t *info, magma_queue_t *queue ) { magma_sgesvd( *jobu, *jobvt, *m, *n, a, *lda, s, u, *ldu, vt, *ldvt, work, *lwork, info, *queue ); }
BOOST_FORCEINLINE result_type operator()( A0& a0, A1& s) const { result_type that; details::workspace<typename A0::value_type> w; nt2_la_int m = nt2::height(a0); nt2_la_int n = nt2::width(a0); nt2_la_int ld = a0.leading_size(); nt2_la_int ldu = 1; nt2_la_int ldvt= 1; nt2_la_int lwork_query = -1; magma_vec_t magma_jobu = MagmaNoVec ; magma_sgesvd(magma_jobu,magma_jobu,m, n, 0, ld, 0, 0, ldu , 0, ldvt, w.main() , lwork_query, &that ); w.prepare_main(); nt2::gesvd_w(a0,s,w); return that; }