J'essaye de paralléliser un code en utilisant OpenMP, je n'utilise que deux réductions et je ne comprends pas pourquoi mon code OpenMP est plus lent que le code séquentiel. C'est juste une division du tableau entre les processeurs. Est-ce que quelqu'un a une idée de pourquoi c'est comme ça?Le code est plus lent quand j'utilise OpenMP
float visibleLength;
float *k = (float *)malloc(N * sizeof(float));
int visibleLines = 0;
k[0] = data.y[0]/data.x[0];
visibleLength = data.y[0];
omp_set_num_threads(12);
#pragma omp parallel for reduction(+:visibleLines,visibleLength)
for (int i = 1; i<N; i++) {
k[i] = fmax(k[i - 1], data.y[i]/data.x[i]);
if (k[i] > k[i - 1]) {
visibleLines = visibleLines + 1;
visibleLength = visibleLength + data.y[i] - k[i - 1] * data.x[i];
}
}
Comment mesurez-vous le temps? Où sont vos résultats de mesure? –
J'utilise la fonction clock(); pour mesurer l'heure et le résultat ici '// FIN HORLOGE \t end = clock(); \t printf ("Fin de l'horloge \ n"); \t printf ("\ n visibleLines =% d \ n \ n", lignes visibles); \t printf ("\ n visibleLength =% f \ n \ n", visibleLength); \t time_spent = (double (début de début)/CLOCKS_PER_SEC); Printf ("\ n Time Expend =% f \ n \ n", time_spent); ' –