feat(omp): add lab omp realised during classroom

This commit is contained in:
2025-10-18 16:36:29 +02:00
parent 9d707a253a
commit f8ae49d666
6 changed files with 74 additions and 19 deletions

View File

@@ -34,14 +34,14 @@ bool isPiSequentiel_OK(int n)
\*-------------------------------------*/ \*-------------------------------------*/
double piSequentiel(int n) { double piSequentiel(int n) {
const double delta_x = 1 / (double)n; const double dx = 1.0 / (double)n;
double sum = 0; double sum = 0;
for (int i = 0; i < n; i++) { for (int i = 0; i < n; i++) {
double xi = i * delta_x; double xi = i * dx;
sum += fpi(xi); sum += fpi(xi);
} }
return sum * delta_x; return sum * dx;
} }
/*----------------------------------------------------------------------*\ /*----------------------------------------------------------------------*\

View File

@@ -45,22 +45,20 @@ double piOMPEntrelacerPromotionTab(int n)
double sum[NB_THREAD]; double sum[NB_THREAD];
// Reduction intra thread // Reduction intra thread
#pragma omp parallel #pragma omp parallel {
{
const int TID = Omps::getTid(); const int TID = Omps::getTid();
int s = TID; int s = TID;
double sum_thread = 0; double sum_thread = 0;
while (s < n) while (s < n) {
{
double xi = s * delta_x; double xi = s * delta_x;
sum_thread += fpi(xi); sum_thread += fpi(xi);
s += NB_THREAD; s += NB_THREAD;
} }
sum[TID] = sum_thread; sum[TID] = sum_thread;
} }
double sumTotal = 0; double sumTotal = 0;

View File

@@ -37,8 +37,29 @@ bool isPiOMPEntrelacerCritical_Ok(int n)
double piOMPEntrelacerCritical(int n) double piOMPEntrelacerCritical(int n)
{ {
//TODO const double dx = 1.0 / (double)n;
return -1; 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;
} }
/*----------------------------------------------------------------------*\ /*----------------------------------------------------------------------*\

View File

@@ -40,8 +40,26 @@ bool isPiOMPEntrelacerAtomic_Ok(int n)
*/ */
double piOMPEntrelacerAtomic(int n) double piOMPEntrelacerAtomic(int n)
{ {
// TODO const double dx = 1.0 / (double)n;
return -1; 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;
} }
/*----------------------------------------------------------------------*\ /*----------------------------------------------------------------------*\

View File

@@ -43,7 +43,18 @@ bool isPiOMPforPromotionTab_Ok(int n)
*/ */
double piOMPforPromotionTab(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; return -1;
} }

View File

@@ -41,11 +41,18 @@ bool isPiOMPforReduction_Ok(int n)
*/ */
double piOMPforReduction(int n) double piOMPforReduction(int n)
{ {
//TODO const double dx = 1.0 / (double)n;
return -1; 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 *| |* End *|
\*---------------------------------------------------------------------*/ \*---------------------------------------------------------------------*/