/* * Prepare process for a clean termination. */ void cleanup (struct life_t * life) { write_grid(life); free_grids(life); MPI_Finalize(); }
static void multires_reshape_propagate(MultiresPropagateData *data) { if (data->reshape_level == data->top_level) { return; } const int num_grids = data->num_grids; /* Calculate delta made at the reshape level. */ CCGKey *delta_level_key = &data->top_level_key; CCGElem **delta_grids_data = allocate_grids(delta_level_key, num_grids); multires_reshape_calculate_delta(data, delta_grids_data); /* Propagate deltas to the higher levels. */ multires_reshape_propagate_and_smooth_delta(data, delta_grids_data); /* Finally, apply smoothed deltas. */ multires_reshape_propagate_apply_delta(data, delta_grids_data); /* Cleanup. */ free_grids(delta_grids_data, num_grids); }
static void multires_reshape_propagate_free(MultiresPropagateData *data) { free_grids(data->orig_grids_data, data->num_grids); }
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 printf("\n7-point stencil, no add, time skewed C code with non-periodic boundary conditions\n"); // initialize arrays init_flush_cache_array(); malloc_grids(argv); #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); printf("Median ticks per second = %e\n", median_counts_per_sec); #endif #endif printf("\n"); #if defined(DEBUG) init_grids(); printf("Time skewing:\n"); printf("\nGRID A BEFORE:"); print_grid(A); printf("\nGRID B BEFORE:"); print_grid(B); time_skewing(); printf("\nGRID A AFTER:"); print_grid(A); printf("\nGRID B AFTER:"); print_grid(B); #else #if defined(PAPI_ENABLED) printf("Time skewing:\n"); for (papi_setnum=0; papi_setnum < num_sets; papi_setnum++) { PAPI_MAKE_MEASUREMENTS(event_sets[papi_setnum].set, time_skewing(), NUM_TRIALS, results); print_papi_measurements(&(event_sets[papi_setnum]), results, NUM_TRIALS); } printf("\n"); #else printf("Time skewing:\n"); TIMER_MAKE_MEASUREMENTS(time_skewing(), results, NUM_TRIALS); print_timer_measurements(results, NUM_TRIALS, median_counts_per_sec); printf("\n"); #endif #endif printf("\nFinal interior values: A[%d, %d, %d] = %lf, B[%d, %d, %d] = %lf\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)]); flush_cache_checksum(); free_grids(); return EXIT_SUCCESS; }