Skip to content

Commit 7a3a61d

Browse files
authored
Merge pull request #267 from bonachea/prif-0.7-dealloc-coarray
Implement prif_deallocate_coarray and type changes in PRIF 0.7
2 parents 024dec7 + 8639a95 commit 7a3a61d

16 files changed

+275
-44
lines changed

.github/workflows/build.yml

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ defaults:
88

99
jobs:
1010
build:
11-
name: ${{ matrix.compiler }}-${{ matrix.version }} ${{ matrix.network }} (${{ matrix.os }})
11+
name: ${{ matrix.compiler }}-${{ matrix.version }} ${{ matrix.network }} (${{ matrix.os }}) ${{ matrix.label }}
1212
runs-on: ${{ matrix.os }}
1313
strategy:
1414
fail-fast: false
@@ -61,11 +61,21 @@ jobs:
6161
FFLAGS: -mmlir -allow-assumed-rank
6262
# https://hub.docker.com/r/phhargrove/llvm-flang/tags
6363
container: phhargrove/llvm-flang:19.1.1-latest
64-
# - os: ubuntu-24.04
65-
# compiler: flang
66-
# version: new
67-
# network: smp
68-
# container: gmao/llvm-flang:latest
64+
# --- PRIF-old coverage ---
65+
- os: ubuntu-24.04
66+
compiler: flang
67+
version: 21
68+
network: smp
69+
label: PRIF-0.5
70+
FFLAGS: -DFORCE_PRIF_0_5
71+
container: phhargrove/llvm-flang:21.1.0-latest
72+
- os: ubuntu-24.04
73+
compiler: flang
74+
version: 21
75+
network: smp
76+
label: PRIF-0.6
77+
FFLAGS: -DFORCE_PRIF_0_6
78+
container: phhargrove/llvm-flang:21.1.0-latest
6979
# --- udp coverage for selected configs ---
7080
- os: macos-15
7181
compiler: gfortran

docs/implementation-status.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ are accepted, but in some cases, the associated runtime behavior is not fully im
7070
| `prif_allocate_coarray` | **YES** | |
7171
| `prif_allocate` | **YES** | |
7272
| `prif_deallocate_coarray` | *partial* | no `final_func` arg support |
73+
| `prif_deallocate_coarrays` | *partial* | no `final_func` arg support |
7374
| `prif_deallocate` | **YES** | |
7475
| `prif_alias_create` | **YES** | includes `data_pointer_offset` argument added in PRIF 0.6 |
7576
| `prif_alias_destroy` | **YES** | |

src/caffeine/allocation_s.F90

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,14 @@
7272
allocated_memory = caf_allocate(non_symmetric_heap_mspace, size_in_bytes)
7373
end procedure
7474

75+
#if FORCE_PRIF_0_5 || FORCE_PRIF_0_6
7576
module procedure prif_deallocate_coarray
77+
#else
78+
module procedure prif_deallocate_coarray
79+
call prif_deallocate_coarrays([coarray_handle], stat, errmsg, errmsg_alloc)
80+
end procedure
81+
module procedure prif_deallocate_coarrays
82+
#endif
7683
! gfortran is yelling that this isn't valid for bind(C)
7784
! https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113338
7885
! abstract interface

src/caffeine/prif_private_s.F90

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323

2424
implicit none
2525

26-
type(team_data), target :: initial_team
26+
type(prif_team_descriptor), target :: initial_team
2727
type(prif_team_type) :: current_team
2828
type(c_ptr) :: non_symmetric_heap_mspace
2929

src/caffeine/teams_s.F90

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,12 @@
4343
teams_coarrays(i)%info => tmp_data
4444
call c_f_pointer(tmp_data%next_handle, tmp_data)
4545
end do
46-
call prif_deallocate_coarray(teams_coarrays, stat, errmsg, errmsg_alloc)
46+
#if FORCE_PRIF_0_5 || FORCE_PRIF_0_6
47+
call prif_deallocate_coarray &
48+
#else
49+
call prif_deallocate_coarrays &
50+
#endif
51+
(teams_coarrays, stat, errmsg, errmsg_alloc)
4752
nullify(current_team%info%coarrays)
4853
else
4954
! child team sync required by F23 11.1.5.2,

