Example #1
0
File: gesvd.hpp Project: psiha/nt2
    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;
    }
Example #2
0
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 );
}
Example #3
0
     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;
     }