Étant donné cet exemple de code, l'exercice est à parallèle le code avec OpenMP utilisant des tâches. C'est un ensemble d'éléments et nous voulons compter ceux qui sont bons. OpenMP: conditions de concurrence dans les tâches
int count_good (item_t* item)
{
int n = 0;
while (item) {
if (is_good(item))
n++;
item = item->next;
}
return n;
}
Ce n'est pas exactement les devoirs. C'est pour la préparation d'un examen. Mon idée est la suivante:
int count_good (item_t* item)
{
int n = 0;
while (item) {
#pragma omp task
{
if (is_good(item))
n++;
}
item = item->next;
}
#pragma omp taskwait
return n;
}
...
int main()
{
...
#pragma omp parallel
{
#pragma omp single
count_good(some_times);
}
}
Un problème est la n
qui est une variable privée du fil unique, mais elle pourrait être renforcée par différentes tâches en même temps. Cela pourrait-il générer une condition de concurrence? Peut-il être évité avec #pragma omp critical
?