示例#1
0
int main(int argc, char** argv){
    int retval = 0;
    int i, Navg;
    param_obj param;
    kw_obj kw;
    ts_obj ts;
    vsip_mview_f *dtaIn, *gramOut;
    if(retval += param_read(argv[1],&param)){
        printf("Failed to read parameter file\n");
        exit(-1);
    }
    param_log(&param);
    kw_init(&kw, &param);
    ts_init(&ts, &param);
    /* simulate time series and beamform */
    Navg = (int) param.Navg;
    dtaIn = ts_instance(&ts);
    gramOut = kw_instance(&kw);
    kw_zero(&kw);
    for(i=0; i<Navg; i++){
        ts_zero(&ts);
        ts_sim_noise(&ts);
        ts_sim_nb(&ts);
        komega(&kw,dtaIn);
    }
    /* beamform done. Gram should be in gramOut */
    /*************/    
    /* Massage gram data and save to file for plotting */
      for(i=0; i<vsip_mgetrowlength_f(gramOut); i++)
      {/* move zero to middle */
         vsip_vview_f *v = vsip_mcolview_f(gramOut, i);
         vsip_vfreqswap_f(v);
         vsip_vdestroy_f(v);
      }
      {/* massage the data for plot*/
         vsip_scalar_f max = vsip_mmaxval_f(gramOut, NULL),min;
         vsip_scalar_f avg = vsip_mmeanval_f(gramOut);
         vsip_mclip_f(gramOut,0.0, max, avg/100000.0, max, gramOut);
         vsip_mlog10_f(gramOut,gramOut);
         min = -vsip_mminval_f(gramOut, NULL);
         vsip_smadd_f(min, gramOut, gramOut);
         max = vsip_mmaxval_f(gramOut, NULL);
         vsip_smmul_f(1.0/max, gramOut, gramOut);
      }
      { /* output data and plot with octave */
         FILE *fptr = fopen("gramOut","w");
         size_t size = vsip_mgetrowlength_f(gramOut) * vsip_mgetcollength_f(gramOut);
         vsip_scalar_f *out = (vsip_scalar_f*)malloc(size * sizeof(vsip_scalar_f));
         vsip_mcopyto_user_f(gramOut, VSIP_COL, out);
         fwrite(out,size,sizeof(vsip_scalar_f),fptr);
         fclose(fptr);
         free(out);
      }
    /* cleanup */
    kw_fin(&kw);
    ts_fin(&ts);
    param_free(&param);
    return retval;
}
void (vsip_gemp_f)(vsip_scalar_f alpha,
                   const vsip_mview_f *AA,
                   vsip_mat_op OpA,
                   const vsip_mview_f *BB,
                   vsip_mat_op OpB,
                   vsip_scalar_f beta,
                   const vsip_mview_f *r){
   register vsip_scalar_f a1 = alpha;
   register vsip_scalar_f b1 = beta;
   vsip_mview_f At = *AA,
                Bt = *BB;
   vsip_mview_f *a = &At,
                *b = &Bt;
   if(OpA == VSIP_MAT_TRANS){
        a->row_length = AA->col_length;
        a->col_length = AA->row_length;
        a->row_stride = AA->col_stride;
        a->col_stride = AA->row_stride;
   }
   if(OpB == VSIP_MAT_TRANS){
        b->row_length = BB->col_length;
        b->col_length = BB->row_length;
        b->row_stride = BB->col_stride;
        b->col_stride = BB->row_stride;
   }
   {
       /* c => column major, r => row major */
       /* decide if ccc => 0 ccr=> 1, crc => 2, etc to rrr => 7 */
       unsigned method = (unsigned)(r->row_stride <= r->col_stride) + 
                         (unsigned)(b->row_stride <= b->col_stride) * 2 +
                         (unsigned)(a->row_stride <= a->col_stride) * 4;
       vsip_stride a_st_r = a->row_stride * a->block->rstride,
                  a_st_c = a->col_stride * a->block->rstride,
                  b_st_r = b->row_stride * b->block->rstride,
                  b_st_c = b->col_stride * b->block->rstride,
                  r_st_r = r->row_stride * r->block->rstride,
                  r_st_c = r->col_stride * r->block->rstride;
       vsip_length a_c_l  = a->col_length;  /* i_size */
       vsip_length r_r_l  = r->row_length;  /* j_size */
       vsip_length a_r_l  = a->row_length;  /* k_size */
       register vsip_scalar_f a_scalar, b_scalar, temp;
       vsip_scalar_f *ap = (a->block->array) + a->offset * a->block->rstride,
                     *bp = (b->block->array) + b->offset * b->block->rstride,
                     *rp = (r->block->array) + r->offset * r->block->rstride;
       vsip_scalar_f *ap0 = ap,
                     *bp0 = bp,
                     *rp0 = rp;
       vsip_scalar_f *bp1 = bp;
       switch(method){
          case 0 : { /* ccc */
              vsip_scalar_f *ap_ik = ap0, *ap_0k = ap0;
              vsip_scalar_f *bp_kj = bp0, *bp_0j = bp0; 
              vsip_scalar_f *rp_ij = rp0, *rp_0j = rp0;
              if(b1 != 1.0) vsip_smmul_f(b1,r,r);
              while(r_r_l-- > 0){ /* j */
                 rp_ij = rp_0j;
                 bp_kj = bp_0j;
                 while(a_r_l-- > 0){ /* k */
                    b_scalar = a1 * *bp_kj;
                    bp_kj += b_st_c;
                    ap_ik = ap_0k;
                    while(a_c_l-- > 0){ /* i */
                       *rp_ij =  *ap_ik * b_scalar + *rp_ij;
                        rp_ij += r_st_c;
                        ap_ik += a_st_c;
                    } a_c_l = a->col_length;
                    ap_0k += a_st_r;
                    rp_ij = rp_0j;
                 } a_r_l = a->row_length;
                 rp_0j += r_st_r;
                 bp_0j += b_st_r;
                 ap_0k = ap0;
              }
          } break;
          case 1 : { /* ccr */
              vsip_scalar_f *ap_ik = ap0, *ap_i0 = ap0;
              vsip_scalar_f *bp_kj = bp0, *bp_0j = bp0; 
              vsip_scalar_f *rp_ij = rp0, *rp_i0 = rp0;
              while(a_c_l-- > 0){ /* i */
                 rp_ij = rp_i0;
                 bp_0j = bp0;
                 while(r_r_l-- > 0){ /* j */
                    ap_ik = ap_i0;
                    temp = 0;
                    bp_kj = bp_0j;
                    while(a_r_l-- > 0){ /* k */
                       temp += *ap_ik * *bp_kj;
                       ap_ik += a_st_r;
                       bp_kj += b_st_c;
                    } a_r_l = a->row_length;
                    *rp_ij = b1 * *rp_ij + a1 * temp;
                     rp_ij += r_st_r;
                     bp_0j += b_st_r;
                 } r_r_l = r->row_length;
                 rp_i0 += r_st_c;
                 ap_i0 += a_st_c;
              }
          } break;
          case 2 : { /* crc */
             vsip_scalar_f *ap_ik = ap0, *ap_0k = ap0;
             vsip_scalar_f *bp_kj = bp0, *bp_0j = bp0; 
             vsip_scalar_f *rp_ij = rp0, *rp_0j = rp0;
             if(b1 != 1.0) vsip_smmul_f(b1,r,r);
             while(r_r_l-- > 0){ /* j */
                 bp_kj = bp_0j;
                 while(a_r_l-- > 0){ /* k */
                    b_scalar = a1 * *bp_kj;
                    ap_ik = ap_0k;
                    rp_ij = rp_0j;
                    while(a_c_l-- > 0){ /* i */
                       *rp_ij +=  *ap_ik * b_scalar;
                        rp_ij += r_st_c;
                        ap_ik += a_st_c;
                    } a_c_l = a->col_length;
                    ap_0k += a_st_r;
                    bp_kj += b_st_c;
                 } a_r_l = a->row_length;
                 rp_0j += r_st_r;
                 bp_0j += b_st_r;
                 ap_0k = ap0;
             }
          } break;
          case 3 : { /* crr */
              vsip_scalar_f *ap_ik = ap0, *ap_i0 = ap0;
              vsip_scalar_f *bp_kj = bp0, *bp_k0 = bp0; 
              vsip_scalar_f *rp_ij = rp0, *rp_i0 = rp0;
              if(b1 != 1.0) vsip_smmul_f(b1,r,r);
              while(a_c_l-- > 0){ /* i */
                 ap_ik = ap_i0;
                 while(a_r_l-- > 0){ /* k */
                    a_scalar = a1 * *ap_ik;
                    ap_ik += a_st_r;
                    bp_kj = bp_k0;
                    rp_ij = rp_i0;
                    while(r_r_l-- > 0){ /* j */
                        *rp_ij = *bp_kj * a_scalar + *rp_ij;
                         rp_ij += r_st_r;
                         bp_kj += b_st_r;
                    } r_r_l = r->row_length;
                    bp_k0 += b_st_c;
                 }a_r_l = a->row_length;
                 bp_k0 = bp0;
                 rp_i0 += r_st_c;
                 ap_i0 += a_st_c;
              }
          } break;
          case 4 : { /* rcc */
            while(a_c_l-- > 0){
               while(r_r_l-- > 0){
                  temp = 0;
                  while(a_r_l-- > 0){
                     temp += *ap * *bp;
                     ap += a_st_r; bp += b_st_c;
                  }
                  *rp = b1 * *rp + a1 * temp;
                  rp += r_st_r;
                  ap = ap0;
                  bp0 += b_st_r; bp = bp0;
                  a_r_l = a->row_length;
               }
               ap0 += a_st_c; ap = ap0;
               bp0 = bp1; bp = bp0;
               rp0 += r_st_c; rp = rp0;
               r_r_l = r->row_length;
            }
          } break;
          case 5 : { /* rcr */
            while(a_c_l-- > 0){
               while(r_r_l-- > 0){
                  temp = 0;
                  while(a_r_l-- > 0){
                     temp += *ap * *bp;
                     ap += a_st_r; bp += b_st_c;
                  }
                  *rp = b1 * *rp + a1 * temp;
                  rp += r_st_r;
                  ap = ap0;
                  bp0 += b_st_r; bp = bp0;
                  a_r_l = a->row_length;
               }
               ap0 += a_st_c; ap = ap0;
               bp0 = bp1; bp = bp0;
               rp0 += r_st_c; rp = rp0;
               r_r_l = r->row_length;
            }
          } break;
          case 6 : { /* rrc */
              vsip_scalar_f *ap_ik = ap0, *ap_i0 = ap0;
              vsip_scalar_f *bp_kj = bp0, *bp_0j = bp0; 
              vsip_scalar_f *rp_ij = rp0, *rp_0j = rp0;
               /* jik */
              while(r_r_l-- > 0){ /* j */
                 rp_ij = rp_0j;
                 ap_i0 = ap0;
                 while(a_c_l-- > 0){ /* i */
                    temp = 0;
                    ap_ik = ap_i0;
                    bp_kj = bp_0j;
                    while(a_r_l-- > 0){ /* k */
                       temp += *ap_ik * *bp_kj;
                       ap_ik += a_st_r;
                       bp_kj += b_st_c;
                    } a_r_l = a->row_length;
                    *rp_ij = a1 * temp + b1 * *rp_ij;
                     rp_ij +=r_st_c;
                     ap_i0 += a_st_c;
                 } a_c_l = a->col_length;
                 rp_0j += r_st_r;
                 bp_0j += b_st_r;
              }
          } break;
          case 7 : { /* rrr */
              vsip_scalar_f *ap_ik = ap0, *ap_i0 = ap0;
              vsip_scalar_f *bp_kj = bp0, *bp_k0 = bp0; 
              vsip_scalar_f *rp_ij = rp0, *rp_i0 = rp0;
              if(b1 != 1.0) vsip_smmul_f(b1,r,r);
              while(a_c_l-- > 0){ /* i */
                 ap_ik = ap_i0;
                 while(a_r_l-- > 0){ /* k */
                    a_scalar = a1 * *ap_ik;
                    ap_ik += a_st_r;
                    bp_kj = bp_k0;
                    rp_ij = rp_i0;
                    while(r_r_l-- > 0){ /* j */
                        *rp_ij = *bp_kj * a_scalar + *rp_ij;
                         rp_ij += r_st_r;
                         bp_kj += b_st_r;
                    } r_r_l = r->row_length;
                    bp_k0 += b_st_c;
                 }a_r_l = a->row_length;
                 bp_k0 = bp0;
                 rp_i0 += r_st_c;
                 ap_i0 += a_st_c;
              }
          }
      }
   }
}