static vsip_vview_f *vsv_f(vsip_vview_f *v, vsip_vview_f *vs, vsip_index i) { vsip_vattr_f attr; vsip_vgetattrib_f(v,&attr); attr.offset += i * attr.stride; attr.length -= i; vsip_vputattrib_f(vs,&attr); return vs; }
void VU_mprodqt_f( vsip_mview_f *C, vsip_mview_f *H, vsip_scalar_f *beta) { vsip_mattr_f attr_C,attr_C0; vsip_mattr_f attr_H0; vsip_vattr_f attr_h,attr_v0; vsip_vview_f *h = vsip_mcolview_f(H,0); vsip_length m,n; vsip_length j; vsip_stride k; vsip_vview_f *v, *w; vsip_mgetattrib_f(C,&attr_C); vsip_vgetattrib_f(h,&attr_h); vsip_mgetattrib_f(H,&attr_H0); attr_C0 = attr_C; m = attr_C.col_length; n = attr_C.row_length; v = vsip_vcreate_f(n,0); vsip_vgetattrib_f(v,&attr_v0); w = vsip_vcreate_f(m,0); vsip_vfill_f(0,v); for(k= attr_H0.row_length - 1; k >= 0; k--){ j = (vsip_length)k; attr_h.offset = j * attr_H0.row_stride + j * attr_H0.col_stride + attr_H0.offset; attr_h.length = attr_H0.col_length - j; vsip_vputlength_f(v,attr_h.length); vsip_vputoffset_f(v,n - attr_h.length); vsip_vputattrib_f(h,&attr_h); vsip_vcopy_f_f(h,v); vsip_vput_f(v,0,1); vsip_vputattrib_f(v,&attr_v0); VU_smvprod_f(-beta[j],C,v,w); VU_opu_f(C,w,v); } printf("here 2\n"); vsip_mputattrib_f(C,&attr_C0); vsip_vdestroy_f(h); vsip_valldestroy_f(v); vsip_valldestroy_f(w); return; }
void VU_qtprodm_f( vsip_mview_f *C, vsip_mview_f *H, vsip_scalar_f *beta) { vsip_mattr_f attr_C,attr_C0; vsip_mattr_f attr_H0; vsip_vattr_f attr_h,attr_v0; vsip_vview_f *h = vsip_mcolview_f(H,0); vsip_length m,n; vsip_length j; vsip_stride k; vsip_vview_f *v, *w; vsip_mgetattrib_f(C,&attr_C); vsip_vgetattrib_f(h,&attr_h); vsip_mgetattrib_f(H,&attr_H0); attr_C0 = attr_C; m = attr_C.col_length; n = attr_C.row_length; v = vsip_vcreate_f(m,0); vsip_vgetattrib_f(v,&attr_v0); w = vsip_vcreate_f(n,0); for(k= 0; k < attr_H0.row_length; k++){ j = (vsip_length)k; attr_h.offset = j * attr_H0.row_stride + j * attr_H0.col_stride + attr_H0.offset; attr_h.length = attr_H0.col_length -j; vsip_vputlength_f(v,attr_h.length); vsip_vputoffset_f(v,m - attr_h.length); vsip_vputattrib_f(h,&attr_h); vsip_vcopy_f_f(h,v); vsip_vput_f(v,0,1); vsip_vputattrib_f(v,&attr_v0); VU_svmprod_f(-beta[j],v,C,w); VU_opu_f(C,v,w); vsip_vput_f(v,k,0); } vsip_mputattrib_f(C,&attr_C0); vsip_vdestroy_f(h); vsip_valldestroy_f(v); vsip_valldestroy_f(w); return; }
static vsip_vview_f *row_sv_f(vsip_mview_f*Am,vsip_vview_f* vv,vsip_index row) { vsip_mattr_f A; vsip_vattr_f v; vsip_mgetattrib_f(Am,&A); v.offset = A.offset + row * A.col_stride; v.stride = A.row_stride; v.length = A.row_length; vsip_vputattrib_f(vv,&v); return vv; }
static vsip_vview_f *ivsv_f( vsip_vview_f *v, vsip_vview_f *vs, vsip_index i,vsip_index j) { vsip_vattr_f attr; vsip_vgetattrib_f(v,&attr); if(j==0) j=attr.length; attr.offset += i * attr.stride; attr.length = j-i; vsip_vputattrib_f(vs,&attr); return vs; } /* same */
static vsip_vview_f *diag_sv_f(vsip_mview_f* Am,vsip_vview_f* a, vsip_stride i) { vsip_mattr_f A; vsip_vattr_f v; vsip_mgetattrib_f(Am,&A); vsip_vgetattrib_f(a,&v); v.stride=A.row_stride + A.col_stride; if(i==0){ v.length = A.row_length; v.offset = A.offset; } else if (i == 1){ v.offset = A.offset + A.row_stride; v.length = A.row_length - 1; } else { printf("Failed in diag_sv_f\n"); exit(0); } vsip_vputattrib_f(a,&v); return a; }