int main() { unsigned int OUTER_LOOP_COUNT, NUM_X, NUM_Y, NUM_T; const REAL s0 = 0.03, strike = 0.03, t = 5.0, alpha = 0.2, nu = 0.6, beta = 0.5; readDataSet( OUTER_LOOP_COUNT, NUM_X, NUM_Y, NUM_T ); const int Ps = get_CPU_num_threads(); REAL* res = (REAL*)malloc(OUTER_LOOP_COUNT*sizeof(REAL)); { // Original Program (Sequential CPU Execution) cout<<"\n// Running OpenMP parallelized project program"<<endl; unsigned long int elapsed = 0; struct timeval t_start, t_end, t_diff; gettimeofday(&t_start, NULL); run_OrigCPU( OUTER_LOOP_COUNT, NUM_X, NUM_Y, NUM_T, s0, t, alpha, nu, beta, res ); gettimeofday(&t_end, NULL); timeval_subtract(&t_diff, &t_end, &t_start); elapsed = t_diff.tv_sec*1e6+t_diff.tv_usec; // validation and writeback of the result bool is_valid = validate ( res, OUTER_LOOP_COUNT ); writeStatsAndResult( is_valid, res, OUTER_LOOP_COUNT, NUM_X, NUM_Y, NUM_T, false, Ps, elapsed ); } return 0; }
int main() { LoopROScalars scals; SobolArrays sob_arrs; ModelArrays md_arrs; BrowBridgeArrays bb_arrs; fprintf(stdout, "\n// Generic Pricing, Multi-Threaded Benchmark:\n"); readDataSet(scals, sob_arrs, md_arrs, bb_arrs); fprintf(stdout, "// Contract: %d, MC Its#: %d, #Underlyings: %d, #Path Dates: %d, chunk: %d\n\n", scals.contract, scals.num_mcits, scals.num_under, scals.num_dates, scals.chunk ); const int Ps = get_CPU_num_threads(); double* prices; unsigned long int elapsed; { // run kernel struct timeval t_start, t_end, t_diff; gettimeofday(&t_start, NULL); computeSobolFixIndex( sob_arrs, scals.chunk ); { // do work and cleanup prices = run_CPUkernel( Ps, scals, sob_arrs, md_arrs, bb_arrs ); } gettimeofday(&t_end, NULL); timeval_subtract(&t_diff, &t_end, &t_start); elapsed = t_diff.tv_sec*1e6+t_diff.tv_usec; md_arrs .cleanup(); bb_arrs .cleanup(); sob_arrs.cleanup(); } { // validation and writeback of the result bool is_valid = validate ( scals.num_models, prices ); writeStatsAndResult( is_valid, scals.num_models, prices, false, Ps, elapsed ); free(prices); } return 0; // XXX this was "1" before, why? }