This shows you the differences between two versions of the page.
app:laboratoare:02 [2022/10/18 14:20] emil.slusanschi [Referinte] |
app:laboratoare:02 [2022/10/19 14:58] (current) emil.slusanschi [Clauza nowait] |
||
---|---|---|---|
Line 14: | Line 14: | ||
</code> | </code> | ||
- | Un exemplu grafic pentru cele trei tipuri de scheduling "clasic" poate fi vazut aici: {{:app:laboratoare:openmp_scheduling.png?600|OpenMP Scheduling - RvdP@Sun}} | + | Un exemplu grafic pentru cele trei tipuri de scheduling "clasic" poate fi vazut aici: |
+ | |||
+ | {{:app:laboratoare:openmp_scheduling.png?600|OpenMP Scheduling - RvdP@Sun}} | ||
In cele ce urmeaza, vom lua pe rand cele trei tipuri de scheduling si le vom analiza individual. | In cele ce urmeaza, vom lua pe rand cele trei tipuri de scheduling si le vom analiza individual. | ||
Line 142: | Line 144: | ||
</code> | </code> | ||
- | ===== nowait ===== | + | ===== Clauza nowait ===== |
Atunci când paralelizăm un for, există o barieră după fiecare for paralelizat, unde se așteaptă ca toate thread-urile din for-ul paralelizat să ajungă în același punct în același timp, ca apoi să-și continue execuția. | Atunci când paralelizăm un for, există o barieră după fiecare for paralelizat, unde se așteaptă ca toate thread-urile din for-ul paralelizat să ajungă în același punct în același timp, ca apoi să-și continue execuția. | ||
Line 149: | Line 151: | ||
#pragma omp parallel | #pragma omp parallel | ||
{ | { | ||
- | #pragma omp for nowait private(i) | + | #pragma omp for private(i) |
for (i = 0; i < 16; i++) { | for (i = 0; i < 16; i++) { | ||
c(i); | c(i); | ||
Line 177: | Line 179: | ||
{{:app:laboratoare:parallel_for_nowait.png?600|Rulare utilizand nowait}} | {{:app:laboratoare:parallel_for_nowait.png?600|Rulare utilizand nowait}} | ||
- | ===== Reduction ===== | + | ===== Directiva Reduction ===== |
''reduction'' este o directivă folosită pentru operații de tip reduce / fold pe arrays / colecții sau simple însumări / înmulțiri în cadrul unui loop. Mai precis, elementele dintr-un array sau indecșii unui loop sunt "acumulați" într-o singură variabilă, cu ajutorul unei operații, al cărui semn este precizat, in mod automat sincronizat peste mai multe threaduri. Nu orice operatie poate fi utilizata intr-o operatie de tip ''reduction''. | ''reduction'' este o directivă folosită pentru operații de tip reduce / fold pe arrays / colecții sau simple însumări / înmulțiri în cadrul unui loop. Mai precis, elementele dintr-un array sau indecșii unui loop sunt "acumulați" într-o singură variabilă, cu ajutorul unei operații, al cărui semn este precizat, in mod automat sincronizat peste mai multe threaduri. Nu orice operatie poate fi utilizata intr-o operatie de tip ''reduction''. | ||