1 // RUN: %libomp-compile-and-run 2 #include <stdio.h> 3 #include <math.h> 4 #include "omp_testsuite.h" 5 #include "omp_my_sleep.h" 6 test_omp_taskyield()7int test_omp_taskyield() 8 { 9 int i; 10 int count = 0; 11 int start_tid[NUM_TASKS]; 12 int current_tid[NUM_TASKS]; 13 14 for (i=0; i< NUM_TASKS; i++) { 15 start_tid[i]=0; 16 current_tid[i]=0; 17 } 18 19 #pragma omp parallel 20 { 21 #pragma omp single 22 { 23 for (i = 0; i < NUM_TASKS; i++) { 24 int myi = i; 25 #pragma omp task untied 26 { 27 my_sleep(SLEEPTIME); 28 start_tid[myi] = omp_get_thread_num(); 29 #pragma omp taskyield 30 if((start_tid[myi] %2) ==0){ 31 my_sleep(SLEEPTIME); 32 current_tid[myi] = omp_get_thread_num(); 33 } /*end of if*/ 34 } /* end of omp task */ 35 } /* end of for */ 36 } /* end of single */ 37 } /* end of parallel */ 38 for (i=0;i<NUM_TASKS; i++) { 39 //printf("start_tid[%d]=%d, current_tid[%d]=%d\n", 40 //i, start_tid[i], i , current_tid[i]); 41 if (current_tid[i] == start_tid[i]) 42 count++; 43 } 44 return (count<NUM_TASKS); 45 } 46 main()47int main() 48 { 49 int i; 50 int num_failed=0; 51 52 if (omp_get_max_threads() < 2) 53 omp_set_num_threads(8); 54 55 for(i = 0; i < REPETITIONS; i++) { 56 if(!test_omp_taskyield()) { 57 num_failed++; 58 } 59 } 60 return num_failed; 61 } 62