|
| 1 | +# Implementation Status |
| 2 | + |
| 3 | +Caffeine is an implementation of the Parallel Runtime Interface for Fortran (PRIF). This document |
| 4 | +outlines the implementation status in Caffeine of the features defined in the |
| 5 | +[latest PRIF specification, revision 0.4](https://dx.doi.org/10.25344/S4WG64). Caffeine contains interfaces for all |
| 6 | +of the PRIF procedures and the symbols are linkable and callable, but some procedures will fail at runtime with an unimplemented error. For |
| 7 | +more details about the implementation of the various PRIF features, please see the |
| 8 | +following sections: |
| 9 | + |
| 10 | +- [Named Constants](#Named-Constants) |
| 11 | +- [`stat` and `errmsg` support](#stat-and-errmsg-support) - NO support yet |
| 12 | +- [Program Startup and Shutdown](#Program-Startup-and-Shutdown) |
| 13 | +- [Image Queries](#Image-Queries) |
| 14 | +- [Storage Management](#Storage-Management) |
| 15 | +- [Coarray Queries](#Coarray-Queries) |
| 16 | +- [Continguous Coarray Access](#Continguous-Coarray-Access) |
| 17 | +- [Strided Coarray Access](#Strided-Coarray-Access) |
| 18 | +- [SYNC Statements](#SYNC-Statements) |
| 19 | +- [Locks and Unlocks](#Locks-and-Unlocks) |
| 20 | +- [Critical](#Critical) |
| 21 | +- [Events and Notifications](#Events-and-Notifications) |
| 22 | +- [Teams](#teams) |
| 23 | +- [Collectives](#Collectives) |
| 24 | +- [Atomic Memory Operations](#Atomic-Memory-Operations) |
| 25 | + |
| 26 | + |
| 27 | +## Named Constants |
| 28 | + |
| 29 | +Caffeine contains definitions for all of the PRIF-relevant constants from ISO_FORTRAN_ENV and for |
| 30 | +all of the PRIF-specific constants. |
| 31 | + |
| 32 | +## `stat` and `errmsg` support |
| 33 | + |
| 34 | +Many PRIF procedures have optional arguments `stat`, `errmsg`, and `errmsg_alloc`. There is no |
| 35 | +support for these optional arguments in Caffeine yet and this is not represented in the tables |
| 36 | +in the following sections. |
| 37 | + |
| 38 | + |
| 39 | +## Program Startup and Shutdown |
| 40 | +### Support = partial |
| 41 | + |
| 42 | +| Procedure | Status | Notes | |
| 43 | +|-----------|--------|-------| |
| 44 | +| `prif_init` | **YES** | | |
| 45 | +| `prif_stop`, `prif_error_stop` | *partial* | Missing support for `quiet=.true.` | |
| 46 | +| `prif_fail_image` | no | | |
| 47 | + |
| 48 | +--- |
| 49 | + |
| 50 | +## Image Queries |
| 51 | +### Support = partial |
| 52 | + |
| 53 | +| Procedure | Status | Notes | |
| 54 | +|-----------|--------|-------| |
| 55 | +| `prif_num_images` | **YES** | | |
| 56 | +| `prif_num_images_with_team`, `prif_num_images_with_team_number` | no | | |
| 57 | +| `prif_this_image_no_coarray` | *partial* | team argument is ignored | |
| 58 | +| `prif_this_image_with_coarray`, `prif_this_image_with_dim` | no | | |
| 59 | +| `prif_failed_images` | no | | |
| 60 | +| `prif_stopped_images` | no | | |
| 61 | +| `prif_image_status` | no | | |
| 62 | + |
| 63 | +--- |
| 64 | + |
| 65 | +## Storage Management |
| 66 | +### Support = partial (no support for coarray aliases) |
| 67 | + |
| 68 | +| Procedure | Status | Notes | |
| 69 | +|-----------|--------|-------| |
| 70 | +| `prif_allocate_coarray` | **YES** | | |
| 71 | +| `prif_allocate` | **YES** | | |
| 72 | +| `prif_deallocate_coarray` | *partial* | no `final_func` arg support | |
| 73 | +| `prif_deallocate` | **YES** | | |
| 74 | +| `prif_alias_create` | no | | |
| 75 | +| `prif_alias_destroy` | no | | |
| 76 | + |
| 77 | +--- |
| 78 | + |
| 79 | +## Coarray Queries |
| 80 | +### Support = partial (only support for `prif_image_index`) |
| 81 | + |
| 82 | +| Procedure | Status | Notes | |
| 83 | +|-----------|--------|-------| |
| 84 | +| `prif_set_context_data`, `prif_get_context_data` | no | | |
| 85 | +| `prif_size_bytes` | no | | |
| 86 | +| `prif_lcobound_no_dim`, `prif_lcobound_with_dim` | no | | |
| 87 | +| `prif_ucobound_no_dim`, `prif_ucobound_with_dim` | no | | |
| 88 | +| `prif_coshape` | no | | |
| 89 | +| `prif_image_index` | **YES** | | |
| 90 | +| `prif_image_index_with_team` | no | | |
| 91 | +| `prif_image_index_with_team_number` | no | | |
| 92 | + |
| 93 | +--- |
| 94 | + |
| 95 | +## Continguous Coarray Access |
| 96 | +### Support = partial |
| 97 | + |
| 98 | +| Procedure | Status | Notes | |
| 99 | +|-----------|--------|-------| |
| 100 | +| `prif_get` | **YES** | | |
| 101 | +| `prif_get_indirect` | **YES** | | |
| 102 | +| `prif_put` | **YES** | | |
| 103 | +| `prif_put_indirect` | **YES** | | |
| 104 | +| `prif_put_with_notify` | no | | |
| 105 | +| `prif_put_with_notify_indirect` | no | | |
| 106 | +| `prif_put_indirect_with_notify` | no | | |
| 107 | +| `prif_put_indirect_with_notify_indirect` | no | | |
| 108 | + |
| 109 | +--- |
| 110 | + |
| 111 | +## Strided Coarray Access |
| 112 | +### Support = no |
| 113 | + |
| 114 | +<!--- |
| 115 | +| Procedure | Status | Notes | |
| 116 | +|-----------|--------|-------| |
| 117 | +| `prif_get_strided` | no | | |
| 118 | +| `prif_get_strided_indirect` | no | | |
| 119 | +| `prif_put_strided` | no | | |
| 120 | +| `prif_put_strided_indirect` | no | | |
| 121 | +| `prif_put_strided_with_notify` | no | | |
| 122 | +| `prif_put_strided_with_notify_indirect` | no | | |
| 123 | +| `prif_put_strided_indirect_with_notify` | no | | |
| 124 | +| `prif_put_strided_indirect_with_notify_indirect` | no | | |
| 125 | +--> |
| 126 | + |
| 127 | +--- |
| 128 | + |
| 129 | +## SYNC Statements |
| 130 | +### Support = partial ( only support for `prif_sync_all`) |
| 131 | + |
| 132 | +| Procedure | Status | Notes | |
| 133 | +|-----------|--------|-------| |
| 134 | +| `prif_sync_memory` | no | | |
| 135 | +| `prif_sync_all` | **YES** | | |
| 136 | +| `prif_sync_images` | no | | |
| 137 | +| `prif_sync_team` | no | | |
| 138 | + |
| 139 | +--- |
| 140 | + |
| 141 | +## Locks and Unlocks |
| 142 | +### Support = no |
| 143 | + |
| 144 | +<!--- |
| 145 | +| Procedure | Status | Notes | |
| 146 | +|-----------|--------|-------| |
| 147 | +| `prif_lock` | no | | |
| 148 | +| `prif_lock_indirect` | no | | |
| 149 | +| `prif_unlock` | no | | |
| 150 | +| `prif_unlock_indirect` | no | | |
| 151 | +--> |
| 152 | + |
| 153 | +--- |
| 154 | + |
| 155 | +## Critical |
| 156 | +### Support = no |
| 157 | + |
| 158 | +<!--- |
| 159 | +| Procedure | Status | Notes | |
| 160 | +|-----------|--------|-------| |
| 161 | +| `prif_critical` | no | | |
| 162 | +| `prif_end_critical` | no | | |
| 163 | +--> |
| 164 | + |
| 165 | +--- |
| 166 | + |
| 167 | +## Events and Notifications |
| 168 | +### Support = no |
| 169 | + |
| 170 | +<!--- |
| 171 | +| Procedure | Status | Notes | |
| 172 | +|-----------|--------|-------| |
| 173 | +| `prif_event_post` | no | | |
| 174 | +| `prif_event_post_indirect` | no | | |
| 175 | +| `prif_event_wait` | no | | |
| 176 | +| `prif_event_query` | no | | |
| 177 | +| `prif_notify_wait` | no | | |
| 178 | +--> |
| 179 | + |
| 180 | +--- |
| 181 | + |
| 182 | +## Teams |
| 183 | +### Support = partial (No support for `prif_get_team` and `prif_team_number`) |
| 184 | + |
| 185 | +| Procedure | Status | Notes | |
| 186 | +|-----------|--------|-------| |
| 187 | +| `prif_form_team` | **YES** | | |
| 188 | +| `prif_get_team` | no | | |
| 189 | +| `prif_team_number` | no | | |
| 190 | +| `prif_change_team` | **YES** | | |
| 191 | +| `prif_end_team` | **YES** | | |
| 192 | + |
| 193 | +--- |
| 194 | + |
| 195 | +## Collectives |
| 196 | +### Support = partial (...) |
| 197 | + |
| 198 | +| Procedure | Status | Notes | |
| 199 | +|-----------|--------|-------| |
| 200 | +| `prif_co_broadcast` | *partial* | no support for derived types with `allocatable` components | |
| 201 | +| `prif_co_max` | *partial* | only supports 32-bit and 64-bit numeric types | |
| 202 | +| `prif_co_min` | *partial* | only supports 32-bit and 64-bit numeric types | |
| 203 | +| `prif_co_sum` | *partial* | only supports 32-bit and 64-bit numeric types | |
| 204 | +| `prif_co_reduce` | *partial* | only supports intrinsic types (no support for derived types) | |
| 205 | + |
| 206 | +--- |
| 207 | + |
| 208 | +## Atomic Memory Operations |
| 209 | +### Support = no |
| 210 | + |
| 211 | +<!--- |
| 212 | +| Procedure | Status | Notes | |
| 213 | +|-----------|--------|-------| |
| 214 | +| `prif_atomic_add` | no | | |
| 215 | +| `prif_atomic_add_indirect` | no | | |
| 216 | +| `prif_atomic_and` | no | | |
| 217 | +| `prif_atomic_and_indirect` | no | | |
| 218 | +| `prif_atomic_or` | no | | |
| 219 | +| `prif_atomic_or_indirect` | no | | |
| 220 | +| `prif_atomic_xor` | no | | |
| 221 | +| `prif_atomic_xor_indirect` | no | | |
| 222 | +| `prif_atomic_cas_int` | no | | |
| 223 | +| `prif_atomic_cas_int_indirect` | no | | |
| 224 | +| `prif_atomic_cas_logical` | no | | |
| 225 | +| `prif_atomic_cas_logical_indirect` | no | | |
| 226 | +| `prif_atomic_fetch_add` | no | | |
| 227 | +| `prif_atomic_fetch_add_indirect` | no | | |
| 228 | +| `prif_atomic_fetch_and` | no | | |
| 229 | +| `prif_atomic_fetch_and_indirect` | no | | |
| 230 | +| `prif_atomic_fetch_or` | no | | |
| 231 | +| `prif_atomic_fetch_or_indirect` | no | | |
| 232 | +| `prif_atomic_fetch_xor` | no | | |
| 233 | +| `prif_atomic_fetch_xor_indirect` | no | | |
| 234 | +| `prif_atomic_define_int` | no | | |
| 235 | +| `prif_atomic_define_int_indirect` | no | | |
| 236 | +| `prif_atomic_define_logical` | no | | |
| 237 | +| `prif_atomic_define_logical_indirect` | no | | |
| 238 | +| `prif_atomic_ref_int` | no | | |
| 239 | +| `prif_atomic_ref_int_indirect` | no | | |
| 240 | +| `prif_atomic_ref_logical` | no | | |
| 241 | +| `prif_atomic_ref_logical_indirect` | no | | |
| 242 | +--> |
| 243 | + |
| 244 | +--- |
0 commit comments