feat(omp): add lab omp realised during classroom
This commit is contained in:
		| @@ -34,14 +34,14 @@ bool isPiSequentiel_OK(int n) | ||||
|  \*-------------------------------------*/ | ||||
|  | ||||
| double piSequentiel(int n) { | ||||
|     const double delta_x = 1 / (double)n; | ||||
|     const double dx = 1.0 / (double)n; | ||||
|     double sum = 0; | ||||
|     for (int i = 0; i < n; i++) { | ||||
|     	double xi = i * delta_x; | ||||
|     	double xi = i * dx; | ||||
|     	sum += fpi(xi); | ||||
| 	} | ||||
|  | ||||
|     return sum * delta_x; | ||||
|     return sum * dx; | ||||
|     } | ||||
|  | ||||
| /*----------------------------------------------------------------------*\ | ||||
|   | ||||
| @@ -45,22 +45,20 @@ double piOMPEntrelacerPromotionTab(int n) | ||||
|     double sum[NB_THREAD]; | ||||
|  | ||||
|     // Reduction intra thread | ||||
| #pragma omp parallel | ||||
|     { | ||||
| #pragma omp parallel { | ||||
|  | ||||
|     const int TID = Omps::getTid(); | ||||
|     int s = TID; | ||||
|  | ||||
|     double sum_thread = 0; | ||||
|  | ||||
|     while (s < n) | ||||
| 	{ | ||||
| 	double xi = s * delta_x; | ||||
| 	sum_thread += fpi(xi); | ||||
| 	s += NB_THREAD; | ||||
|     while (s < n) { | ||||
|     	double xi = s * delta_x; | ||||
|     	sum_thread += fpi(xi); | ||||
|     	s += NB_THREAD; | ||||
| 	} | ||||
|     sum[TID] = sum_thread; | ||||
|     } | ||||
| } | ||||
|  | ||||
| double sumTotal = 0; | ||||
|  | ||||
|   | ||||
| @@ -37,8 +37,29 @@ bool isPiOMPEntrelacerCritical_Ok(int n) | ||||
|  | ||||
| double piOMPEntrelacerCritical(int n) | ||||
|     { | ||||
|     //TODO | ||||
|     return -1; | ||||
|     const double dx = 1.0 / (double)n; | ||||
|     const int NB_THREAD = Omps::setAndGetNaturalGranularity(); | ||||
|     int total = 0; | ||||
|  | ||||
| #pragma omp parallel | ||||
|     { | ||||
| 	const int TID = Omps::getTid(); | ||||
| 	int s = TID; | ||||
|  | ||||
| 	double sum_thread = 0; | ||||
|  | ||||
| 	while (s < n) | ||||
| 	    { | ||||
| 	    double xi = s*dx; | ||||
| 	    sum_thread += fpi(xi); | ||||
| 	    s+= NB_THREAD; | ||||
| 	    } | ||||
| #pragma omp critical | ||||
| 	{ | ||||
| 	total += sum_thread; | ||||
| 	} | ||||
|     } | ||||
|     return total * dx; | ||||
|     } | ||||
|  | ||||
| /*----------------------------------------------------------------------*\ | ||||
|   | ||||
| @@ -40,8 +40,26 @@ bool isPiOMPEntrelacerAtomic_Ok(int n) | ||||
|  */ | ||||
| double piOMPEntrelacerAtomic(int n) | ||||
|     { | ||||
|     // TODO | ||||
|     return -1; | ||||
|     const double dx = 1.0 / (double)n; | ||||
|     const int NB_THREAD = Omps::setAndGetNaturalGranularity(); | ||||
|     int total = 0; | ||||
|  | ||||
| #pragma omp parallel | ||||
| 	{ | ||||
| 	const int TID = Omps::getTid(); | ||||
| 	int s = TID; | ||||
| 	double sum_thread = 0; | ||||
| 	while (s < n) | ||||
| 	    { | ||||
| 	    double xi = s * dx; | ||||
| 	    sum_thread += fpi(xi); | ||||
| 	    s += NB_THREAD; | ||||
| 	    } | ||||
| #pragma omp atomic | ||||
| 	total += sum_thread; | ||||
|  | ||||
| 	} | ||||
|     return total * dx; | ||||
|     } | ||||
|  | ||||
| /*----------------------------------------------------------------------*\ | ||||
|   | ||||
| @@ -43,7 +43,18 @@ bool isPiOMPforPromotionTab_Ok(int n) | ||||
|  */ | ||||
| double piOMPforPromotionTab(int n) | ||||
|     { | ||||
|     //TODO | ||||
|     const double dx = 1.0 / (double)n; | ||||
|     const int NB_THREAD = Omps::setAndGetNaturalGranularity(); | ||||
|     double total[NB_THREAD] = {0.0}; | ||||
|  | ||||
| #pragma omp parallel for | ||||
|     for(int i = 0; i < n; i++) { | ||||
| 	const int TID = Omps::getTid(); | ||||
| //	double xi = s*dx; | ||||
| //	total[TID] += fpi(xi); | ||||
|     } | ||||
|  | ||||
|  | ||||
|     return -1; | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -41,11 +41,18 @@ bool isPiOMPforReduction_Ok(int n) | ||||
|  */ | ||||
| double piOMPforReduction(int n) | ||||
|     { | ||||
|     //TODO | ||||
|     return -1; | ||||
|     const double dx = 1.0 / (double)n; | ||||
|     double sum = 0; | ||||
| #pragma omp parallel for reduction(+:sum) | ||||
|     for (int i = 0; i < n; i++) | ||||
| 	{ | ||||
| 	double xi = i * dx; | ||||
| 	sum += fpi(xi); | ||||
| 	} | ||||
|  | ||||
|     return sum * dx; | ||||
|     } | ||||
|  | ||||
| /*----------------------------------------------------------------------*\ | ||||
|  |*			End	 					*| | ||||
|  \*---------------------------------------------------------------------*/ | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user