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