/* * Initialize runtime environment and initializes MPI. */ int init (struct life_t * life, int * c, char *** v) { int argc = *c; char ** argv = *v; life->rank = 0; life->size = 1; life->ncols = DEFAULT_SIZE; life->nrows = DEFAULT_SIZE; life->tcols = DEFAULT_SIZE; life->ubound = DEFAULT_SIZE - 1; life->lbound = 0; life->generations = DEFAULT_GENS; life->randseed = DEFAULT_SEED; life->print = false; life->infile = NULL; life->outfile = NULL; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &life->rank); MPI_Comm_size(MPI_COMM_WORLD, &life->size); parse_args(life, argc, argv); seed_random(life->randseed); init_grids(life); }
IMPISD_BEGIN_NAMESPACE FretData::FretData(Floats d_term, Floats d_center, Floats d_int, Floats s_grid, Float R0, Float Rmin, Float Rmax, bool do_limit): base::Object("Data Structure for FretRestraint %1%") { // store grids d_center_ = d_center; s_grid_ = s_grid; d_term_ = d_term; // save quantities useful to move on grids nbin_.push_back(d_center_.size()); nbin_.push_back(s_grid_.size()); nbin_.push_back(d_term_.size()); dimension_ = nbin_.size(); // initialize grids init_grids(d_int, R0, Rmin, Rmax, do_limit); }
int main(int argc, char *argv[]) { double results[NUM_TRIALS]; #if !defined(DEBUG) #if defined(PAPI_ENABLED) int papi_setnum, num_desired, num_sets; #else double median_counts_per_sec; #endif #endif int i; printf("7-point stencil, no add, naive C code with non-periodic boundary conditions\n"); #if !defined(DEBUG) #if defined(PAPI_ENABLED) // initialize papi int desired_events[] = {PAPI_TOT_CYC, PAPI_FP_INS, PAPI_L2_DCA, PAPI_L2_DCM, PAPI_L3_DCM, PAPI_TLB_DM, PAPI_LD_INS, PAPI_SR_INS}; num_desired = 9; PAPI_event_set_wrapper_t* event_sets; papi_init(desired_events, num_desired, &event_sets, &num_sets); #else // calculate clock rate GET_CLOCK_RATE(results, NUM_TRIALS); median_counts_per_sec = find_median(results, NUM_TRIALS); #endif #endif // initialize arrays init_flush_cache_array(); malloc_grids(argv); printf("\n"); #if defined(DEBUG) init_grids(); printf("SINGLY NESTED LOOP:\n"); printf("\nGRID A BEFORE:"); print_grid(A); printf("\nGRID B BEFORE:"); print_grid(B); naive_singly_nested_loop(); printf("\nGRID A AFTER:"); print_grid(A); printf("\nGRID B AFTER:"); print_grid(B); init_grids(); printf("TRIPLY NESTED LOOPS:\n"); printf("\nGRID A BEFORE:"); print_grid(A); printf("\nGRID B BEFORE:"); print_grid(B); naive_triply_nested_loops(); printf("\nGRID A AFTER:"); print_grid(A); printf("\nGRID B AFTER:"); print_grid(B); #else #if defined(PAPI_ENABLED) printf("SINGLY NESTED LOOP:\n"); for (papi_setnum=0; papi_setnum < num_sets; papi_setnum++) { PAPI_MAKE_MEASUREMENTS(event_sets[papi_setnum].set, naive_singly_nested_loop(), NUM_TRIALS, results); print_papi_measurements(&(event_sets[papi_setnum]), results, NUM_TRIALS); } printf("\n"); printf("TRIPLY NESTED LOOPS:\n"); for (papi_setnum=0; papi_setnum < num_sets; papi_setnum++) { PAPI_MAKE_MEASUREMENTS(event_sets[papi_setnum].set, naive_triply_nested_loops(), NUM_TRIALS, results); print_papi_measurements(&(event_sets[papi_setnum]), results, NUM_TRIALS); } printf("\n"); papi_cleanup(event_sets, num_sets); #else printf("SINGLY NESTED LOOP:\n"); TIMER_MAKE_MEASUREMENTS(naive_singly_nested_loop(), results, NUM_TRIALS); print_timer_measurements(results, NUM_TRIALS, median_counts_per_sec); printf("\n"); printf("TRIPLY NESTED LOOPS:\n"); TIMER_MAKE_MEASUREMENTS(naive_triply_nested_loops(), results, NUM_TRIALS); print_timer_measurements(results, NUM_TRIALS, median_counts_per_sec); printf("\n"); printf("\n"); #endif #endif printf("\nFinal interior values: A[%lu, %lu, %lu] = %4.2e, B[%lu, %lu, %lu] = %4.2e\n", nx/2, ny/2, nz/2, A[Index3D(nx/2, ny/2, nz/2)], nx/2, ny/2, nz/2, B[Index3D(nx/2, ny/2, nz/2)]); fc_checksum(); free(A); free(B); return EXIT_SUCCESS; }