예제 #1
0
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;
}
예제 #2
0
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;
}
예제 #3
0
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);
       }
   }
}