This is an old revision of the document!
Uneori dorim să distribuim ca thread-uri diferite să execute task-uri diferite în același timp. În această privință ne vine de ajutor conceptul de sections, prin care două sau mai multe thread-uri execută două sau mai multe sections corespunzătoare acestora (adică thread-urilor, fiecare thread cu un section).
În OpenMP se folosește directiva sections
pentru a marca o zonă din cod în care distribuim task-urile diferite (sections) thread-urilor (fiecare thread cu câte un section). Sintaxa în OpenMP este următoarea:
#pragma omp parallel { // se marchează blocul de sections #pragma omp sections { #pragma omp section { // section executat de thread-ul X } #pragma omp section { // section executat de thread-ul Y } #pragma omp section { // section executat de thread-ul Z } } #pragma omp sections { #pragma omp section { // section executat de thread-ul X } #pragma omp section { // section executat de thread-ul Y } } } #pragma omp parallel sections { #pragma omp section { // section executat de thread-ul X } #pragma omp section { // section executat de thread-ul Y } }
Dacă dorim ca o secvență de cod (dintr-o bucată de cod paralelizat) să fie executat doar de un singur thread, folosim directiva SINGLE
. Aceasta este folosită, de regulă, în operații I/O.
Exemplu:
#pragma omp parallel { #pragma omp single { // cod executat de un singur thread } }
Directiva MASTER
este o particularizare a directivei SINGLE
, unde codul din zona paralelizată este executat de thread-ul master (cel cu id-ul 0).
#pragma omp parallel { #pragma omp master { // cod executat de un singur thread } }