SpeedUp médiocre avec openMP
Bonjour,
Je test ma machine (processeur 6 coeurs+ hyperthreading: donc 12 threads possibles) en programmation openMP et j'ai des speedup plutôt décevant que je ne comprend pas trés bien. Avec l'example ci-dessous mon speedup plafonne entre 3 et 4. J'ai beau augmenter la taille de la boucle,N ,je n'obtient pas mieux. Quelqu'un connaitrait-il des raisons expliquant ces médiocres résultats.
Est-ce du à l'architecture du microprocesseir intel? Ou mes directives openMP ne sont pas obtinmisées.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
double e,*c,*d;
int k,N=1e8;
c= new double[N];
d= new double[N];
omp_set_num_threads(12);
#pragma omp parallel for private(k) reduction(+:e)
for (int i=0;i<N;i++) {
k=i;
d[k]=10.225*(double)i;
c[k]=d[k]/1251.5;
c[k]+=11.9+d[k]+d[k]/2568+d[k]*0.025;
c[k]-=10.36-2.4*d[k];
e=e+cos(c[k]);
}
delete[] c;
delete[] d; |
Pour info: ne cherchez pas de sens à ce calcul, c'est just un test.
Je travaille en win64 ou Linux64 ubuntu avec gcc4.5