OpenMP-Examples/sources/Example_tasking.13f.f
2015-01-13 11:38:24 -08:00

34 lines
833 B
Fortran

! @@name: tasking.13f
! @@type: F-free
! @@compilable: yes
! @@linkable: no
! @@expect: success
recursive subroutine bin_search(pos, n, state)
use omp_lib
integer :: pos, n
character, pointer :: state(:)
character, target, dimension(n) :: new_state1, new_state2
integer, parameter :: LIMIT = 3
if (pos .eq. n) then
call check_solution(state)
return
endif
!$omp task final(pos > LIMIT) mergeable
if (.not. omp_in_final()) then
new_state1(1:pos) = state(1:pos)
state => new_state1
endif
state(pos+1) = 'z'
call bin_search(pos+1, n, state)
!$omp end task
!$omp task final(pos > LIMIT) mergeable
if (.not. omp_in_final()) then
new_state2(1:pos) = state(1:pos)
state => new_state2
endif
state(pos+1) = 'y'
call bin_search(pos+1, n, state)
!$omp end task
!$omp taskwait
end subroutine