src/prif.F90

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,12 @@ module prif
2828
public :: prif_init
2929
public :: prif_register_stop_callback, prif_stop_callback_interface
3030
public :: prif_stop, prif_error_stop, prif_fail_image
31-
public :: prif_allocate_coarray, prif_allocate, prif_deallocate_coarray, prif_deallocate
31+
public :: prif_allocate_coarray, prif_allocate, prif_deallocate
32+
#if FORCE_PRIF_0_5 || FORCE_PRIF_0_6
33+
public :: prif_deallocate_coarray
34+
#else
35+
public :: prif_deallocate_coarray, prif_deallocate_coarrays
36+
#endif
3237
public :: prif_put, prif_put_indirect, prif_get, prif_get_indirect, prif_put_with_notify, prif_put_with_notify_indirect
3338
public :: prif_put_indirect_with_notify, prif_put_indirect_with_notify_indirect
3439
public :: prif_get_strided, prif_get_strided_indirect, prif_put_strided, prif_put_strided_indirect
@@ -139,7 +144,7 @@ module prif
139144

140145
type, public :: prif_team_type
141146
private
142-
type(team_data), pointer :: info => null()
147+
type(prif_team_descriptor), pointer :: info => null()
143148
end type
144149

145150
abstract interface
@@ -214,13 +219,30 @@ module subroutine prif_allocate(size_in_bytes, allocated_memory, stat, errmsg, e
214219
character(len=:), intent(inout), allocatable, optional :: errmsg_alloc
215220
end subroutine
216221

222+
#if FORCE_PRIF_0_5 || FORCE_PRIF_0_6
217223
module subroutine prif_deallocate_coarray(coarray_handles, stat, errmsg, errmsg_alloc)
218224
implicit none
219225
type(prif_coarray_handle), intent(in) :: coarray_handles(:)
220226
integer(c_int), intent(out), optional :: stat
221227
character(len=*), intent(inout), optional :: errmsg
222228
character(len=:), intent(inout), allocatable, optional :: errmsg_alloc
223229
end subroutine
230+
#else
231+
module subroutine prif_deallocate_coarray(coarray_handle, stat, errmsg, errmsg_alloc)
232+
implicit none
233+
type(prif_coarray_handle), intent(in) :: coarray_handle
234+
integer(c_int), intent(out), optional :: stat
235+
character(len=*), intent(inout), optional :: errmsg
236+
character(len=:), intent(inout), allocatable, optional :: errmsg_alloc
237+
end subroutine
238+
module subroutine prif_deallocate_coarrays(coarray_handles, stat, errmsg, errmsg_alloc)
239+
implicit none
240+
type(prif_coarray_handle), intent(in) :: coarray_handles(:)
241+
integer(c_int), intent(out), optional :: stat
242+
character(len=*), intent(inout), optional :: errmsg
243+
character(len=:), intent(inout), allocatable, optional :: errmsg_alloc
244+
end subroutine
245+
#endif
224246

225247
module subroutine prif_deallocate(mem, stat, errmsg, errmsg_alloc)
226248
implicit none
@@ -1155,14 +1177,14 @@ module subroutine prif_atomic_ref_logical_indirect(image_num, atom_remote_ptr, v
11551177
type(c_ptr) :: reserved
11561178
end type
11571179

1158-
type, private :: team_data
1180+
type, private :: prif_team_descriptor
11591181
type(c_ptr) :: gex_team
11601182
type(c_ptr) :: heap_mspace
11611183
integer(c_intptr_t) :: heap_start
11621184
integer(c_size_t) :: heap_size
11631185
integer(c_int64_t) :: team_number
11641186
integer(c_int) :: this_image, num_images
1165-
type(team_data), pointer :: parent_team => null()
1187+
type(prif_team_descriptor), pointer :: parent_team => null()
11661188
type(prif_coarray_descriptor), pointer :: coarrays => null()
11671189
type(child_team_info), pointer :: child_heap_info => null()
11681190
end type

test/main.F90

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ function run() result(passed)
2626
use caf_image_index_test, only: &
2727
caf_image_index_prif_image_index => &
2828
test_prif_image_index
29+
use prif_types_test, only: test_prif_types
2930
use caf_rma_test, only: &
3031
caf_rma_prif_rma => &
3132
test_prif_rma
@@ -73,6 +74,7 @@ function run() result(passed)
7374
end block
7475
#endif
7576
individual_tests = [a00_caffeinate_caffeinate()]
77+
individual_tests = [individual_tests, test_prif_types()]
7678
individual_tests = [individual_tests, caf_allocate_prif_allocate()]
7779
individual_tests = [individual_tests, caf_image_index_prif_image_index()]
7880
individual_tests = [individual_tests, caf_rma_prif_rma()]

test/prif_allocate_test.F90

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,17 @@
11
module caf_allocate_test
22
use prif, only : &
3-
prif_allocate_coarray, prif_deallocate_coarray, &
3+
prif_allocate_coarray, &
44
prif_allocate, prif_deallocate, &
55
prif_coarray_handle, prif_num_images, prif_size_bytes, &
66
prif_set_context_data, prif_get_context_data, prif_local_data_pointer, &
77
prif_alias_create, prif_alias_destroy
8+
#if FORCE_PRIF_0_5 || FORCE_PRIF_0_6
9+
use prif, only : prif_deallocate_coarray_ => prif_deallocate_coarray
10+
# define prif_deallocate_coarray(h) prif_deallocate_coarray_([h])
11+
# define prif_deallocate_coarrays(arr) prif_deallocate_coarray_(arr)
12+
#else
13+
use prif, only : prif_deallocate_coarray, prif_deallocate_coarrays
14+
#endif
815
use veggies, only: result_t, test_item_t, assert_that, assert_equals, describe, it, succeed
916
use iso_c_binding, only: &
1017
c_ptr, c_int, c_int64_t, c_size_t, c_funptr, c_null_funptr, &
@@ -78,7 +85,7 @@ function check_allocate_integer_scalar_coarray_with_corank1() result(result_)
7885
end do
7986
end block
8087

81-
call prif_deallocate_coarray([coarray_handle])
88+
call prif_deallocate_coarray(coarray_handle)
8289

8390
end function
8491

@@ -258,7 +265,7 @@ function check_allocate_integer_array_coarray_with_corank2() result(result_)
258265
end do
259266
end block
260267

261-
call prif_deallocate_coarray([coarray_handle])
268+
call prif_deallocate_coarray(coarray_handle)
262269

263270
end function
264271
end module caf_allocate_test

test/prif_atomic_test.F90

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,11 @@ module caf_atomic_test
66
c_ptr, c_int64_t, c_intptr_t, c_size_t, c_null_funptr, c_f_pointer, c_loc, c_sizeof
77
use veggies, only: result_t, test_item_t, assert_equals, assert_that, describe, it, succeed
88
use prif
9+
#if FORCE_PRIF_0_5 || FORCE_PRIF_0_6
10+
use prif, only : prif_deallocate_coarray_ => prif_deallocate_coarray
11+
# define prif_deallocate_coarray(h) prif_deallocate_coarray_([h])
12+
# define prif_deallocate_coarrays(arr) prif_deallocate_coarray_(arr)
13+
#endif
914

1015
implicit none
1116
private
@@ -325,8 +330,7 @@ function check_atomic_uncontended() result(result_)
325330

326331
end block
327332

328-
call prif_deallocate_coarray([coarray_handle_int])
329-
call prif_deallocate_coarray([coarray_handle_logical])
333+
call prif_deallocate_coarrays(([coarray_handle_int,coarray_handle_logical]))
330334
end function
331335

332336
function check_atomic_contended() result(result_)

test/prif_coarray_inquiry_test.F90

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,13 @@ module prif_coarray_inquiry_test_m
66
prif_lcobound_no_dim, prif_lcobound_with_dim, &
77
prif_ucobound_no_dim, prif_ucobound_with_dim, &
88
prif_coshape
9+
#if FORCE_PRIF_0_5 || FORCE_PRIF_0_6
10+
use prif, only : prif_deallocate_coarray_ => prif_deallocate_coarray
11+
# define prif_deallocate_coarray(h) prif_deallocate_coarray_([h])
12+
# define prif_deallocate_coarrays(arr) prif_deallocate_coarray_(arr)
13+
#else
14+
use prif, only : prif_deallocate_coarray, prif_deallocate_coarrays
15+
#endif
916
use julienne_m, only: &
1017
operator(//) &
1118
,operator(.all.) &
@@ -68,7 +75,7 @@ function check_prif_local_data_pointer() result(diag)
6875
allocation_ptr)
6976
call prif_local_data_pointer(coarray_handle, local_ptr)
7077
diag = .expect. c_associated(local_ptr, allocation_ptr)
71-
call prif_deallocate_coarray([coarray_handle])
78+
call prif_deallocate_coarray(coarray_handle)
7279
end function
7380

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

135-
call prif_deallocate_coarray([coarray_handle])
142+
call prif_deallocate_coarray(coarray_handle)
136143
end function
137144

138145
function check_cobounds() result(diag)

0 commit comments

Comments
 (0)