int main(int argc,char *argv[]) { float* vx0; float* vy0; float* vz0; float* txx0; float* tyy0; float* tzz0; float* txy0; float* txz0; float* tyz0; float* fx; float* fy; float* fz; int nx,ny,nz,tx,ty,tz,timesteps; int i,j,k; float spt; int block; uint64_t start, exec_time; /* parse command line options */ nx = atoi(argv[1]); ny = atoi(argv[2]); nz = atoi(argv[3]); tx = 1; ty = 1; tz = 1; timesteps = atoi(argv[4]); // printf("%dx%dx%d, blocking: %dx%dx%d, timesteps: %d\n", // nx,ny,nz,tx,ty,tz,timesteps); /* allocate arrays */ vx0=(float*)malloc(sizeof(float)*nx*ny*nz); vy0=(float*)malloc(sizeof(float)*nx*ny*nz); vz0=(float*)malloc(sizeof(float)*nx*ny*nz); txx0=(float*)malloc(sizeof(float)*nx*ny*nz); tyy0=(float*)malloc(sizeof(float)*nx*ny*nz); tzz0=(float*)malloc(sizeof(float)*nx*ny*nz); txy0=(float*)malloc(sizeof(float)*nx*ny*nz); txz0=(float*)malloc(sizeof(float)*nx*ny*nz); tyz0=(float*)malloc(sizeof(float)*nx*ny*nz); fx=(float*)malloc(sizeof(float)*nx*ny*nz); fy=(float*)malloc(sizeof(float)*nx*ny*nz); fz=(float*)malloc(sizeof(float)*nx*ny*nz); /* initialize arrays to all ones */ StencilInit(nx,ny,nz,vx0); StencilInit(nx,ny,nz,vy0); StencilInit(nx,ny,nz,vz0); StencilInit(nx,ny,nz,txx0); StencilInit(nx,ny,nz,tyy0); StencilInit(nx,ny,nz,tzz0); StencilInit(nx,ny,nz,txy0); StencilInit(nx,ny,nz,txz0); StencilInit(nx,ny,nz,tyz0); StencilInit(nx,ny,nz,fx); StencilInit(nx,ny,nz,fy); StencilInit(nx,ny,nz,fz); start = get_time(); /* stencil function */ StencilProbe( vx0, vy0, vz0, txx0, tyy0, tzz0, txy0, txz0, tyz0, fx, fy, fz, nx, ny, nz, tx, ty, tz, timesteps); exec_time = diff_time(start, get_time()); //printf("#call of pair of stencil(prev/next) :%d \n",timesteps/2); printf ("%d;%d;%d;%d;%d;" "%" PRIu64, nx, ny, nz, timesteps, omp_thread_count(), exec_time); //printf ("%d " "%" PRIu64, omp_thread_count(), exec_time/1000/1000); /* for (k = 2; k < nz - 2; k++) { for (j = 2; j < ny - 2; j++) { for (i = 2; i < nx - 2; i++) { */ #ifdef PROUT i=13; j=15; k=37; printf("\n"); printf("i=%d - j=%d - k=%d - %f - %f \n",i,j,k,vx0[Index3D (nx, ny, i, j, k)],txx0[Index3D (nx, ny, i, j, k)]); #endif /* } } } */ /* free arrays */ free(vx0); free(vy0); free(vz0); free(fx); free(fy); free(fz); free(txx0); free(tyy0); free(tzz0); free(txy0); free(txz0); free(tyz0); }
main(int argc,char *argv[] ){ Ivar data; int steps,num_threads; /*number of steps in tree*/ Float price; struct timespec reqStart,reqEnd; double accum; data.S = 20; /*current spot price*/ data.X = 30; /*strike price of option*/ data.T = 2.0; /*time to expiration*/ data.sigma=0.20; /*volatility*/ data.mu=0.05; /*risk-free interest rate*/ steps = atoi(argv[1]); num_threads = atoi(argv[2]); omp_set_num_threads(num_threads); printf("threads -- %d",omp_thread_count()); clock_gettime(CLOCK_REALTIME, &reqStart); price = option_price(data, steps, EUROPUT, CRR); printf("EUROPUT WITH CRR:\t%8.3f\n", price); clock_gettime(CLOCK_REALTIME, &reqEnd); accum = ( reqEnd.tv_sec - reqStart.tv_sec ) + ( reqEnd.tv_nsec - reqStart.tv_nsec ) / BILLION; printf( "\n TIME TAKEN FOR BOPM Routine : %lf\n", accum ); clock_gettime(CLOCK_REALTIME, &reqStart); price = option_price(data, steps, EUROCALL, CRR); clock_gettime(CLOCK_REALTIME, &reqEnd); printf("EUROCALL WITH CRR\t%8.3f\n", price); accum = ( reqEnd.tv_sec - reqStart.tv_sec ) + ( reqEnd.tv_nsec - reqStart.tv_nsec ) / BILLION; printf( "\n TIME TAKEN FOR BOPM Routine : %lf\n", accum ); clock_gettime(CLOCK_REALTIME, &reqStart); price = option_price(data, steps, AMERPUT, CRR); printf("AMERPUT WITH CRR\t%8.3f\n", price); clock_gettime(CLOCK_REALTIME, &reqEnd); accum = ( reqEnd.tv_sec - reqStart.tv_sec ) + ( reqEnd.tv_nsec - reqStart.tv_nsec ) / BILLION; printf( "\n TIME TAKEN FOR BOPM Routine : %lf\n", accum ); clock_gettime(CLOCK_REALTIME, &reqStart); price = option_price(data, steps, AMERCALL, CRR); printf("AMERCALL WITH CRR\t%8.3f\n", price); clock_gettime(CLOCK_REALTIME, &reqEnd); accum = ( reqEnd.tv_sec - reqStart.tv_sec ) + ( reqEnd.tv_nsec - reqStart.tv_nsec ) / BILLION; printf( "\n TIME TAKEN FOR BOPM Routine : %lf\n", accum ); return 0; }