Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions docs/implementation-status.md
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@ are accepted, but in some cases, the associated runtime behavior is not fully im
| `prif_allocate_coarray` | **YES** | |
| `prif_allocate` | **YES** | |
| `prif_deallocate_coarray` | *partial* | no `final_func` arg support |
| `prif_deallocate_coarrays` | *partial* | no `final_func` arg support |
| `prif_deallocate` | **YES** | |
| `prif_alias_create` | **YES** | includes `data_pointer_offset` argument added in PRIF 0.6 |
| `prif_alias_destroy` | **YES** | |
Expand Down
7 changes: 7 additions & 0 deletions src/caffeine/allocation_s.F90
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,14 @@
allocated_memory = caf_allocate(non_symmetric_heap_mspace, size_in_bytes)
end procedure

#if FORCE_PRIF_0_5 || FORCE_PRIF_0_6
module procedure prif_deallocate_coarray
#else
module procedure prif_deallocate_coarray
call prif_deallocate_coarrays([coarray_handle], stat, errmsg, errmsg_alloc)
end procedure
module procedure prif_deallocate_coarrays
#endif
! gfortran is yelling that this isn't valid for bind(C)
! https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113338
! abstract interface
Expand Down
7 changes: 6 additions & 1 deletion src/caffeine/teams_s.F90
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,12 @@
teams_coarrays(i)%info => tmp_data
call c_f_pointer(tmp_data%next_handle, tmp_data)
end do
call prif_deallocate_coarray(teams_coarrays, stat, errmsg, errmsg_alloc)
#if FORCE_PRIF_0_5 || FORCE_PRIF_0_6
call prif_deallocate_coarray &
#else
call prif_deallocate_coarrays &
#endif
(teams_coarrays, stat, errmsg, errmsg_alloc)
nullify(current_team%info%coarrays)
else
! child team sync required by F23 11.1.5.2,
Expand Down
24 changes: 23 additions & 1 deletion src/prif.F90
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,12 @@ module prif
public :: prif_init
public :: prif_register_stop_callback, prif_stop_callback_interface
public :: prif_stop, prif_error_stop, prif_fail_image
public :: prif_allocate_coarray, prif_allocate, prif_deallocate_coarray, prif_deallocate
public :: prif_allocate_coarray, prif_allocate, prif_deallocate
#if FORCE_PRIF_0_5 || FORCE_PRIF_0_6
public :: prif_deallocate_coarray
#else
public :: prif_deallocate_coarray, prif_deallocate_coarrays
#endif
public :: prif_put, prif_put_indirect, prif_get, prif_get_indirect, prif_put_with_notify, prif_put_with_notify_indirect
public :: prif_put_indirect_with_notify, prif_put_indirect_with_notify_indirect
public :: prif_get_strided, prif_get_strided_indirect, prif_put_strided, prif_put_strided_indirect
Expand Down Expand Up @@ -175,13 +180,30 @@ module subroutine prif_allocate(size_in_bytes, allocated_memory, stat, errmsg, e
character(len=:), intent(inout), allocatable, optional :: errmsg_alloc
end subroutine

#if FORCE_PRIF_0_5 || FORCE_PRIF_0_6
module subroutine prif_deallocate_coarray(coarray_handles, stat, errmsg, errmsg_alloc)
implicit none
type(prif_coarray_handle), intent(in) :: coarray_handles(:)
integer(c_int), intent(out), optional :: stat
character(len=*), intent(inout), optional :: errmsg
character(len=:), intent(inout), allocatable, optional :: errmsg_alloc
end subroutine
#else
module subroutine prif_deallocate_coarray(coarray_handle, stat, errmsg, errmsg_alloc)
implicit none
type(prif_coarray_handle), intent(in) :: coarray_handle
integer(c_int), intent(out), optional :: stat
character(len=*), intent(inout), optional :: errmsg
character(len=:), intent(inout), allocatable, optional :: errmsg_alloc
end subroutine
module subroutine prif_deallocate_coarrays(coarray_handles, stat, errmsg, errmsg_alloc)
implicit none
type(prif_coarray_handle), intent(in) :: coarray_handles(:)
integer(c_int), intent(out), optional :: stat
character(len=*), intent(inout), optional :: errmsg
character(len=:), intent(inout), allocatable, optional :: errmsg_alloc
end subroutine
#endif

module subroutine prif_deallocate(mem, stat, errmsg, errmsg_alloc)
implicit none
Expand Down
13 changes: 10 additions & 3 deletions test/prif_allocate_test.F90
Original file line number Diff line number Diff line change
@@ -1,10 +1,17 @@
module caf_allocate_test
use prif, only : &
prif_allocate_coarray, prif_deallocate_coarray, &
prif_allocate_coarray, &
prif_allocate, prif_deallocate, &
prif_coarray_handle, prif_num_images, prif_size_bytes, &
prif_set_context_data, prif_get_context_data, prif_local_data_pointer, &
prif_alias_create, prif_alias_destroy
#if FORCE_PRIF_0_5 || FORCE_PRIF_0_6
use prif, only : prif_deallocate_coarray_ => prif_deallocate_coarray
# define prif_deallocate_coarray(h) prif_deallocate_coarray_([h])
# define prif_deallocate_coarrays(arr) prif_deallocate_coarray_(arr)
#else
use prif, only : prif_deallocate_coarray, prif_deallocate_coarrays
#endif
use veggies, only: result_t, test_item_t, assert_that, assert_equals, describe, it, succeed
use iso_c_binding, only: &
c_ptr, c_int, c_int64_t, c_size_t, c_funptr, c_null_funptr, &
Expand Down Expand Up @@ -78,7 +85,7 @@ function check_allocate_integer_scalar_coarray_with_corank1() result(result_)
end do
end block

call prif_deallocate_coarray([coarray_handle])
call prif_deallocate_coarray(coarray_handle)

end function

Expand Down Expand Up @@ -258,7 +265,7 @@ function check_allocate_integer_array_coarray_with_corank2() result(result_)
end do
end block

call prif_deallocate_coarray([coarray_handle])
call prif_deallocate_coarray(coarray_handle)

end function
end module caf_allocate_test
8 changes: 6 additions & 2 deletions test/prif_atomic_test.F90
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,11 @@ module caf_atomic_test
c_ptr, c_int64_t, c_intptr_t, c_size_t, c_null_funptr, c_f_pointer, c_loc, c_sizeof
use veggies, only: result_t, test_item_t, assert_equals, assert_that, describe, it, succeed
use prif
#if FORCE_PRIF_0_5 || FORCE_PRIF_0_6
use prif, only : prif_deallocate_coarray_ => prif_deallocate_coarray
# define prif_deallocate_coarray(h) prif_deallocate_coarray_([h])
# define prif_deallocate_coarrays(arr) prif_deallocate_coarray_(arr)
#endif

implicit none
private
Expand Down Expand Up @@ -325,8 +330,7 @@ function check_atomic_uncontended() result(result_)

end block

call prif_deallocate_coarray([coarray_handle_int])
call prif_deallocate_coarray([coarray_handle_logical])
call prif_deallocate_coarrays(([coarray_handle_int,coarray_handle_logical]))
end function

function check_atomic_contended() result(result_)
Expand Down
13 changes: 10 additions & 3 deletions test/prif_coarray_inquiry_test.F90
Original file line number Diff line number Diff line change
@@ -1,11 +1,18 @@
module caf_coarray_inquiry_test
use prif, only : &
prif_allocate_coarray, prif_deallocate_coarray, &
prif_allocate_coarray, &
prif_coarray_handle, prif_num_images, &
prif_local_data_pointer, prif_size_bytes, &
prif_lcobound_no_dim, prif_lcobound_with_dim, &
prif_ucobound_no_dim, prif_ucobound_with_dim, &
prif_coshape
#if FORCE_PRIF_0_5 || FORCE_PRIF_0_6
use prif, only : prif_deallocate_coarray_ => prif_deallocate_coarray
# define prif_deallocate_coarray(h) prif_deallocate_coarray_([h])
# define prif_deallocate_coarrays(arr) prif_deallocate_coarray_(arr)
#else
use prif, only : prif_deallocate_coarray, prif_deallocate_coarrays
#endif
use veggies, only: result_t, test_item_t, assert_that, describe, it, succeed
use iso_c_binding, only: &
c_ptr, c_null_ptr, c_int64_t, c_int, c_size_t, c_null_funptr, c_associated
Expand Down Expand Up @@ -53,7 +60,7 @@ function check_prif_local_data_pointer() result(result_)
allocation_ptr)
call prif_local_data_pointer(coarray_handle, local_ptr)
result_ = assert_that(c_associated(local_ptr, allocation_ptr))
call prif_deallocate_coarray([coarray_handle])
call prif_deallocate_coarray(coarray_handle)
end function

