diff options
Diffstat (limited to 'openmp/testsuite/fortran/omp_task_untied.f')
| -rw-r--r-- | openmp/testsuite/fortran/omp_task_untied.f | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/openmp/testsuite/fortran/omp_task_untied.f b/openmp/testsuite/fortran/omp_task_untied.f new file mode 100644 index 00000000000..e58e9350941 --- /dev/null +++ b/openmp/testsuite/fortran/omp_task_untied.f @@ -0,0 +1,63 @@ +<ompts:test> +<ompts:testdescription>Test for untied clause. First generate a set of tasks and pause it immediately. Then we resume half of them and check whether they are scheduled by different threads</ompts:testdescription> +<ompts:ompversion>3.0</ompts:ompversion> +<ompts:directive>omp task untied</ompts:directive> +<ompts:dependences>omp taskwait</ompts:dependences> +<ompts:testcode> + INCLUDE "omp_my_sleep.f" + + INTEGER FUNCTION <ompts:testcode:functionname>omp_task_untied</ompts:testcode:functionname>() + IMPLICIT NONE + INCLUDE "omp_testsuite.f" + <ompts:orphan:vars> + EXTERNAL my_sleep + INTEGER omp_get_num_threads, omp_get_thread_num + INTEGER myj + INTEGER i,j + INTEGER cnt + INTEGER start_tid(NUM_TASKS) + INTEGER current_tid(NUM_TASKS) + COMMON /orphvars/ j, cnt, start_tid, current_tid + </ompts:orphan:vars> + + cnt = 0 + do i = 1, NUM_TASKS + start_tid(i) = 0 + current_tid(i) = 0 + end do + +!$omp parallel private(myj) shared(j) +!$omp single + do i=1, NUM_TASKS + j = i + <ompts:orphan> + myj = j +!$omp task <ompts:check>untied</ompts:check> + call my_sleep(SLEEPTIME) + start_tid(myj) = omp_get_thread_num() +!$omp taskwait + <ompts:check>if (MOD(start_tid(myj),2) .ne. 0) then</ompts:check> + call my_sleep(SLEEPTIME) + current_tid(myj) = omp_get_thread_num() + <ompts:check> + else + current_tid(myj) = omp_get_thread_num() + end if</ompts:check> +!$omp end task + </ompts:orphan> + end do +!$omp end single +!$omp end parallel + + <testfunctionname></testfunctionname> = 0 + + ! check if at least one untied task switched threads + do i=1, NUM_TASKS + if (current_tid(i) .ne. start_tid(i)) then + <testfunctionname></testfunctionname> = 1 + end if + end do + + END FUNCTION +</ompts:testcode> +</ompts:test> |

