void vsip_mcumsum_f( const vsip_mview_f *a, vsip_major major, const vsip_mview_f *r) { { vsip_vview_f *va,vaa; vsip_vview_f *vr,vrr; vsip_index i; vsip_length m = a->col_length; vsip_length n = a->row_length; va = &vaa; vr = &vrr; if(major == VSIP_ROW){ for(i=0; i<m; i++){ VI_mrowview_f(a,i,va); VI_mrowview_f(r,i,vr); VI_vcumsum_f(va,vr); } } else { /* must be VSIP_COL */ for(i=0; i<n; i++){ VI_mcolview_f(a,i,va); VI_mcolview_f(r,i,vr); VI_vcumsum_f(va,vr); } } } return; }
static void VI_solve_lt_f( vsip_mview_f *R, vsip_mview_f *B) { vsip_length N = R->row_length; vsip_mview_f XX = *B; vsip_mview_f *X = &XX; vsip_vview_f xx, rr; vsip_vview_f *x = VI_mrowview_f(X,(vsip_index)0,&xx); vsip_vview_f *r_d = VI_mrowview_f(R,(vsip_index) 0,&rr); vsip_vview_f rr_m = rr; vsip_vview_f *r_m = &rr_m; vsip_stride d_s = R->row_stride + R->col_stride; r_d->length = 1; r_m->length = 0; X->col_length = 1; vsip_svmul_f((vsip_scalar_f) 1.0/(VI_VGET_F(r_d,0)),x,x); N--; while(N-- >0){ r_d->offset += d_s; r_m->length++; r_m->offset += R->col_stride; x->offset += X->col_stride; VI_vsubvmprodIP_f(r_m,X,x); vsip_svmul_f((vsip_scalar_f) 1.0/(VI_VGET_F(r_d,0)),x,x); X->col_length++; } return; }
void vsip_mrandu_f( vsip_randstate *state, const vsip_mview_f *A) { vsip_index i; vsip_vview_f v; vsip_length M=A->col_length, N=A->row_length; vsip_stride CS=A->col_stride, RS=A->row_stride; if (CS < RS){ /* do by column */ for (i=0; i<N; i++){ VI_mcolview_f(A,i,&v); vrandu_f(state,&v); } } else { /* do by row */ for (i=0; i<M; i++){ VI_mrowview_f(A,i,&v); vrandu_f(state,&v); } } }