function check_cobound(corank) result(result_)
Expand Down Expand Up @@ -117,7 +124,7 @@ function check_cobound(corank) result(result_)
result_ = result_ .and. &
assert_that(all(sizes == (ucobounds - lcobounds + 1)), "prif_coshape is valid")

call prif_deallocate_coarray([coarray_handle])
call prif_deallocate_coarray(coarray_handle)
end function

function check_cobounds() result(result_)
Expand Down
16 changes: 10 additions & 6 deletions test/prif_event_test.F90
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,17 @@ module caf_event_test
prif_notify_type, prif_notify_wait, prif_put_with_notify, prif_put_strided_with_notify, &
prif_coarray_handle, &
prif_allocate_coarray, &
prif_deallocate_coarray, &
prif_num_images, &
prif_put, &
prif_sync_all, &
prif_this_image_no_coarray
#if FORCE_PRIF_0_5 || FORCE_PRIF_0_6
use prif, only : prif_deallocate_coarray_ => prif_deallocate_coarray
# define prif_deallocate_coarray(h) prif_deallocate_coarray_([h])
# define prif_deallocate_coarrays(arr) prif_deallocate_coarray_(arr)
#else
use prif, only : prif_deallocate_coarray, prif_deallocate_coarrays
#endif
use veggies, only: result_t, test_item_t, assert_equals, describe, it, succeed

