Releases: BerkeleyLab/caffeine
0.2.0
All PRIF Interfaces Defined and Basic Coarray Support Added
This release adds
- A new
prif
module providing the interface bodies for all of procedures in the Parallel Runtime Interface for Fortran (PRIF) procedures, - A symmetric heap for managing the memory associated with intrinsic-type coarrays and derived-type coarrays with no
allocatable
orpointer
components, - A non-symmetric, shared heap for managing derived-type coarrays with
allocatable
orpointer
components, and - An initial working implementation of
contiguous
Remote Memory Access (RMA) and supporting procedures, as specified by PRIF.
Currently Supported Features
- Program launch: image creation via the
prif_init
🚀 - Program termination:
prif_stop
🛑 andprif_error_stop
🧯 with variableinteger
orcharacter
stop codes - Image enumeration:
prif_this_image
🖼️ andprif_num_images
🔢 - Image Queries:
prif_image_index
☝️ - Coarray allocation: allocation and deallocation via the
prif_allocate
,prif_deallocate
🗑️ ,prif_allocate_non_symmetric
,prif_deallocate_non_symmetric
functions - Coarray RMA: Contiguous RMA via the
prif_put
andprif_get
functions - Global synchronization:
prif_sync_all
🧱 - Collective subroutines:
prif_co_min
,prif_co_max
,prif_co_sum
,prif_co_broadcast
📣, andprif_co_reduce
🥘
Supported Platforms
Compilers
We currently build Caffeine and its dependencies with gfortran
and gcc
with a goal to support additional compilers in a future release.
Operating systems and architectures
We regularly test on
- Linux: x86
- macOS: x86 and Apple Silicon
Limitations
- The parallel features that are not yet supported have associated PRIF subroutines that can be called and will return an unimplemented error message
- The current
prif_co_reduce
implementation- Assumes the user-provided
prif_co_reduce
operation
function is commutative, - Assumes no user-initiated communication happens during the execution of the user-defined
operation
reduction function, and - Does not support derived type arguments.
- Assumes the user-provided
- Many of the parallel features listed above as supported do not contain support for the
optional
arguments to the corresponding PRIF routines. For example, theprif_this_image
,prif_num_images
, andprif_sync_all
routines accept theoptional
arguments but do not support the semantics of theoptional
arguments.
Full Changelog: 0.1.0...0.2.0
Support Fortran 2018 non-coarray parallel features
Initial Release
This release uses the GASNet-EX exascale-ready networking middleware to support most of the non-coarray parallel features of Fortran 2018. In the text below, any mention or depiction of standard Fortran statements or procedures refers to features that Caffeine supports. We envision that a fully Caffeinated compiler would translate standard Fortran statements and intrinsic procedures into Caffeine procedure calls when compiling parallel Fortran programs. Our initial target compilers include flang
and LFortran. For verification purposes, we currently use gfortran
to develop and test Caffeine. We welcome additional partner compiler projects.
Currently Supported Features
- Program launch: image creation via the
caf_caffeinate()
function ☕ - Program termination:
stop
anderror stop
statements with variableinteger
orcharacter
stop codes 🛑 - Image enumeration:
this_image()
🖼️ andnum_images()
🔢 functions - Global synchronization: the
sync all
statement 🧱 - Collective subroutines:
co_min
,co_max
,co_sum
,co_broadcast
📣, andco_reduce
🥘
Limitations
- The current
co_reduce
implementation- Assumes the user-provided
co_reduce
operation
function is commutative, - Assumes no user-initiated communication happens during the execution of the user-defined
operation
reduction function, and - Does not support derived type arguments.
- Assumes the user-provided
- The
this_image()
andnum_images()
functions do not accept any of the optional arguments. - The
caf_sync_all
subroutine does not support thesync all
statement's optional sync-stat-list.
Not In This Release
The following standard Fortran 2018 parallel features are not yet supported by Caffeine:
- Additional forms of synchronization: the
sync images
,sync team
, andsync memory
statements - Teams of images:
team_type
; theform team
andchange team
statements; theget_team()
andteam_number()
functions; and theinitial_team
,current_team
, andparent_team
constants ⚽ - Image failure detection: the
failed_images()
function 🆘, thefail image
statement🚨, and thestat_failed_image
andstat_unlocked_failed_image
constants - Coarrays:
- Intrinsic and user-defined coarrays and related features such as synchronized allocation/deallocation
- Events:
event_type
, theevent post
andevent wait
statements, and theevent_query
subroutine 💃 - Atomics:
atomic_int_kind
,atomic_logical_kind
andatomic_*
subroutines 💣
- Image-exclusive execution:
critical
blocks. - Locks: the
lock
andunlock
statements. 🔒