Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdlib.h>
- #include<stdio.h>
- #include<omp.h>
- void zadanie3_4() {
- int a_shared = 1;
- int b_private = 2;
- int c_firstprivate = 3;
- int e_atomic=5;
- printf("przed wejsciem do obszaru rownoleglego - nr_threads %d, thread ID %d\n", omp_get_num_threads(), omp_get_thread_num());
- printf("\ta_shared \t= %d\n", a_shared);
- printf("\tb_private \t= %d\n", b_private);
- printf("\tc_firstprivate \t= %d\n", c_firstprivate);
- printf("\te_atomic \t= %d\n", e_atomic);
- #pragma omp parallel default(none) shared(a_shared, e_atomic) private(b_private) firstprivate(c_firstprivate )
- {
- int i;
- int d_local_private;
- d_local_private = a_shared + c_firstprivate;
- #pragma omp barrier
- #pragma omp critical
- {
- for(i=0;i<10;i++) a_shared ++;
- }
- for(i=0; i<10; i++) c_firstprivate += omp_get_thread_num();
- for(i=0;i<10;i++) {
- #pragma omp atomic
- e_atomic+=omp_get_thread_num();
- }
- #pragma omp barrier
- #pragma omp critical
- {
- printf("\nw obszarze równoległym: aktualna liczba watkow %d, moj ID %d\n", omp_get_num_threads(), omp_get_thread_num());
- printf("\ta_shared \t= %d\n", a_shared);
- printf("\tb_private \t= %d\n", b_private);
- printf("\tc_firstprivate \t= %d\n", c_firstprivate);
- printf("\td_local_private = %d\n", d_local_private);
- printf("\te_atomic \t= %d\n", e_atomic);
- }
- }
- printf("po zakonczeniu obszaru rownoleglego:\n");
- printf("\ta_shared \t= %d\n", a_shared);
- printf("\tb_private \t= %d\n", b_private);
- printf("\tc_firstprivate \t= %d\n", c_firstprivate);
- printf("\te_atomic \t= %d\n", e_atomic);
- }
- void zadanie5() {
- // Ustawiam zmienną środowiskową przed uruchomieniem programu.
- // $ set OMP_NUM_THREADS = 33
- // lub
- // $ export OPM_NUM_THREADS = 33
- zadanie3_4();
- }
- void zadanie8() {
- omp_set_num_threads(7);
- zadanie3_4();
- }
- void zadanie9() {
- int a_shared = 1;
- int b_private = 2;
- int c_firstprivate = 3;
- int e_atomic=5;
- printf("przed wejsciem do obszaru rownoleglego - nr_threads %d, thread ID %d\n", omp_get_num_threads(), omp_get_thread_num());
- printf("\ta_shared \t= %d\n", a_shared);
- printf("\tb_private \t= %d\n", b_private);
- printf("\tc_firstprivate \t= %d\n", c_firstprivate);
- printf("\te_atomic \t= %d\n", e_atomic);
- #pragma omp parallel num_threads(7) default(none) shared(a_shared, e_atomic) private(b_private) firstprivate(c_firstprivate )
- {
- int i;
- int d_local_private;
- d_local_private = a_shared + c_firstprivate;
- #pragma omp barrier
- #pragma omp critical
- {
- for(i=0;i<10;i++) a_shared ++;
- }
- for(i=0; i<10; i++) c_firstprivate += omp_get_thread_num();
- for(i=0;i<10;i++) {
- #pragma omp atomic
- e_atomic+=omp_get_thread_num();
- }
- #pragma omp barrier
- #pragma omp critical
- {
- printf("\nw obszarze równoległym: aktualna liczba watkow %d, moj ID %d\n", omp_get_num_threads(), omp_get_thread_num());
- printf("\ta_shared \t= %d\n", a_shared);
- printf("\tb_private \t= %d\n", b_private);
- printf("\tc_firstprivate \t= %d\n", c_firstprivate);
- printf("\td_local_private = %d\n", d_local_private);
- printf("\te_atomic \t= %d\n", e_atomic);
- }
- }
- printf("po zakonczeniu obszaru rownoleglego:\n");
- printf("\ta_shared \t= %d\n", a_shared);
- printf("\tb_private \t= %d\n", b_private);
- printf("\tc_firstprivate \t= %d\n", c_firstprivate);
- printf("\te_atomic \t= %d\n", e_atomic);
- }
- void zadanie10() {
- static int f_threadprivate = -1;
- #pragma omp threadprivate(f_threadprivate)
- #pragma omp parallel num_threads(7)
- {
- f_threadprivate = omp_get_thread_num();
- }
- #pragma omp parallel num_threads(7)
- {
- printf("Watek id: %d, dostal: %d\n",omp_get_thread_num(),f_threadprivate);
- }
- }
- void zadanie13_a() {
- printf("Static, heap size: 3 \n");
- omp_set_num_threads(4);
- int i;
- #pragma omp parallel for ordered schedule(static, 3)
- for(i = 0; i < 17; i++){
- #pragma omp ordered
- printf("iteracja %d: wątek %d\n",i,omp_get_thread_num());
- }
- printf("\n");
- }
- void zadanie13_b() {
- printf("Static, heap size: default \n");
- omp_set_num_threads(4);
- int i;
- #pragma omp parallel for ordered schedule(static)
- for(i = 0; i < 17; i++){
- #pragma omp ordered
- printf("iteracja %d: wątek %d\n",i,omp_get_thread_num());
- }
- printf("\n");
- }
- void zadanie13_c() {
- printf("Dynamic, heap size: 3 \n");
- omp_set_num_threads(4);
- int i;
- #pragma omp parallel for ordered schedule(dynamic, 3)
- for(i = 0; i < 17; i++){
- #pragma omp ordered
- printf("iteracja %d: wątek %d\n",i,omp_get_thread_num());
- }
- printf("\n");
- }
- void zadanie13_d() {
- printf("Dynamic, heap size: default \n");
- omp_set_num_threads(4);
- int i;
- #pragma omp parallel for ordered schedule(dynamic)
- for(i = 0; i < 17; i++){
- #pragma omp ordered
- printf("iteracja %d: wątek %d\n",i,omp_get_thread_num());
- }
- printf("\n");
- }
- void zadanie13_e(){
- printf("Auto, heap size: default \n");
- omp_set_num_threads(4);
- int i;
- #pragma omp parallel for ordered schedule(auto)
- for(i = 0; i < 17; i++){
- #pragma omp ordered
- printf("iteracja %d: wątek %d\n",i,omp_get_thread_num());
- }
- printf("\n");
- }
- void zadanie13_f(){
- printf("Guided, heap size: default \n");
- omp_set_num_threads(4);
- int i;
- #pragma omp parallel for ordered schedule(guided)
- for(i = 0; i < 17; i++){
- #pragma omp ordered
- printf("iteracja %d: wątek %d\n",i,omp_get_thread_num());
- }
- printf("\n");
- }
- int main(){
- #ifdef _OPENMP
- printf("\nKompilator rozpoznaje dyrektywy OpenMP\n");
- #endif
- //zadanie3_4();
- //zadanie5();
- //zadanie8();
- //zadanie9();
- //zadanie10();
- zadanie13_a();
- zadanie13_b();
- zadanie13_c();
- zadanie13_d();
- //zadanie13_e();
- //zadanie13_f();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement