Paralelo para bucle en openmp
Estoy intentando paralelizar un bucle for muy simple, pero este es mi primer intento de usar OpenMP en mucho tiempo. Me estoy desconcertado por los tiempos de ejecución. Aquí está mi código:
#include <vector>
#include <algorithm>
using namespace std;
int main ()
{
int n=400000, m=1000;
double x=0,y=0;
double s=0;
vector< double > shifts(n,0);
#pragma omp parallel for
for (int j=0; j<n; j++) {
double r=0.0;
for (int i=0; i < m; i++){
double rand_g1 = cos(i/double(m));
double rand_g2 = sin(i/double(m));
x += rand_g1;
y += rand_g2;
r += sqrt(rand_g1*rand_g1 + rand_g2*rand_g2);
}
shifts[j] = r / m;
}
cout << *std::max_element( shifts.begin(), shifts.end() ) << endl;
}
Lo compilo con
g++ -O3 testMP.cc -o testMP -I /opt/boost_1_48_0/include
es decir, no hay "-fopenmp", y obtengo estos tiempos:
real 0m18.417s
user 0m18.357s
sys 0m0.004s
cuando uso "-fopenmp",
g++ -O3 -fopenmp testMP.cc -o testMP -I /opt/boost_1_48_0/include
Obtengo estos números para los tiempos:
real 0m6.853s
user 0m52.007s
sys 0m0.008s
Lo que no tiene sentido para mí. ¿Cómo el uso de ocho núcleos solo puede dar como resultado un aumento de rendimiento de solo 3 veces? ¿Estoy codificando el bucle correctamente?