implicit none
Expand Down Expand Up @@ -133,7 +139,7 @@ function check_event_serial() result(result_)
end do
end block

call prif_deallocate_coarray([coarray_handle])
call prif_deallocate_coarray(coarray_handle)
end function


Expand Down Expand Up @@ -233,8 +239,7 @@ function check_event_parallel() result(result_)
end do
end block

call prif_deallocate_coarray([coarray_handle_ctr])
call prif_deallocate_coarray([coarray_handle_evt])
call prif_deallocate_coarrays(([coarray_handle_ctr, coarray_handle_evt]))
end function

function check_notify() result(result_)
Expand Down Expand Up @@ -334,8 +339,7 @@ function check_notify() result(result_)
end do
end block

call prif_deallocate_coarray([coarray_handle_ctr])
call prif_deallocate_coarray([coarray_handle_evt])
call prif_deallocate_coarrays(([coarray_handle_ctr, coarray_handle_evt]))
end function

end module
21 changes: 14 additions & 7 deletions test/prif_image_index_test.F90
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
module caf_image_index_test
use iso_c_binding, only: c_int, c_ptr, c_size_t, c_null_funptr, c_int64_t
use prif, only: prif_coarray_handle, prif_allocate_coarray, prif_deallocate_coarray, &
use prif, only: prif_coarray_handle, prif_allocate_coarray, &
prif_image_index, prif_num_images, &
prif_team_type, prif_get_team, &
prif_this_image_no_coarray, &
Expand All @@ -10,6 +10,13 @@ module caf_image_index_test
prif_this_image_with_coarray, prif_this_image_with_dim, &
prif_lcobound_no_dim, prif_ucobound_no_dim, &
prif_num_images_with_team, PRIF_INITIAL_TEAM
#if FORCE_PRIF_0_5 || FORCE_PRIF_0_6
use prif, only : prif_deallocate_coarray_ => prif_deallocate_coarray
# define prif_deallocate_coarray(h) prif_deallocate_coarray_([h])
# define prif_deallocate_coarrays(arr) prif_deallocate_coarray_(arr)
#else
use prif, only : prif_deallocate_coarray, prif_deallocate_coarrays
#endif
use veggies, only: result_t, test_item_t, assert_equals, assert_that, describe, it, succeed

