![Page 1: Czesc 3 OpenMPmrow/dyd/files/wdprir-part03.pdf · 2018. 12. 21. · Część3 OpenMP MaciejJ.Mrowiński mrow@if.pw.edu.pl Wydział Fizyki Politechnika Warszawska 21grudnia2018](https://reader035.vdocuments.net/reader035/viewer/2022071218/605000f03dd69a2ab11a29fa/html5/thumbnails/1.jpg)
Część 3OpenMP
Maciej J. Mrowiń[email protected]
Wydział FizykiPolitechnika Warszawska
21 grudnia 2018
![Page 2: Czesc 3 OpenMPmrow/dyd/files/wdprir-part03.pdf · 2018. 12. 21. · Część3 OpenMP MaciejJ.Mrowiński mrow@if.pw.edu.pl Wydział Fizyki Politechnika Warszawska 21grudnia2018](https://reader035.vdocuments.net/reader035/viewer/2022071218/605000f03dd69a2ab11a29fa/html5/thumbnails/2.jpg)
Dzisiejszy Odcinek Sponsoruje...
![Page 3: Czesc 3 OpenMPmrow/dyd/files/wdprir-part03.pdf · 2018. 12. 21. · Część3 OpenMP MaciejJ.Mrowiński mrow@if.pw.edu.pl Wydział Fizyki Politechnika Warszawska 21grudnia2018](https://reader035.vdocuments.net/reader035/viewer/2022071218/605000f03dd69a2ab11a29fa/html5/thumbnails/3.jpg)
Wprowadzenie
Wprowadzenie
![Page 4: Czesc 3 OpenMPmrow/dyd/files/wdprir-part03.pdf · 2018. 12. 21. · Część3 OpenMP MaciejJ.Mrowiński mrow@if.pw.edu.pl Wydział Fizyki Politechnika Warszawska 21grudnia2018](https://reader035.vdocuments.net/reader035/viewer/2022071218/605000f03dd69a2ab11a29fa/html5/thumbnails/4.jpg)
Hello World - #pragma omp parallel
1 #include <stdio.h>2 #include <stdlib.h>3 #include <omp.h>45 int main(int argc , char *argv [])6 {7 #pragma omp parallel8 {9 printf("HelloOpenMP %d\n", omp_get_thread_num ());
10 }1112 return 0;13 }
![Page 5: Czesc 3 OpenMPmrow/dyd/files/wdprir-part03.pdf · 2018. 12. 21. · Część3 OpenMP MaciejJ.Mrowiński mrow@if.pw.edu.pl Wydział Fizyki Politechnika Warszawska 21grudnia2018](https://reader035.vdocuments.net/reader035/viewer/2022071218/605000f03dd69a2ab11a29fa/html5/thumbnails/5.jpg)
Hello World - #pragma omp parallel
HelloOpenMP 1HelloOpenMP 0HelloOpenMP 2HelloOpenMP 6HelloOpenMP 5HelloOpenMP 4HelloOpenMP 3HelloOpenMP 7
![Page 6: Czesc 3 OpenMPmrow/dyd/files/wdprir-part03.pdf · 2018. 12. 21. · Część3 OpenMP MaciejJ.Mrowiński mrow@if.pw.edu.pl Wydział Fizyki Politechnika Warszawska 21grudnia2018](https://reader035.vdocuments.net/reader035/viewer/2022071218/605000f03dd69a2ab11a29fa/html5/thumbnails/6.jpg)
Współdzielenie pracy
Współdzielenie pracy
![Page 7: Czesc 3 OpenMPmrow/dyd/files/wdprir-part03.pdf · 2018. 12. 21. · Część3 OpenMP MaciejJ.Mrowiński mrow@if.pw.edu.pl Wydział Fizyki Politechnika Warszawska 21grudnia2018](https://reader035.vdocuments.net/reader035/viewer/2022071218/605000f03dd69a2ab11a29fa/html5/thumbnails/7.jpg)
Współdzielenie pracy - przykład prostacki
1 #pragma omp parallel2 {3 if(omp_get_thread_num () == 2)4 printf("HelloOpenMP %d\n", omp_get_thread_num ());5 if(omp_get_thread_num () == 4)6 printf("HelloOpenMP %d\n", omp_get_thread_num ());7 }
![Page 8: Czesc 3 OpenMPmrow/dyd/files/wdprir-part03.pdf · 2018. 12. 21. · Część3 OpenMP MaciejJ.Mrowiński mrow@if.pw.edu.pl Wydział Fizyki Politechnika Warszawska 21grudnia2018](https://reader035.vdocuments.net/reader035/viewer/2022071218/605000f03dd69a2ab11a29fa/html5/thumbnails/8.jpg)
Współdzielenie pracy - przykład prostacki
HelloOpenMP 2HelloOpenMP 4
![Page 9: Czesc 3 OpenMPmrow/dyd/files/wdprir-part03.pdf · 2018. 12. 21. · Część3 OpenMP MaciejJ.Mrowiński mrow@if.pw.edu.pl Wydział Fizyki Politechnika Warszawska 21grudnia2018](https://reader035.vdocuments.net/reader035/viewer/2022071218/605000f03dd69a2ab11a29fa/html5/thumbnails/9.jpg)
Współdzielenie pracy - sections
1 #pragma omp parallel2 {3 #pragma omp sections4 {5 #pragma omp section6 printf("Section 1 - %d\n", omp_get_thread_num ());7 #pragma omp section8 printf("Section 2 - %d\n", omp_get_thread_num ());9 }
10 }
![Page 10: Czesc 3 OpenMPmrow/dyd/files/wdprir-part03.pdf · 2018. 12. 21. · Część3 OpenMP MaciejJ.Mrowiński mrow@if.pw.edu.pl Wydział Fizyki Politechnika Warszawska 21grudnia2018](https://reader035.vdocuments.net/reader035/viewer/2022071218/605000f03dd69a2ab11a29fa/html5/thumbnails/10.jpg)
Współdzielenie pracy - sections
Section 1 - 1Section 2 - 2
![Page 11: Czesc 3 OpenMPmrow/dyd/files/wdprir-part03.pdf · 2018. 12. 21. · Część3 OpenMP MaciejJ.Mrowiński mrow@if.pw.edu.pl Wydział Fizyki Politechnika Warszawska 21grudnia2018](https://reader035.vdocuments.net/reader035/viewer/2022071218/605000f03dd69a2ab11a29fa/html5/thumbnails/11.jpg)
Współdzielenie pracy - sections
1 #pragma omp parallel sections2 {3 #pragma omp section4 printf("Section 1 - %d\n", omp_get_thread_num ());5 #pragma omp section6 printf("Section 2 - %d\n", omp_get_thread_num ());7 }
![Page 12: Czesc 3 OpenMPmrow/dyd/files/wdprir-part03.pdf · 2018. 12. 21. · Część3 OpenMP MaciejJ.Mrowiński mrow@if.pw.edu.pl Wydział Fizyki Politechnika Warszawska 21grudnia2018](https://reader035.vdocuments.net/reader035/viewer/2022071218/605000f03dd69a2ab11a29fa/html5/thumbnails/12.jpg)
Współdzielenie pracy - single
1 #pragma omp parallel2 {3 #pragma omp single4 printf("Single - %d\n", omp_get_thread_num ());56 printf("Parallel - %d\n", omp_get_thread_num ());7 }
![Page 13: Czesc 3 OpenMPmrow/dyd/files/wdprir-part03.pdf · 2018. 12. 21. · Część3 OpenMP MaciejJ.Mrowiński mrow@if.pw.edu.pl Wydział Fizyki Politechnika Warszawska 21grudnia2018](https://reader035.vdocuments.net/reader035/viewer/2022071218/605000f03dd69a2ab11a29fa/html5/thumbnails/13.jpg)
Współdzielenie pracy - single
Single - 1Parallel - 3Parallel - 4Parallel - 6Parallel - 5Parallel - 2Parallel - 1Parallel - 0Parallel - 7
![Page 14: Czesc 3 OpenMPmrow/dyd/files/wdprir-part03.pdf · 2018. 12. 21. · Część3 OpenMP MaciejJ.Mrowiński mrow@if.pw.edu.pl Wydział Fizyki Politechnika Warszawska 21grudnia2018](https://reader035.vdocuments.net/reader035/viewer/2022071218/605000f03dd69a2ab11a29fa/html5/thumbnails/14.jpg)
Współdzielenie pracy - for
1 int i;2 int n = 10;34 #pragma omp parallel private(i) shared(n)5 {6 #pragma omp for7 for(i = 0; i < n; ++i)8 printf("HelloOpenMP %d - %d\n", i, omp_get_thread_num ());9 }
![Page 15: Czesc 3 OpenMPmrow/dyd/files/wdprir-part03.pdf · 2018. 12. 21. · Część3 OpenMP MaciejJ.Mrowiński mrow@if.pw.edu.pl Wydział Fizyki Politechnika Warszawska 21grudnia2018](https://reader035.vdocuments.net/reader035/viewer/2022071218/605000f03dd69a2ab11a29fa/html5/thumbnails/15.jpg)
Współdzielenie pracy - for
HelloOpenMP 2 - 1HelloOpenMP 7 - 5HelloOpenMP 3 - 1HelloOpenMP 8 - 6HelloOpenMP 0 - 0HelloOpenMP 4 - 2HelloOpenMP 1 - 0HelloOpenMP 5 - 3HelloOpenMP 6 - 4HelloOpenMP 9 - 7
![Page 16: Czesc 3 OpenMPmrow/dyd/files/wdprir-part03.pdf · 2018. 12. 21. · Część3 OpenMP MaciejJ.Mrowiński mrow@if.pw.edu.pl Wydział Fizyki Politechnika Warszawska 21grudnia2018](https://reader035.vdocuments.net/reader035/viewer/2022071218/605000f03dd69a2ab11a29fa/html5/thumbnails/16.jpg)
Współdzielenie pracy - for
1 int i;2 int n = 10;34 #pragma omp parallel5 {6 #pragma omp for7 for(i = 0; i < n; ++i)8 printf("HelloOpenMP %d - %d\n", i, omp_get_thread_num ());9 }
![Page 17: Czesc 3 OpenMPmrow/dyd/files/wdprir-part03.pdf · 2018. 12. 21. · Część3 OpenMP MaciejJ.Mrowiński mrow@if.pw.edu.pl Wydział Fizyki Politechnika Warszawska 21grudnia2018](https://reader035.vdocuments.net/reader035/viewer/2022071218/605000f03dd69a2ab11a29fa/html5/thumbnails/17.jpg)
Współdzielenie pracy - for
1 int n = 10;23 #pragma omp parallel4 {5 #pragma omp for6 for(int i = 0; i < n; ++i)7 printf("HelloOpenMP %d - %d\n", i, omp_get_thread_num ());8 }
![Page 18: Czesc 3 OpenMPmrow/dyd/files/wdprir-part03.pdf · 2018. 12. 21. · Część3 OpenMP MaciejJ.Mrowiński mrow@if.pw.edu.pl Wydział Fizyki Politechnika Warszawska 21grudnia2018](https://reader035.vdocuments.net/reader035/viewer/2022071218/605000f03dd69a2ab11a29fa/html5/thumbnails/18.jpg)
Współdzielenie pracy - for
1 int n = 10;23 #pragma omp parallel for4 for(i = 0; i < n; ++i)5 printf("HelloOpenMP %d - %d\n", i, omp_get_thread_num ());
![Page 19: Czesc 3 OpenMPmrow/dyd/files/wdprir-part03.pdf · 2018. 12. 21. · Część3 OpenMP MaciejJ.Mrowiński mrow@if.pw.edu.pl Wydział Fizyki Politechnika Warszawska 21grudnia2018](https://reader035.vdocuments.net/reader035/viewer/2022071218/605000f03dd69a2ab11a29fa/html5/thumbnails/19.jpg)
Inne ważne #pragma
Inne ważne #pragma
![Page 20: Czesc 3 OpenMPmrow/dyd/files/wdprir-part03.pdf · 2018. 12. 21. · Część3 OpenMP MaciejJ.Mrowiński mrow@if.pw.edu.pl Wydział Fizyki Politechnika Warszawska 21grudnia2018](https://reader035.vdocuments.net/reader035/viewer/2022071218/605000f03dd69a2ab11a29fa/html5/thumbnails/20.jpg)
Inne ważne pragma - barrier
1 void functionA ()2 {3 int sum = 0;4 for(int i = 0; i < 1000000; ++i)5 ++sum;67 printf("%d: function A done!\n", omp_get_thread_num ());8 }9
10 void functionB ()11 {12 int sum = 0;13 for(int i = 0; i < 1000000; ++i)14 ++sum;1516 printf("%d: function B done!\n", omp_get_thread_num ());17 }1819 int main(int argc , char *argv [])20 {21 #pragma omp parallel22 {23 functionA ();2425 functionB ();26 }27 return 0;28 }
![Page 21: Czesc 3 OpenMPmrow/dyd/files/wdprir-part03.pdf · 2018. 12. 21. · Część3 OpenMP MaciejJ.Mrowiński mrow@if.pw.edu.pl Wydział Fizyki Politechnika Warszawska 21grudnia2018](https://reader035.vdocuments.net/reader035/viewer/2022071218/605000f03dd69a2ab11a29fa/html5/thumbnails/21.jpg)
Inne ważne pragma - barrier
4: function A done!0: function A done!1: function A done!3: function A done!2: function A done!5: function A done!6: function A done!4: function B done!0: function B done!1: function B done!3: function B done!7: function A done!2: function B done!5: function B done!6: function B done!7: function B done!
![Page 22: Czesc 3 OpenMPmrow/dyd/files/wdprir-part03.pdf · 2018. 12. 21. · Część3 OpenMP MaciejJ.Mrowiński mrow@if.pw.edu.pl Wydział Fizyki Politechnika Warszawska 21grudnia2018](https://reader035.vdocuments.net/reader035/viewer/2022071218/605000f03dd69a2ab11a29fa/html5/thumbnails/22.jpg)
Inne ważne pragma - barrier
1 void functionA ()2 {3 int sum = 0;4 for(int i = 0; i < 1000000; ++i)5 ++sum;67 printf("%d: function A done!\n", omp_get_thread_num ());8 }9
10 void functionB ()11 {12 int sum = 0;13 for(int i = 0; i < 1000000; ++i)14 ++sum;1516 printf("%d: function B done!\n", omp_get_thread_num ());17 }1819 int main(int argc , char *argv [])20 {21 #pragma omp parallel22 {23 functionA ();24 #pragma omp barrier25 functionB ();26 }27 return 0;28 }
![Page 23: Czesc 3 OpenMPmrow/dyd/files/wdprir-part03.pdf · 2018. 12. 21. · Część3 OpenMP MaciejJ.Mrowiński mrow@if.pw.edu.pl Wydział Fizyki Politechnika Warszawska 21grudnia2018](https://reader035.vdocuments.net/reader035/viewer/2022071218/605000f03dd69a2ab11a29fa/html5/thumbnails/23.jpg)
Inne ważne pragma - barrier
1: function A done!6: function A done!5: function A done!4: function A done!7: function A done!3: function A done!2: function A done!0: function A done!7: function B done!1: function B done!2: function B done!6: function B done!0: function B done!3: function B done!4: function B done!5: function B done!
![Page 24: Czesc 3 OpenMPmrow/dyd/files/wdprir-part03.pdf · 2018. 12. 21. · Część3 OpenMP MaciejJ.Mrowiński mrow@if.pw.edu.pl Wydział Fizyki Politechnika Warszawska 21grudnia2018](https://reader035.vdocuments.net/reader035/viewer/2022071218/605000f03dd69a2ab11a29fa/html5/thumbnails/24.jpg)
Inne ważne pragma - atomic
1 int counter = 0;2 int n = 1000000;3 #pragma omp parallel for4 for(int i = 0; i < n; ++i)5 {6 ++ counter;7 }89 printf("Counter: %d\n", counter);
![Page 25: Czesc 3 OpenMPmrow/dyd/files/wdprir-part03.pdf · 2018. 12. 21. · Część3 OpenMP MaciejJ.Mrowiński mrow@if.pw.edu.pl Wydział Fizyki Politechnika Warszawska 21grudnia2018](https://reader035.vdocuments.net/reader035/viewer/2022071218/605000f03dd69a2ab11a29fa/html5/thumbnails/25.jpg)
Inne ważne pragma - atomic
Counter: 141559
![Page 26: Czesc 3 OpenMPmrow/dyd/files/wdprir-part03.pdf · 2018. 12. 21. · Część3 OpenMP MaciejJ.Mrowiński mrow@if.pw.edu.pl Wydział Fizyki Politechnika Warszawska 21grudnia2018](https://reader035.vdocuments.net/reader035/viewer/2022071218/605000f03dd69a2ab11a29fa/html5/thumbnails/26.jpg)
Inne ważne pragma - atomic
1 int counter = 0;2 int n = 1000000;3 #pragma omp parallel for4 for(int i = 0; i < n; ++i)5 {6 #pragma omp atomic7 ++ counter;8 }9
10 printf("Counter: %d\n", counter);
![Page 27: Czesc 3 OpenMPmrow/dyd/files/wdprir-part03.pdf · 2018. 12. 21. · Część3 OpenMP MaciejJ.Mrowiński mrow@if.pw.edu.pl Wydział Fizyki Politechnika Warszawska 21grudnia2018](https://reader035.vdocuments.net/reader035/viewer/2022071218/605000f03dd69a2ab11a29fa/html5/thumbnails/27.jpg)
Inne ważne pragma - atomic
Counter: 1000000
![Page 28: Czesc 3 OpenMPmrow/dyd/files/wdprir-part03.pdf · 2018. 12. 21. · Część3 OpenMP MaciejJ.Mrowiński mrow@if.pw.edu.pl Wydział Fizyki Politechnika Warszawska 21grudnia2018](https://reader035.vdocuments.net/reader035/viewer/2022071218/605000f03dd69a2ab11a29fa/html5/thumbnails/28.jpg)
Inne ważne pragma - critical
1 int sum = 0;2 int n = 1000000;34 int* array = malloc(n * sizeof(int));5 for(int i = 0; i < n; ++i)6 array[i] = 1;789
10 #pragma omp parallel11 {12 int localSum = 0;1314 #pragma omp for15 for(int i = 0; i < n; ++i)16 {17 localSum += array[i];18 }1920 sum += localSum;21 }2223 printf("Sum: %d\n", sum);2425 free(array);
![Page 29: Czesc 3 OpenMPmrow/dyd/files/wdprir-part03.pdf · 2018. 12. 21. · Część3 OpenMP MaciejJ.Mrowiński mrow@if.pw.edu.pl Wydział Fizyki Politechnika Warszawska 21grudnia2018](https://reader035.vdocuments.net/reader035/viewer/2022071218/605000f03dd69a2ab11a29fa/html5/thumbnails/29.jpg)
Inne ważne pragma - critical
Sum: 875000
![Page 30: Czesc 3 OpenMPmrow/dyd/files/wdprir-part03.pdf · 2018. 12. 21. · Część3 OpenMP MaciejJ.Mrowiński mrow@if.pw.edu.pl Wydział Fizyki Politechnika Warszawska 21grudnia2018](https://reader035.vdocuments.net/reader035/viewer/2022071218/605000f03dd69a2ab11a29fa/html5/thumbnails/30.jpg)
Inne ważne pragma - critical
1 int sum = 0;2 int n = 1000000;34 int* array = malloc(n * sizeof(int));5 for(int i = 0; i < n; ++i)6 array[i] = 1;789
10 #pragma omp parallel11 {12 int localSum = 0;1314 #pragma omp for15 for(int i = 0; i < n; ++i)16 {17 localSum += array[i];18 }1920 #pragma omp critical (update_sum)21 sum += localSum;22 }2324 printf("Sum: %d\n", sum);2526 free(array);
![Page 31: Czesc 3 OpenMPmrow/dyd/files/wdprir-part03.pdf · 2018. 12. 21. · Część3 OpenMP MaciejJ.Mrowiński mrow@if.pw.edu.pl Wydział Fizyki Politechnika Warszawska 21grudnia2018](https://reader035.vdocuments.net/reader035/viewer/2022071218/605000f03dd69a2ab11a29fa/html5/thumbnails/31.jpg)
Inne ważne pragma - critical
Sum: 1000000
![Page 32: Czesc 3 OpenMPmrow/dyd/files/wdprir-part03.pdf · 2018. 12. 21. · Część3 OpenMP MaciejJ.Mrowiński mrow@if.pw.edu.pl Wydział Fizyki Politechnika Warszawska 21grudnia2018](https://reader035.vdocuments.net/reader035/viewer/2022071218/605000f03dd69a2ab11a29fa/html5/thumbnails/32.jpg)
Clauses
Clauses
![Page 33: Czesc 3 OpenMPmrow/dyd/files/wdprir-part03.pdf · 2018. 12. 21. · Część3 OpenMP MaciejJ.Mrowiński mrow@if.pw.edu.pl Wydział Fizyki Politechnika Warszawska 21grudnia2018](https://reader035.vdocuments.net/reader035/viewer/2022071218/605000f03dd69a2ab11a29fa/html5/thumbnails/33.jpg)
Clauses - parallel
I if(scalar-expression)I num_threads(integer-expression)I private(list)I firstprivate(list)I shared(list)I default(none|shared)I copyin(list)I reduction(operator:list)
![Page 34: Czesc 3 OpenMPmrow/dyd/files/wdprir-part03.pdf · 2018. 12. 21. · Część3 OpenMP MaciejJ.Mrowiński mrow@if.pw.edu.pl Wydział Fizyki Politechnika Warszawska 21grudnia2018](https://reader035.vdocuments.net/reader035/viewer/2022071218/605000f03dd69a2ab11a29fa/html5/thumbnails/34.jpg)
Clauses - for
I private(list)I firstprivate(list)I lastprivate(list)I reduction(operator:list)I orderedI schedule(kind[,chunk size)]I nowait
![Page 35: Czesc 3 OpenMPmrow/dyd/files/wdprir-part03.pdf · 2018. 12. 21. · Część3 OpenMP MaciejJ.Mrowiński mrow@if.pw.edu.pl Wydział Fizyki Politechnika Warszawska 21grudnia2018](https://reader035.vdocuments.net/reader035/viewer/2022071218/605000f03dd69a2ab11a29fa/html5/thumbnails/35.jpg)
Clauses - sections
I private(list)I firstprivate(list)I lastprivate(list)I reduction(operator:list)I nowait
![Page 36: Czesc 3 OpenMPmrow/dyd/files/wdprir-part03.pdf · 2018. 12. 21. · Część3 OpenMP MaciejJ.Mrowiński mrow@if.pw.edu.pl Wydział Fizyki Politechnika Warszawska 21grudnia2018](https://reader035.vdocuments.net/reader035/viewer/2022071218/605000f03dd69a2ab11a29fa/html5/thumbnails/36.jpg)
Clauses - num_threads
1 int n = 10;23 #pragma omp parallel for num_threads (2)4 for(i = 0; i < n; ++i)5 printf("HelloOpenMP %d - %d\n", i, omp_get_thread_num ());
![Page 37: Czesc 3 OpenMPmrow/dyd/files/wdprir-part03.pdf · 2018. 12. 21. · Część3 OpenMP MaciejJ.Mrowiński mrow@if.pw.edu.pl Wydział Fizyki Politechnika Warszawska 21grudnia2018](https://reader035.vdocuments.net/reader035/viewer/2022071218/605000f03dd69a2ab11a29fa/html5/thumbnails/37.jpg)
Clauses - num_threads
HelloOpenMP 0 - 0HelloOpenMP 5 - 1HelloOpenMP 6 - 1HelloOpenMP 7 - 1HelloOpenMP 8 - 1HelloOpenMP 9 - 1HelloOpenMP 1 - 0HelloOpenMP 2 - 0HelloOpenMP 3 - 0HelloOpenMP 4 - 0
![Page 38: Czesc 3 OpenMPmrow/dyd/files/wdprir-part03.pdf · 2018. 12. 21. · Część3 OpenMP MaciejJ.Mrowiński mrow@if.pw.edu.pl Wydział Fizyki Politechnika Warszawska 21grudnia2018](https://reader035.vdocuments.net/reader035/viewer/2022071218/605000f03dd69a2ab11a29fa/html5/thumbnails/38.jpg)
Clauses - if
1 int n = 4;23 #pragma omp parallel for if(n > 5)4 for(int i = 0; i < n; ++i)5 printf("HelloOpenMP %d - %d\n", i, omp_get_thread_num ());
![Page 39: Czesc 3 OpenMPmrow/dyd/files/wdprir-part03.pdf · 2018. 12. 21. · Część3 OpenMP MaciejJ.Mrowiński mrow@if.pw.edu.pl Wydział Fizyki Politechnika Warszawska 21grudnia2018](https://reader035.vdocuments.net/reader035/viewer/2022071218/605000f03dd69a2ab11a29fa/html5/thumbnails/39.jpg)
Clauses - if
HelloOpenMP 0 - 0HelloOpenMP 1 - 0HelloOpenMP 2 - 0HelloOpenMP 3 - 0
![Page 40: Czesc 3 OpenMPmrow/dyd/files/wdprir-part03.pdf · 2018. 12. 21. · Część3 OpenMP MaciejJ.Mrowiński mrow@if.pw.edu.pl Wydział Fizyki Politechnika Warszawska 21grudnia2018](https://reader035.vdocuments.net/reader035/viewer/2022071218/605000f03dd69a2ab11a29fa/html5/thumbnails/40.jpg)
Clauses - firstprivate
1 int n = 10;2 #pragma omp parallel private(n)3 {4 printf("HelloOpenMP %d\n", n);5 }
![Page 41: Czesc 3 OpenMPmrow/dyd/files/wdprir-part03.pdf · 2018. 12. 21. · Część3 OpenMP MaciejJ.Mrowiński mrow@if.pw.edu.pl Wydział Fizyki Politechnika Warszawska 21grudnia2018](https://reader035.vdocuments.net/reader035/viewer/2022071218/605000f03dd69a2ab11a29fa/html5/thumbnails/41.jpg)
Clauses - firstprivate
HelloOpenMP 0HelloOpenMP 4199585HelloOpenMP 0HelloOpenMP 0HelloOpenMP 0HelloOpenMP 0HelloOpenMP 0HelloOpenMP 0
![Page 42: Czesc 3 OpenMPmrow/dyd/files/wdprir-part03.pdf · 2018. 12. 21. · Część3 OpenMP MaciejJ.Mrowiński mrow@if.pw.edu.pl Wydział Fizyki Politechnika Warszawska 21grudnia2018](https://reader035.vdocuments.net/reader035/viewer/2022071218/605000f03dd69a2ab11a29fa/html5/thumbnails/42.jpg)
Clauses - firstprivate
1 int n = 10;2 #pragma omp parallel firstprivate(n)3 {4 printf("HelloOpenMP %d\n", n);5 }
![Page 43: Czesc 3 OpenMPmrow/dyd/files/wdprir-part03.pdf · 2018. 12. 21. · Część3 OpenMP MaciejJ.Mrowiński mrow@if.pw.edu.pl Wydział Fizyki Politechnika Warszawska 21grudnia2018](https://reader035.vdocuments.net/reader035/viewer/2022071218/605000f03dd69a2ab11a29fa/html5/thumbnails/43.jpg)
Clauses - firstprivate
HelloOpenMP 10HelloOpenMP 10HelloOpenMP 10HelloOpenMP 10HelloOpenMP 10HelloOpenMP 10HelloOpenMP 10HelloOpenMP 10
![Page 44: Czesc 3 OpenMPmrow/dyd/files/wdprir-part03.pdf · 2018. 12. 21. · Część3 OpenMP MaciejJ.Mrowiński mrow@if.pw.edu.pl Wydział Fizyki Politechnika Warszawska 21grudnia2018](https://reader035.vdocuments.net/reader035/viewer/2022071218/605000f03dd69a2ab11a29fa/html5/thumbnails/44.jpg)
Clauses - lastprivate
1 int i;2 int n = 10;3 #pragma omp parallel for private(i) shared(n)4 for(i = 0; i < n; ++i)5 printf("HelloOpenMP %d - %d\n", i, omp_get_thread_num ());67 printf("After loop: %d\n", i);
![Page 45: Czesc 3 OpenMPmrow/dyd/files/wdprir-part03.pdf · 2018. 12. 21. · Część3 OpenMP MaciejJ.Mrowiński mrow@if.pw.edu.pl Wydział Fizyki Politechnika Warszawska 21grudnia2018](https://reader035.vdocuments.net/reader035/viewer/2022071218/605000f03dd69a2ab11a29fa/html5/thumbnails/45.jpg)
Clauses - lastprivate
HelloOpenMP 2 - 1HelloOpenMP 7 - 5HelloOpenMP 3 - 1HelloOpenMP 4 - 2HelloOpenMP 0 - 0HelloOpenMP 6 - 4HelloOpenMP 9 - 7HelloOpenMP 5 - 3HelloOpenMP 8 - 6HelloOpenMP 1 - 0After loop: 2147344384
![Page 46: Czesc 3 OpenMPmrow/dyd/files/wdprir-part03.pdf · 2018. 12. 21. · Część3 OpenMP MaciejJ.Mrowiński mrow@if.pw.edu.pl Wydział Fizyki Politechnika Warszawska 21grudnia2018](https://reader035.vdocuments.net/reader035/viewer/2022071218/605000f03dd69a2ab11a29fa/html5/thumbnails/46.jpg)
Clauses - lastprivate
1 int i;2 int n = 10;3 #pragma omp parallel for lastprivate(i) shared(n)4 for(i = 0; i < n; ++i)5 printf("HelloOpenMP %d - %d\n", i, omp_get_thread_num ());67 printf("After loop: %d\n", i);
![Page 47: Czesc 3 OpenMPmrow/dyd/files/wdprir-part03.pdf · 2018. 12. 21. · Część3 OpenMP MaciejJ.Mrowiński mrow@if.pw.edu.pl Wydział Fizyki Politechnika Warszawska 21grudnia2018](https://reader035.vdocuments.net/reader035/viewer/2022071218/605000f03dd69a2ab11a29fa/html5/thumbnails/47.jpg)
Clauses - lastprivate
HelloOpenMP 2 - 1HelloOpenMP 0 - 0HelloOpenMP 3 - 1HelloOpenMP 1 - 0HelloOpenMP 8 - 6HelloOpenMP 5 - 3HelloOpenMP 7 - 5HelloOpenMP 6 - 4HelloOpenMP 4 - 2HelloOpenMP 9 - 7After loop: 10
![Page 48: Czesc 3 OpenMPmrow/dyd/files/wdprir-part03.pdf · 2018. 12. 21. · Część3 OpenMP MaciejJ.Mrowiński mrow@if.pw.edu.pl Wydział Fizyki Politechnika Warszawska 21grudnia2018](https://reader035.vdocuments.net/reader035/viewer/2022071218/605000f03dd69a2ab11a29fa/html5/thumbnails/48.jpg)
Clauses - reduction
1 int sum = 0;2 int n = 1000000;34 int* array = malloc(n * sizeof(int));5 for(int i = 0; i < n; ++i)6 array[i] = 1;78 #pragma omp parallel for reduction (+:sum)9 for(int i = 0; i < n; ++i)
10 sum += array[i];1112 printf("Sum: %d\n", sum);1314 free(array);
![Page 49: Czesc 3 OpenMPmrow/dyd/files/wdprir-part03.pdf · 2018. 12. 21. · Część3 OpenMP MaciejJ.Mrowiński mrow@if.pw.edu.pl Wydział Fizyki Politechnika Warszawska 21grudnia2018](https://reader035.vdocuments.net/reader035/viewer/2022071218/605000f03dd69a2ab11a29fa/html5/thumbnails/49.jpg)
Clauses - reduction
Sum: 1000000
![Page 50: Czesc 3 OpenMPmrow/dyd/files/wdprir-part03.pdf · 2018. 12. 21. · Część3 OpenMP MaciejJ.Mrowiński mrow@if.pw.edu.pl Wydział Fizyki Politechnika Warszawska 21grudnia2018](https://reader035.vdocuments.net/reader035/viewer/2022071218/605000f03dd69a2ab11a29fa/html5/thumbnails/50.jpg)
Clauses - schedule
1 int sum = 0;2 int n = 10;34 int* array = malloc(n * sizeof(int));5 for(int i = 0; i < n; ++i)6 array[i] = 1;78 #pragma omp parallel for num_threads (3) reduction (+:sum) schedule(static , 2)9 for(int i = 0; i < n; ++i)
10 {11 printf("%d - %d\n", omp_get_thread_num (), i);12 sum += array[i];13 }1415 printf("Sum: %d\n", sum);1617 free(array);
![Page 51: Czesc 3 OpenMPmrow/dyd/files/wdprir-part03.pdf · 2018. 12. 21. · Część3 OpenMP MaciejJ.Mrowiński mrow@if.pw.edu.pl Wydział Fizyki Politechnika Warszawska 21grudnia2018](https://reader035.vdocuments.net/reader035/viewer/2022071218/605000f03dd69a2ab11a29fa/html5/thumbnails/51.jpg)
Clauses - schedule
1 - 21 - 31 - 81 - 90 - 00 - 10 - 60 - 72 - 42 - 5Sum: 10
![Page 52: Czesc 3 OpenMPmrow/dyd/files/wdprir-part03.pdf · 2018. 12. 21. · Część3 OpenMP MaciejJ.Mrowiński mrow@if.pw.edu.pl Wydział Fizyki Politechnika Warszawska 21grudnia2018](https://reader035.vdocuments.net/reader035/viewer/2022071218/605000f03dd69a2ab11a29fa/html5/thumbnails/52.jpg)
Clauses - schedule
1 int sum = 0;2 int n = 10;34 int* array = malloc(n * sizeof(int));5 for(int i = 0; i < n; ++i)6 array[i] = 1;78 #pragma omp parallel for num_threads (3) reduction (+:sum) schedule(dynamic , 2)9 for(int i = 0; i < n; ++i)
10 {11 printf("%d - %d\n", omp_get_thread_num (), i);12 sum += array[i];13 }1415 printf("Sum: %d\n", sum);1617 free(array);
![Page 53: Czesc 3 OpenMPmrow/dyd/files/wdprir-part03.pdf · 2018. 12. 21. · Część3 OpenMP MaciejJ.Mrowiński mrow@if.pw.edu.pl Wydział Fizyki Politechnika Warszawska 21grudnia2018](https://reader035.vdocuments.net/reader035/viewer/2022071218/605000f03dd69a2ab11a29fa/html5/thumbnails/53.jpg)
Clauses - schedule
1 - 01 - 12 - 22 - 30 - 40 - 51 - 61 - 70 - 80 - 9Sum: 10
![Page 54: Czesc 3 OpenMPmrow/dyd/files/wdprir-part03.pdf · 2018. 12. 21. · Część3 OpenMP MaciejJ.Mrowiński mrow@if.pw.edu.pl Wydział Fizyki Politechnika Warszawska 21grudnia2018](https://reader035.vdocuments.net/reader035/viewer/2022071218/605000f03dd69a2ab11a29fa/html5/thumbnails/54.jpg)
Locks
1 int sum = 0;2 int n = 1000000;34 int* array = malloc(n * sizeof(int));5 for(int i = 0; i < n; ++i)6 array[i] = 1;78 #pragma omp parallel9 {
10 int localSum = 0;1112 #pragma omp for13 for(int i = 0; i < n; ++i)14 {15 localSum += array[i];16 }1718 sum += localSum;19 }2021 printf("Sum: %d\n", sum);2223 free(array);
![Page 55: Czesc 3 OpenMPmrow/dyd/files/wdprir-part03.pdf · 2018. 12. 21. · Część3 OpenMP MaciejJ.Mrowiński mrow@if.pw.edu.pl Wydział Fizyki Politechnika Warszawska 21grudnia2018](https://reader035.vdocuments.net/reader035/viewer/2022071218/605000f03dd69a2ab11a29fa/html5/thumbnails/55.jpg)
Clauses - schedule
Sum: 875000
![Page 56: Czesc 3 OpenMPmrow/dyd/files/wdprir-part03.pdf · 2018. 12. 21. · Część3 OpenMP MaciejJ.Mrowiński mrow@if.pw.edu.pl Wydział Fizyki Politechnika Warszawska 21grudnia2018](https://reader035.vdocuments.net/reader035/viewer/2022071218/605000f03dd69a2ab11a29fa/html5/thumbnails/56.jpg)
Locks
I void omp_init_lock (omp_lock_t *)I void omp_init_lock_with_hint (omp_lock_t *,
omp_lock_hint_t)I void omp_destroy_lock (omp_lock_t *)I void omp_set_lock (omp_lock_t *)I void omp_unset_lock (omp_lock_t *);I int omp_test_lock (omp_lock_t *)I void omp_init_nest_lock (omp_nest_lock_t )I . . .
![Page 57: Czesc 3 OpenMPmrow/dyd/files/wdprir-part03.pdf · 2018. 12. 21. · Część3 OpenMP MaciejJ.Mrowiński mrow@if.pw.edu.pl Wydział Fizyki Politechnika Warszawska 21grudnia2018](https://reader035.vdocuments.net/reader035/viewer/2022071218/605000f03dd69a2ab11a29fa/html5/thumbnails/57.jpg)
Locks - hints
I omp_lock_hint_none = 0,I omp_lock_hint_uncontended = 1I omp_lock_hint_contended = 2I omp_lock_hint_nonspeculative = 4I omp_lock_hint_speculative = 8I . . .
![Page 58: Czesc 3 OpenMPmrow/dyd/files/wdprir-part03.pdf · 2018. 12. 21. · Część3 OpenMP MaciejJ.Mrowiński mrow@if.pw.edu.pl Wydział Fizyki Politechnika Warszawska 21grudnia2018](https://reader035.vdocuments.net/reader035/viewer/2022071218/605000f03dd69a2ab11a29fa/html5/thumbnails/58.jpg)
Locks
1 int sum = 0;2 int n = 1000000;34 int* array = malloc(n * sizeof(int));5 for(int i = 0; i < n; ++i)6 array[i] = 1;78 omp_lock_t lock;9 omp_init_lock (&lock);
1011 #pragma omp parallel12 {13 int localSum = 0;1415 #pragma omp for16 for(int i = 0; i < n; ++i)17 {18 localSum += array[i];19 }2021 omp_set_lock (&lock);22 sum += localSum;23 omp_unset_lock (&lock);24 }2526 omp_destroy_lock (&lock);2728 printf("Sum: %d\n", sum);2930 free(array);
![Page 59: Czesc 3 OpenMPmrow/dyd/files/wdprir-part03.pdf · 2018. 12. 21. · Część3 OpenMP MaciejJ.Mrowiński mrow@if.pw.edu.pl Wydział Fizyki Politechnika Warszawska 21grudnia2018](https://reader035.vdocuments.net/reader035/viewer/2022071218/605000f03dd69a2ab11a29fa/html5/thumbnails/59.jpg)
Clauses - schedule
Sum: 1000000
![Page 60: Czesc 3 OpenMPmrow/dyd/files/wdprir-part03.pdf · 2018. 12. 21. · Część3 OpenMP MaciejJ.Mrowiński mrow@if.pw.edu.pl Wydział Fizyki Politechnika Warszawska 21grudnia2018](https://reader035.vdocuments.net/reader035/viewer/2022071218/605000f03dd69a2ab11a29fa/html5/thumbnails/60.jpg)
Tasks
1 #pragma omp parallel2 {3 #pragma omp single4 {5 #pragma omp task6 printf("Jan ");7 #pragma omp task8 printf("Kowalski ");9 }
10 }
![Page 61: Czesc 3 OpenMPmrow/dyd/files/wdprir-part03.pdf · 2018. 12. 21. · Część3 OpenMP MaciejJ.Mrowiński mrow@if.pw.edu.pl Wydział Fizyki Politechnika Warszawska 21grudnia2018](https://reader035.vdocuments.net/reader035/viewer/2022071218/605000f03dd69a2ab11a29fa/html5/thumbnails/61.jpg)
Tasks
Jan Kowalski
![Page 62: Czesc 3 OpenMPmrow/dyd/files/wdprir-part03.pdf · 2018. 12. 21. · Część3 OpenMP MaciejJ.Mrowiński mrow@if.pw.edu.pl Wydział Fizyki Politechnika Warszawska 21grudnia2018](https://reader035.vdocuments.net/reader035/viewer/2022071218/605000f03dd69a2ab11a29fa/html5/thumbnails/62.jpg)
Tasks
1 #pragma omp parallel2 {3 #pragma omp single4 {5 printf("Ten ");6 #pragma omp task7 printf("Jan ");8 #pragma omp task9 printf("Kowalski ");
10 }11 }
![Page 63: Czesc 3 OpenMPmrow/dyd/files/wdprir-part03.pdf · 2018. 12. 21. · Część3 OpenMP MaciejJ.Mrowiński mrow@if.pw.edu.pl Wydział Fizyki Politechnika Warszawska 21grudnia2018](https://reader035.vdocuments.net/reader035/viewer/2022071218/605000f03dd69a2ab11a29fa/html5/thumbnails/63.jpg)
Tasks
Ten Jan Kowalski
![Page 64: Czesc 3 OpenMPmrow/dyd/files/wdprir-part03.pdf · 2018. 12. 21. · Część3 OpenMP MaciejJ.Mrowiński mrow@if.pw.edu.pl Wydział Fizyki Politechnika Warszawska 21grudnia2018](https://reader035.vdocuments.net/reader035/viewer/2022071218/605000f03dd69a2ab11a29fa/html5/thumbnails/64.jpg)
Tasks
1 #pragma omp parallel2 {3 #pragma omp single4 {5 printf("Ten ");6 #pragma omp task7 printf("Jan ");8 #pragma omp task9 printf("Kowalski ");
10 printf("to kawal drania! ");11 }12 }
![Page 65: Czesc 3 OpenMPmrow/dyd/files/wdprir-part03.pdf · 2018. 12. 21. · Część3 OpenMP MaciejJ.Mrowiński mrow@if.pw.edu.pl Wydział Fizyki Politechnika Warszawska 21grudnia2018](https://reader035.vdocuments.net/reader035/viewer/2022071218/605000f03dd69a2ab11a29fa/html5/thumbnails/65.jpg)
Tasks
Ten to kawal drania! Jan Kowalski
![Page 66: Czesc 3 OpenMPmrow/dyd/files/wdprir-part03.pdf · 2018. 12. 21. · Część3 OpenMP MaciejJ.Mrowiński mrow@if.pw.edu.pl Wydział Fizyki Politechnika Warszawska 21grudnia2018](https://reader035.vdocuments.net/reader035/viewer/2022071218/605000f03dd69a2ab11a29fa/html5/thumbnails/66.jpg)
Tasks
1 #pragma omp parallel2 {3 #pragma omp single4 {5 printf("Ten ");6 #pragma omp task7 printf("Jan ");8 #pragma omp task9 printf("Kowalski ");
1011 #pragma omp taskwait12 printf("to kawal drania! ");13 }14 }
![Page 67: Czesc 3 OpenMPmrow/dyd/files/wdprir-part03.pdf · 2018. 12. 21. · Część3 OpenMP MaciejJ.Mrowiński mrow@if.pw.edu.pl Wydział Fizyki Politechnika Warszawska 21grudnia2018](https://reader035.vdocuments.net/reader035/viewer/2022071218/605000f03dd69a2ab11a29fa/html5/thumbnails/67.jpg)
Tasks
Ten Kowalski Jan to kawal drania!
![Page 68: Czesc 3 OpenMPmrow/dyd/files/wdprir-part03.pdf · 2018. 12. 21. · Część3 OpenMP MaciejJ.Mrowiński mrow@if.pw.edu.pl Wydział Fizyki Politechnika Warszawska 21grudnia2018](https://reader035.vdocuments.net/reader035/viewer/2022071218/605000f03dd69a2ab11a29fa/html5/thumbnails/68.jpg)
Tasks
1 #include <stdio.h>2 #include <stdlib.h>3 #include <omp.h>45 struct LinkedListNode6 {7 int data;8 struct LinkedListNode* next;9 };
1011 typedef struct LinkedListNode Node;1213 int work(int data)14 {15 return data * data * data * data;16 }
![Page 69: Czesc 3 OpenMPmrow/dyd/files/wdprir-part03.pdf · 2018. 12. 21. · Część3 OpenMP MaciejJ.Mrowiński mrow@if.pw.edu.pl Wydział Fizyki Politechnika Warszawska 21grudnia2018](https://reader035.vdocuments.net/reader035/viewer/2022071218/605000f03dd69a2ab11a29fa/html5/thumbnails/69.jpg)
Tasks18 int main(int argc , char *argv [])19 {20 int ntasks = 15;2122 Node* head = malloc(sizeof(Node));23 Node* prev = head;24 for(int i = 0; i < ntasks; ++i)25 {26 Node* next = malloc(sizeof(Node));27 next ->data = i;28 next ->next = NULL;2930 prev ->next = next;31 prev = next;32 }3334 Node* next = head ->next;35 while(next != NULL)36 {37 printf("Thread %d: %d - %d\n", omp_get_thread_num (), next ->data ,
work(next ->data));38 next = next ->next;39 }40 printf("Finished !\n");4142 Node* current = head;43 while(current != NULL)44 {45 next = current ->next;46 free(current);47 current = next;48 }49 return 0;50 }
![Page 70: Czesc 3 OpenMPmrow/dyd/files/wdprir-part03.pdf · 2018. 12. 21. · Część3 OpenMP MaciejJ.Mrowiński mrow@if.pw.edu.pl Wydział Fizyki Politechnika Warszawska 21grudnia2018](https://reader035.vdocuments.net/reader035/viewer/2022071218/605000f03dd69a2ab11a29fa/html5/thumbnails/70.jpg)
Tasks
Thread 0: 0 - 0Thread 0: 1 - 1Thread 0: 2 - 16Thread 0: 3 - 81Thread 0: 4 - 256Thread 0: 5 - 625Thread 0: 6 - 1296Thread 0: 7 - 2401Thread 0: 8 - 4096Thread 0: 9 - 6561Thread 0: 10 - 10000Thread 0: 11 - 14641Thread 0: 12 - 20736Thread 0: 13 - 28561Thread 0: 14 - 38416Finished!
![Page 71: Czesc 3 OpenMPmrow/dyd/files/wdprir-part03.pdf · 2018. 12. 21. · Część3 OpenMP MaciejJ.Mrowiński mrow@if.pw.edu.pl Wydział Fizyki Politechnika Warszawska 21grudnia2018](https://reader035.vdocuments.net/reader035/viewer/2022071218/605000f03dd69a2ab11a29fa/html5/thumbnails/71.jpg)
Tasks
34 #pragma omp parallel35 {36 #pragma omp single nowait37 {38 Node* next = head ->next;39 while(next != NULL)40 {41 #pragma omp task firstprivate(next)42 {43 printf("Thread %d: %d - %d\n", omp_get_thread_num (), next ->data ,
work(next ->data));44 }45 next = next ->next;46 }47 }48 }
![Page 72: Czesc 3 OpenMPmrow/dyd/files/wdprir-part03.pdf · 2018. 12. 21. · Część3 OpenMP MaciejJ.Mrowiński mrow@if.pw.edu.pl Wydział Fizyki Politechnika Warszawska 21grudnia2018](https://reader035.vdocuments.net/reader035/viewer/2022071218/605000f03dd69a2ab11a29fa/html5/thumbnails/72.jpg)
Tasks
Thread 2: 0 - 0Thread 2: 1 - 1Thread 2: 2 - 16Thread 6: 3 - 81Thread 0: 4 - 256Thread 5: 5 - 625Thread 3: 6 - 1296Thread 3: 7 - 2401Thread 4: 8 - 4096Thread 4: 9 - 6561Thread 6: 10 - 10000Thread 5: 11 - 14641Thread 5: 12 - 20736Thread 7: 13 - 28561Thread 5: 14 - 38416Finished!
![Page 73: Czesc 3 OpenMPmrow/dyd/files/wdprir-part03.pdf · 2018. 12. 21. · Część3 OpenMP MaciejJ.Mrowiński mrow@if.pw.edu.pl Wydział Fizyki Politechnika Warszawska 21grudnia2018](https://reader035.vdocuments.net/reader035/viewer/2022071218/605000f03dd69a2ab11a29fa/html5/thumbnails/73.jpg)
Tasks
1 void swap(int* a, int i, int j)2 {3 int tmp = a[i];4 a[i] = a[j];5 a[j] = tmp;6 }78 int partition(int* a, int lo, int hi) {9 int j = lo - 1;
10 int p = a[hi - 1];11 for(int i = lo; i < hi - 1; ++i)12 if(a[i] <= p)13 swap(a, ++j, i);1415 swap(a, ++j, hi - 1);16 return j;17 }1819 int quicksrt(int* a, int lo, int hi) {20 if(lo < hi)21 {22 int p = partition(a, lo, hi);23 quicksrt(a, lo, p);24 quicksrt(a, p + 1, hi);25 }26 }
![Page 74: Czesc 3 OpenMPmrow/dyd/files/wdprir-part03.pdf · 2018. 12. 21. · Część3 OpenMP MaciejJ.Mrowiński mrow@if.pw.edu.pl Wydział Fizyki Politechnika Warszawska 21grudnia2018](https://reader035.vdocuments.net/reader035/viewer/2022071218/605000f03dd69a2ab11a29fa/html5/thumbnails/74.jpg)
Tasks
27 int main(int argc , char *argv [])28 {29 int array[] = {5, 1, 6, 4, 7, 2, 3, 6, 7, 9, 0, 1, 4, 2, 9, 3, 2};30 quicksrt(array , 0, 16);31 for(int i = 0; i < 16; ++i)32 printf("%d", array[i]);3334 return 0;35 }
![Page 75: Czesc 3 OpenMPmrow/dyd/files/wdprir-part03.pdf · 2018. 12. 21. · Część3 OpenMP MaciejJ.Mrowiński mrow@if.pw.edu.pl Wydział Fizyki Politechnika Warszawska 21grudnia2018](https://reader035.vdocuments.net/reader035/viewer/2022071218/605000f03dd69a2ab11a29fa/html5/thumbnails/75.jpg)
Tasks
0112233445667799
![Page 76: Czesc 3 OpenMPmrow/dyd/files/wdprir-part03.pdf · 2018. 12. 21. · Część3 OpenMP MaciejJ.Mrowiński mrow@if.pw.edu.pl Wydział Fizyki Politechnika Warszawska 21grudnia2018](https://reader035.vdocuments.net/reader035/viewer/2022071218/605000f03dd69a2ab11a29fa/html5/thumbnails/76.jpg)
Tasks
1 void swap(int* a, int i, int j)2 {3 int tmp = a[i];4 a[i] = a[j];5 a[j] = tmp;6 }78 int partition(int* a, int lo, int hi) {9 int j = lo - 1;
10 int p = a[hi - 1];11 for(int i = lo; i < hi - 1; ++i)12 if(a[i] <= p)13 swap(a, ++j, i);1415 swap(a, ++j, hi - 1);16 return j;17 }1819 int quicksrt(int* a, int lo, int hi) {20 printf("Thread %d: %d - %d\n", omp_get_thread_num (), lo, hi);21 if(lo < hi)22 {23 int p = partition(a, lo, hi);2425 #pragma omp task firstprivate(lo, p)26 quicksrt(a, lo, p);2728 #pragma omp task firstprivate(p, hi)29 quicksrt(a, p + 1, hi);30 }31 }
![Page 77: Czesc 3 OpenMPmrow/dyd/files/wdprir-part03.pdf · 2018. 12. 21. · Część3 OpenMP MaciejJ.Mrowiński mrow@if.pw.edu.pl Wydział Fizyki Politechnika Warszawska 21grudnia2018](https://reader035.vdocuments.net/reader035/viewer/2022071218/605000f03dd69a2ab11a29fa/html5/thumbnails/77.jpg)
Tasks
32 int main(int argc , char *argv [])33 {34 int array[] = {5, 1, 6, 4, 7, 2, 3, 6, 7, 9, 0, 1, 4, 2, 9, 3, 2};35 #pragma omp parallel36 {37 #pragma omp single nowait38 {39 quicksrt(array , 0, 16);40 }41 }42 for(int i = 0; i < 16; ++i)43 printf("%d", array[i]);4445 return 0;46 }
![Page 78: Czesc 3 OpenMPmrow/dyd/files/wdprir-part03.pdf · 2018. 12. 21. · Część3 OpenMP MaciejJ.Mrowiński mrow@if.pw.edu.pl Wydział Fizyki Politechnika Warszawska 21grudnia2018](https://reader035.vdocuments.net/reader035/viewer/2022071218/605000f03dd69a2ab11a29fa/html5/thumbnails/78.jpg)
Tasks
19 int quicksrt(int* a, int lo, int hi) {20 printf("Thread %d: %d - %d\n", omp_get_thread_num (), lo, hi);21 if(lo < hi)22 {23 int p = partition(a, lo, hi);2425 #pragma omp task firstprivate(lo, p)26 quicksrt(a, lo, p);2728 quicksrt(a, p + 1, hi);29 }30 }
![Page 79: Czesc 3 OpenMPmrow/dyd/files/wdprir-part03.pdf · 2018. 12. 21. · Część3 OpenMP MaciejJ.Mrowiński mrow@if.pw.edu.pl Wydział Fizyki Politechnika Warszawska 21grudnia2018](https://reader035.vdocuments.net/reader035/viewer/2022071218/605000f03dd69a2ab11a29fa/html5/thumbnails/79.jpg)
Tasks
19 int quicksrt(int* a, int lo, int hi) {20 printf("Thread %d: %d - %d\n", omp_get_thread_num (), lo, hi);21 if(lo < hi)22 {23 int p = partition(a, lo, hi);2425 #pragma omp task firstprivate(lo, p) final(hi - lo < 5)26 quicksrt(a, lo, p);2728 #pragma omp task firstprivate(p, hi) final(hi - lo < 5)29 quicksrt(a, p + 1, hi);30 }31 }
![Page 80: Czesc 3 OpenMPmrow/dyd/files/wdprir-part03.pdf · 2018. 12. 21. · Część3 OpenMP MaciejJ.Mrowiński mrow@if.pw.edu.pl Wydział Fizyki Politechnika Warszawska 21grudnia2018](https://reader035.vdocuments.net/reader035/viewer/2022071218/605000f03dd69a2ab11a29fa/html5/thumbnails/80.jpg)
Tasks
1 int numtasks = 15;2 #pragma omp parallel3 {4 #pragma omp single nowait5 {6 #pragma omp taskloop7 for(int i = 0; i < numtasks; ++i)8 printf("Thread %d: %d\n", omp_get_thread_num (), i);9 }
10 }
![Page 81: Czesc 3 OpenMPmrow/dyd/files/wdprir-part03.pdf · 2018. 12. 21. · Część3 OpenMP MaciejJ.Mrowiński mrow@if.pw.edu.pl Wydział Fizyki Politechnika Warszawska 21grudnia2018](https://reader035.vdocuments.net/reader035/viewer/2022071218/605000f03dd69a2ab11a29fa/html5/thumbnails/81.jpg)
Tasks
Thread 1: 14Thread 7: 12Thread 2: 2Thread 2: 3Thread 0: 8Thread 4: 4Thread 3: 10Thread 3: 11Thread 4: 5Thread 0: 9Thread 7: 13Thread 5: 6Thread 6: 0Thread 5: 7Thread 6: 1
![Page 82: Czesc 3 OpenMPmrow/dyd/files/wdprir-part03.pdf · 2018. 12. 21. · Część3 OpenMP MaciejJ.Mrowiński mrow@if.pw.edu.pl Wydział Fizyki Politechnika Warszawska 21grudnia2018](https://reader035.vdocuments.net/reader035/viewer/2022071218/605000f03dd69a2ab11a29fa/html5/thumbnails/82.jpg)
Tasks
1 int numtasks = 15;2 #pragma omp parallel3 {4 #pragma omp single nowait5 {6 #pragma omp taskloop num_tasks (3)7 for(int i = 0; i < numtasks; ++i)8 printf("Thread %d: %d\n", omp_get_thread_num (), i);9 }
10 }
![Page 83: Czesc 3 OpenMPmrow/dyd/files/wdprir-part03.pdf · 2018. 12. 21. · Część3 OpenMP MaciejJ.Mrowiński mrow@if.pw.edu.pl Wydział Fizyki Politechnika Warszawska 21grudnia2018](https://reader035.vdocuments.net/reader035/viewer/2022071218/605000f03dd69a2ab11a29fa/html5/thumbnails/83.jpg)
Tasks
Thread 1: 10Thread 3: 0Thread 1: 11Thread 1: 12Thread 1: 13Thread 1: 14Thread 3: 1Thread 4: 5Thread 3: 2Thread 4: 6Thread 3: 3Thread 4: 7Thread 4: 8Thread 4: 9Thread 3: 4
![Page 84: Czesc 3 OpenMPmrow/dyd/files/wdprir-part03.pdf · 2018. 12. 21. · Część3 OpenMP MaciejJ.Mrowiński mrow@if.pw.edu.pl Wydział Fizyki Politechnika Warszawska 21grudnia2018](https://reader035.vdocuments.net/reader035/viewer/2022071218/605000f03dd69a2ab11a29fa/html5/thumbnails/84.jpg)
Tasks
1 int numtasks = 15;2 #pragma omp parallel3 {4 #pragma omp single nowait5 {6 #pragma omp taskloop grainsize (5)7 for(int i = 0; i < numtasks; ++i)8 printf("Thread %d: %d\n", omp_get_thread_num (), i);9 }
10 }
![Page 85: Czesc 3 OpenMPmrow/dyd/files/wdprir-part03.pdf · 2018. 12. 21. · Część3 OpenMP MaciejJ.Mrowiński mrow@if.pw.edu.pl Wydział Fizyki Politechnika Warszawska 21grudnia2018](https://reader035.vdocuments.net/reader035/viewer/2022071218/605000f03dd69a2ab11a29fa/html5/thumbnails/85.jpg)
Tasks
Thread 2: 10Thread 3: 0Thread 0: 5Thread 3: 1Thread 3: 2Thread 3: 3Thread 3: 4Thread 2: 11Thread 0: 6Thread 2: 12Thread 2: 13Thread 2: 14Thread 0: 7Thread 0: 8Thread 0: 9