Points de planification des tâches OpenMP

J’ai le code suivant:

#pragma omp parallel { #pragma omp single { for(node* p = head; p; p = p->next) { preprocess(p); #pragma omp task process(p); } } } 

Je voudrais savoir quand les threads commencent à calculer les tâches. Dès que la tâche est créée avec #pragma omp task ou seulement après que toutes les tâches ont été créées?

Modifier:

 int* array = (int*)malloc... #pragma omp parallel { #pragma omp single { while(...){ preprocess(array); #pragma omp task firstprivate(array) process(array); } } } 

    Dans votre exemple, les threads de travail peuvent commencer à exécuter les tâches créées dès leur création. Il n’est pas nécessaire d’attendre la fin de la création de toutes les tâches avant l’exécution de la première tâche.

    Donc, en gros, une fois que la première tâche a été créée par le producteur, un travailleur la récupère et commence à exécuter la tâche. Cependant, sachez que le runtime OpenMP et le compilateur ont une certaine liberté à cet égard. Ils pourraient retarder un peu l’exécution ou même exécuter certaines des tâches en place.

    Si vous souhaitez lire les détails, vous devrez explorer la spécification OpenMP sur http://www.openmp.org. C’est un peu difficile à lire, mais c’est la source d’informations définitive.

    À la vôtre, -michael