void sim_village_par(struct Village *village) { struct Village *vlist; // lowest level returns nothing // only for sim_village first call with village = NULL // recursive call cannot occurs if (village == NULL) return; /* Traverse village hierarchy (lower level first)*/ vlist = village->forward; while(vlist) { #pragma omp task untied sim_village_par(vlist); vlist = vlist->next; } /* Uses lists v->hosp->inside, and v->return */ check_patients_inside(village); /* Uses lists v->hosp->assess, v->hosp->inside, v->population and (v->back->hosp->realloc) !!! */ check_patients_assess_par(village); /* Uses lists v->hosp->waiting, and v->hosp->assess */ check_patients_waiting(village); #pragma omp taskwait /* Uses lists v->hosp->realloc, v->hosp->asses and v->hosp->waiting */ check_patients_realloc(village); /* Uses list v->population, v->hosp->asses and v->h->waiting */ check_patients_population(village); }
void sim_village_main_par(struct Village *top) { long i; hclib_pragma_marker("omp_to_hclib", "", "pragma553_omp_to_hclib"); { hclib_pragma_marker("omp", "parallel", "pragma555_omp_parallel"); { hclib_pragma_marker("omp", "single", "pragma557_omp_single"); { hclib_pragma_marker("omp", "task untied", "pragma559_omp_task"); { for (i = 0; i < sim_time; i++) sim_village_par(top); } } } } }
void sim_village_main_par(struct Village *top) { long i; #ifdef _OPENMP double start = omp_get_wtime();; #endif //#pragma omp parallel //#pragma omp single //#pragma omp task untied for (i = 0; i < sim_time; i++) sim_village_par(top); #ifdef _OPENMP double time = omp_get_wtime() - start; printf("OpenMP Work took %f sec.\n", time); #endif }
void sim_village_main_par(struct Village *top) { long i; const unsigned long long full_program_start = current_time_ns(); { #pragma omp parallel { #pragma omp single { #pragma omp task untied { for (i = 0; i < sim_time; i++) sim_village_par(top); } } } } ; const unsigned long long full_program_end = current_time_ns(); printf("full_program %llu ns\n", full_program_end - full_program_start); }