Skip to content
Merged
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
22 changes: 16 additions & 6 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ defaults:

jobs:
build:
name: ${{ matrix.compiler }}-${{ matrix.version }} ${{ matrix.network }} (${{ matrix.os }})
name: ${{ matrix.compiler }}-${{ matrix.version }} ${{ matrix.network }} (${{ matrix.os }}) ${{ matrix.label }}
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
Expand Down Expand Up @@ -61,11 +61,21 @@ jobs:
FFLAGS: -mmlir -allow-assumed-rank
# https://hub.docker.com/r/phhargrove/llvm-flang/tags
container: phhargrove/llvm-flang:19.1.1-latest
# - os: ubuntu-24.04
# compiler: flang
# version: new
# network: smp
# container: gmao/llvm-flang:latest
# --- PRIF-old coverage ---
- os: ubuntu-24.04
compiler: flang
version: 21
network: smp
label: PRIF-0.5
FFLAGS: -DFORCE_PRIF_0_5
container: phhargrove/llvm-flang:21.1.0-latest
- os: ubuntu-24.04
compiler: flang
version: 21
network: smp
label: PRIF-0.6
FFLAGS: -DFORCE_PRIF_0_6
container: phhargrove/llvm-flang:21.1.0-latest
# --- udp coverage for selected configs ---
- os: macos-15
compiler: gfortran
Expand Down
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
2 changes: 1 addition & 1 deletion src/caffeine/prif_private_s.F90
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@

implicit none

type(team_data), target :: initial_team
type(prif_team_descriptor), target :: initial_team
type(prif_team_type) :: current_team
type(c_ptr) :: non_symmetric_heap_mspace

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
30 changes: 26 additions & 4 deletions src/prif.F90
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,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 @@ -139,7 +144,7 @@ module prif

type, public :: prif_team_type
private
type(team_data), pointer :: info => null()
type(prif_team_descriptor), pointer :: info => null()
end type

abstract interface
Expand Down Expand Up @@ -214,13 +219,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 Expand Up @@ -1155,14 +1177,14 @@ module subroutine prif_atomic_ref_logical_indirect(image_num, atom_remote_ptr, v
type(c_ptr) :: reserved
end type

type, private :: team_data
type, private :: prif_team_descriptor
type(c_ptr) :: gex_team
type(c_ptr) :: heap_mspace
integer(c_intptr_t) :: heap_start
integer(c_size_t) :: heap_size
integer(c_int64_t) :: team_number
integer(c_int) :: this_image, num_images
type(team_data), pointer :: parent_team => null()
type(prif_team_descriptor), pointer :: parent_team => null()
type(prif_coarray_descriptor), pointer :: coarrays => null()
type(child_team_info), pointer :: child_heap_info => null()
end type
Expand Down
2 changes: 2 additions & 0 deletions test/main.F90
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ function run() result(passed)
use caf_image_index_test, only: &
caf_image_index_prif_image_index => &
test_prif_image_index
use prif_types_test, only: test_prif_types
use caf_rma_test, only: &
caf_rma_prif_rma => &
test_prif_rma
Expand Down Expand Up @@ -73,6 +74,7 @@ function run() result(passed)
end block
#endif
individual_tests = [a00_caffeinate_caffeinate()]
individual_tests = [individual_tests, test_prif_types()]
individual_tests = [individual_tests, caf_allocate_prif_allocate()]
individual_tests = [individual_tests, caf_image_index_prif_image_index()]
individual_tests = [individual_tests, caf_rma_prif_rma()]
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
11 changes: 9 additions & 2 deletions test/prif_coarray_inquiry_test.F90
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,13 @@ module prif_coarray_inquiry_test_m
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 julienne_m, only: &
operator(//) &
,operator(.all.) &
Expand Down Expand Up @@ -68,7 +75,7 @@ function check_prif_local_data_pointer() result(diag)
allocation_ptr)
call prif_local_data_pointer(coarray_handle, local_ptr)
diag = .expect. c_associated(local_ptr, allocation_ptr)
call prif_deallocate_coarray([coarray_handle])
call prif_deallocate_coarray(coarray_handle)
end function

impure elemental function check_cobound(corank) result(diag)
Expand Down Expand Up @@ -132,7 +139,7 @@ impure elemental function check_cobound(corank) result(diag)
diag = diag .also. &
(.all. ((ucobounds - lcobounds + 1) .equalsExpected. sizes)) // "prif_coshape is valid"

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

function check_cobounds() result(diag)
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
Loading