Beispiel #1
0
int main(int argc, char **argv)
{
  int n = N;
  int m = M;
  double(*A)[N][M];
  A = (double(*)[N][M])polybench_alloc_data((N) * (M), sizeof(double));
  double(*s)[M];
  s = (double(*)[M])polybench_alloc_data(M, sizeof(double));
  double(*q)[N];
  q = (double(*)[N])polybench_alloc_data(N, sizeof(double));
  double(*p)[M];
  p = (double(*)[M])polybench_alloc_data(M, sizeof(double));
  double(*r)[N];
  r = (double(*)[N])polybench_alloc_data(N, sizeof(double));
  init_array(m, n, *A, *r, *p);
  polybench_timer_start();
  kernel_bicg(m, n, *A, *s, *q, *p, *r);
  polybench_timer_stop();
  polybench_timer_print();
  if (argc > 42 && !strcmp(argv[0], ""))
    print_array(m, n, *s, *q);
  free((void *)A);
  free((void *)s);
  free((void *)q);
  free((void *)p);
  free((void *)r);
  return 0;
}
Beispiel #2
0
int main(int argc, char** argv)
{
  /* Retrieve problem size. */
  int nx = NX;
  int ny = NY;

  /* Variable declaration/allocation. */
  POLYBENCH_2D_ARRAY_DECL(A, DATA_TYPE, NX, NY, nx, ny);
  POLYBENCH_1D_ARRAY_DECL(s, DATA_TYPE, NY, ny);
  POLYBENCH_1D_ARRAY_DECL(q, DATA_TYPE, NX, nx);
  POLYBENCH_1D_ARRAY_DECL(p, DATA_TYPE, NY, ny);
  POLYBENCH_1D_ARRAY_DECL(r, DATA_TYPE, NX, nx);

  /* Initialize array(s). */
  init_array (nx, ny,
	      POLYBENCH_ARRAY(A),
	      POLYBENCH_ARRAY(r),
	      POLYBENCH_ARRAY(p));

  /* Start timer. */
  polybench_start_instruments;

  /* Run kernel. */
  kernel_bicg (nx, ny,
	       POLYBENCH_ARRAY(A),
	       POLYBENCH_ARRAY(s),
	       POLYBENCH_ARRAY(q),
	       POLYBENCH_ARRAY(p),
	       POLYBENCH_ARRAY(r));

  /* Stop and print timer. */
  polybench_stop_instruments;
  polybench_print_instruments;

  /* Prevent dead-code elimination. All live-out data must be printed
     by the function call in argument. */
  polybench_prevent_dce(print_array(nx, ny, POLYBENCH_ARRAY(s), POLYBENCH_ARRAY(q)));

  /* Be clean. */
  POLYBENCH_FREE_ARRAY(A);
  POLYBENCH_FREE_ARRAY(s);
  POLYBENCH_FREE_ARRAY(q);
  POLYBENCH_FREE_ARRAY(p);
  POLYBENCH_FREE_ARRAY(r);

  return 0;
}
Beispiel #3
0
int main(int argc, char** argv){
  
  double runtime=0.0;
  struct timeval start, end;

  if(argc<3){
    printf("\nERROR: Insufficient Arguments!\n\n");
    exit(-1);
  }
  
  /* Retrieve problem size. */
  int n = atoi(argv[1]);
  int m = atoi(argv[2]);

  dimcount=2;
  psgdim[0]=n;
  psgdim[1]=m;
  dim0=n;
  dim1=m;

  /* Variable declaration/allocation. */
  double *A=(double*)malloc(n*m*sizeof(double));
  double *s=(double*)malloc(m*sizeof(double));
  double *q=(double*)malloc(n*sizeof(double));
  double *p=(double*)malloc(m*sizeof(double));
  double *r=(double*)malloc(n*sizeof(double));  

  psgProtect(A,(long long) &A[0],(long long) &A[(n*m)-1]);
  psgProtect(s,(long long) &s[0],(long long) &s[m-1]);  
  psgProtect(q,(long long) &q[0],(long long) &q[n-1]);
  psgProtect(p,(long long) &p[0],(long long) &p[m-1]);
  psgProtect(r,(long long) &r[0],(long long) &r[n-1]);  
  
  /* Initialize array(s). */
  init_array (m,n,A,r,p);

  /* Run kernel. */
  gettimeofday(&start, NULL);        
  kernel_bicg (m,n,A,s,q,p,r);
  gettimeofday(&end, NULL);
  printf("Total time taken to execute the kernel: %lf microseconds\n", (double) ((end.tv_sec * 1000000 + end.tv_usec) - (start.tv_sec * 1000000 + start.tv_usec))/(double)1000000);
  runtime=(double) ((end.tv_sec * 1000000 + end.tv_usec) - (start.tv_sec * 1000000 + start.tv_usec))/(double)1000000;

  if(argc==4){
    print_data_2d(n,m,A,argv[3],1);
    print_data_1d(n,q,argv[3],0);
    print_data_1d(m,p,argv[3],0);
    print_data_1d(n,r,argv[3],0);
  }
  
  if(argc>=5) writeOVRData(argv[4],runtime,0);
  if(argc>=6) writeFPRData(argv[5],detectCounter,0);

  if(detectCounter)
    printf("\nINFO: Soft error detected\n");
  else
    printf("\nINFO: No Soft errors detected\n");    

  /* Be clean. */
  free(A);
  free(s);
  free(q);
  free(p);
  free(r);

#ifdef INST
  printFaultSitesData();
  printFaultInjectionData();
#endif    
  
  return 0;
}