Releases: BerkeleyLab/caffeine
0.4.0
PRIF Specification Revision 0.5 (Partial Support) Added
Caffeine release 0.4.0:
- Updates and adds interfaces and named constant definitions to the
prif
module, moving towards the latest version of the PRIF specification, revision 0.5 (support remains incomplete in this release)- Add interfaces and definitions for
prif_local_data_pointer
andprif_register_stop_callback
- Replace integer kinds
c_intmax_t
withc_int64_t
- Update
prif_allocate_coarray
interface and definition
- Add interfaces and definitions for
- Remove pure from
prif_error_stop
and update bothprif_error_stop
andprif_stop
to support PRIF semantics - Fix some bugs preventing Caffeine from being built with LLVM Flang
Currently Supported Features & Limitations
Please see the Implementation Status doc
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_64
- macOS: x86_64 and Apple Silicon
Full Changelog: 0.3.0...0.4.0
0.3.0
PRIF Specification Revision 0.4 Support and Basic Team Support Added
This release
- Updates and adds interfaces and named constant definitions to the
prif
module to support the latest version of the PRIF specification, revision 0.4 - Add basic team support
- Enables FORM TEAM and CHANGE TEAM
- Collectives and coarray allocations work on the current team
- Adds an implementation status doc
- Updates the installer script to allow passing configure options to GASNet
- Replaces remaining usages of Fortran features that have PRIF equivalents with those PRIF equivalents
Currently Supported Features & Limitations
Please see the Implementation Status doc
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_64
- macOS: x86_64 and Apple Silicon
Full Changelog: 0.2.0...0.3.0
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_64
- macOS: x86_64 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- Does not support derived type arguments.
- 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. 🔒