Je suis nouveau dans l'utilisation d'OpenMP. Je pense que l'utilisation de la clause max reduction pour trouver l'élément max d'un tableau n'est pas une si mauvaise idée, mais en fait la parallèle pour la boucle a fonctionné beaucoup plus lentement que la série.omp parallèle pour la boucle (réduction pour trouver max) a couru plus lentement que les codes série
int main() {
double sta, end, elapse_t;
int bsize = 46000;
int q = bsize;
int max_val = 0;
double *buffer;
buffer = (double*)malloc(bsize*sizeof(double));
srand(time(NULL));
for(int i=0;i<q;i++)
buffer[i] = rand()%10000;
sta = omp_get_wtime();
//int i;
#pragma omp parallel for reduction(max : max_val)
for(int i=0;i<q; i++)
{
max_val = max_val > buffer[i] ? max_val : buffer[i];
}
end = omp_get_wtime();
printf("parallel maximum time %f\n", end-sta);
sta = omp_get_wtime();
for(int i=0;i<q; i++)
{
max_val = max_val > buffer[i] ? max_val : buffer[i];
}
end = omp_get_wtime();
printf("serial maximum time %f\n", end-sta);
free(buffer);
return 0;}
Compile commande
gcc-7 kp_omp.cpp -o kp_omp -fopenmp
exécution résulte
./kp_omp
parallel maximum time 0.000505
serial maximum time 0.000266
En ce qui concerne le processeur, il est un processeur Intel Core i7-6700 avec 8 cœurs.