implicit none
Expand Down Expand Up @@ -100,7 +107,7 @@ function check_simple_case() result(result_)
result_ = result_ .and. &
check_this_image_coarray(coarray_handle, 1)

call prif_deallocate_coarray([coarray_handle])
call prif_deallocate_coarray(coarray_handle)
end function

function check_lower_bounds() result(result_)
Expand All @@ -127,7 +134,7 @@ function check_lower_bounds() result(result_)
result_ = result_ .and. &
check_this_image_coarray(coarray_handle, 2)

call prif_deallocate_coarray([coarray_handle])
call prif_deallocate_coarray(coarray_handle)
end function

function check_invalid_subscripts() result(result_)
Expand All @@ -151,7 +158,7 @@ function check_invalid_subscripts() result(result_)
result_ = result_ .and. &
check_this_image_coarray(coarray_handle, 2)

call prif_deallocate_coarray([coarray_handle])
call prif_deallocate_coarray(coarray_handle)
end function

function check_complicated_2d() result(result_)
Expand Down Expand Up @@ -181,7 +188,7 @@ function check_complicated_2d() result(result_)
result_ = result_ .and. &
check_this_image_coarray(coarray_handle, 2)

call prif_deallocate_coarray([coarray_handle])
call prif_deallocate_coarray(coarray_handle)
end function

function check_complicated_3d() result(result_)
Expand Down Expand Up @@ -217,7 +224,7 @@ function check_complicated_3d() result(result_)
result_ = result_ .and. &
check_this_image_coarray(coarray_handle, 3)

call prif_deallocate_coarray([coarray_handle])
call prif_deallocate_coarray(coarray_handle)
end function

function check_complicated_2d_team() result(result_)
Expand Down Expand Up @@ -385,7 +392,7 @@ function check_complicated_2d_team() result(result_)
check_this_image_coarray(coarray_handle, 2, child_team)

call prif_end_team()
call prif_deallocate_coarray([coarray_handle])
call prif_deallocate_coarray(coarray_handle)
end function


Expand Down
16 changes: 11 additions & 5 deletions test/prif_rma_test.F90
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ module caf_rma_test
use prif, only: &
prif_coarray_handle, &
prif_allocate_coarray, &
prif_deallocate_coarray, &
prif_allocate, &
prif_deallocate, &
prif_num_images, &
Expand All @@ -15,6 +14,13 @@ module caf_rma_test
prif_sync_all, &
prif_sync_memory, &
prif_this_image_no_coarray
#if FORCE_PRIF_0_5 || FORCE_PRIF_0_6
use prif, only : prif_deallocate_coarray_ => prif_deallocate_coarray
# define prif_deallocate_coarray(h) prif_deallocate_coarray_([h])
# define prif_deallocate_coarrays(arr) prif_deallocate_coarray_(arr)
#else
use prif, only : prif_deallocate_coarray, prif_deallocate_coarrays
#endif
use veggies, only: result_t, test_item_t, assert_equals, describe, it

implicit none
Expand Down Expand Up @@ -72,7 +78,7 @@ function check_put() result(result_)

result_ = assert_equals(expected, local_slice)

call prif_deallocate_coarray([coarray_handle])
call prif_deallocate_coarray(coarray_handle)
end function

function check_put_indirect() result(result_)
Expand Down Expand Up @@ -130,7 +136,7 @@ function check_put_indirect() result(result_)
result_ = assert_equals(expected, component_access)

call prif_deallocate(local_slice%my_component)
call prif_deallocate_coarray([coarray_handle])
call prif_deallocate_coarray(coarray_handle)
end function

function check_get() result(result_)
Expand Down Expand Up @@ -170,7 +176,7 @@ function check_get() result(result_)

result_ = assert_equals(expected, retrieved)

call prif_deallocate_coarray([coarray_handle])
call prif_deallocate_coarray(coarray_handle)
end function

function check_get_indirect() result(result_)
Expand Down Expand Up @@ -228,6 +234,6 @@ function check_get_indirect() result(result_)
result_ = assert_equals(expected, retrieved)

call prif_deallocate(local_slice%my_component)
call prif_deallocate_coarray([coarray_handle])
call prif_deallocate_coarray(coarray_handle)
end function
end module
Loading
Loading