Differences

This shows you the differences between two versions of the page.

Link to this comparison view

app:laboratoare:02 [2022/10/18 14:18]
emil.slusanschi
app:laboratoare:02 [2022/10/19 14:58] (current)
emil.slusanschi [Clauza nowait]
Line 5: Line 5:
  
 Pentru a preveni situații când thread-urile au volume diferite de workload, există conceptul de scheduling în OpenMP. Pentru scheduling se folosește directiva ''​schedule(tip_de_schedule,​ chunk_size)'',​ unde tipul de schedule poate fi: static, dynamic, guided, auto. Specificarea dimensiunii unui chunk este opționala. In cazul în care aceasta nu este specificată,​ acesta are o valoare default (in functie de tipul de schedule ales). ​ Pentru a preveni situații când thread-urile au volume diferite de workload, există conceptul de scheduling în OpenMP. Pentru scheduling se folosește directiva ''​schedule(tip_de_schedule,​ chunk_size)'',​ unde tipul de schedule poate fi: static, dynamic, guided, auto. Specificarea dimensiunii unui chunk este opționala. In cazul în care aceasta nu este specificată,​ acesta are o valoare default (in functie de tipul de schedule ales). ​
- 
-Un exemplu grafic pentru cele trei tipuri de scheduling "​clasic"​ poate fi vazut aici: {{:​app:​laboratoare:​openmp_scheduling.png?​600|OpenMP Scheduling - RvdP@Sun}} 
  
 Exemplu de scheduling: Exemplu de scheduling:
Line 15: Line 13:
 } }
 </​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}}
 +
 +In cele ce urmeaza, vom lua pe rand cele trei tipuri de scheduling si le vom analiza individual.
  
 ===== Static scheduling ===== ===== Static scheduling =====
Line 140: 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 147: 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 175: 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''​.
  
Line 207: Line 211:
   * http://​jakascorner.com/​blog/​   * http://​jakascorner.com/​blog/​
   * https://​ppc.cs.aalto.fi/​   * https://​ppc.cs.aalto.fi/​
-  * [Dynamic ​scheduling ​vs. Guided ​scheduling](https://​stackoverflow.com/​questions/​42970700/​openmp-dynamic-vs-guided-scheduling)+  * Dynamic vs. Guided ​Scheduling: ​https://​stackoverflow.com/​questions/​42970700/​openmp-dynamic-vs-guided-scheduling
   * Laboratorul a fost construit de catre Florin Mihalache pe https://​github.com/​florinrm/​app-laborator/​ si portat/​revizuit de catre Emil Slusanschi pe https://​ocw.cs.pub.ro   * Laboratorul a fost construit de catre Florin Mihalache pe https://​github.com/​florinrm/​app-laborator/​ si portat/​revizuit de catre Emil Slusanschi pe https://​ocw.cs.pub.ro
  
  
app/laboratoare/02.1666091934.txt.gz · Last modified: 2022/10/18 14:18 by emil.slusanschi
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0