Releases: BerkeleyLab/caffeine
0.7.0
Incorporate PRIF Revision 0.7 Changes
Caffeine release 0.7.0:
- Implement all the interface changes introduced in PRIF 0.7:
- New feature: enable client compiler to determine the values for PRIF's
ISO_FORTRAN_ENVconstants - #266 - Improve installation script - #265 (issue #97) :
- Installs Caffeine and GASNet libraries in same location
- Testing Updates:
- Increase CI testing by adding additional runners and compiler versions - #263 & #276
- Add support for
gfortranversion 15 - #270
Currently Supported Features & Limitations
Please see the Implementation Status doc
Supported Platforms
Compilers
We currently build Caffeine and its dependencies with LLVM compilers (flang-new and clang) and GNU compilers (gfortran and gcc).
Operating systems and architectures
We regularly test on
- Linux: x86_64
- macOS: x86_64 and Apple Silicon
Full Changelog: 0.6.0...0.7.0
0.6.0
Incorporate PRIF Revision 0.6 Changes & Implement Atomic Operations
Caffeine release 0.6.0:
- Implemented all of the PRIF Atomic Operations:
prif_atomic_add,prif_atomic_add_indirectprif_atomic_and,prif_atomic_and_indirectprif_atomic_or,prif_atomic_or_indirectprif_atomic_xor,prif_atomic_xor_indirectprif_atomic_cas_int,prif_atomic_cas_int_indirectprif_atomic_cas_logical,prif_atomic_cas_logical_indirectprif_atomic_fetch_add,prif_atomic_fetch_add_indirectprif_atomic_fetch_and,prif_atomic_fetch_and_indirectprif_atomic_fetch_or,prif_atomic_fetch_or_indirectprif_atomic_fetch_xor,prif_atomic_fetch_xor_indirectprif_atomic_define_int,prif_atomic_define_int_indirectprif_atomic_define_logical,prif_atomic_define_logical_indirectprif_atomic_ref_int,prif_atomic_ref_int_indirectprif_atomic_ref_logical,prif_atomic_ref_logical_indirect
- Implement all the interface changes introduced in PRIF 0.6:
- Add
prif_initial_team_index - Add
prif_initial_team_index_with_team - Add
prif_initial_team_index_with_team_number - Add
data_pointer_offsetargument toprif_alias_create
- Add
- Fixed a number of critical defects:
- Improved CI testing:
- Added CI-driven end-to-end testing of native multi-image support with flang-latest and Caffeine. This includes most SYNC statements, most Collectives subroutines, and some image queries.
- Expanded set of LLVM Flang versions used in CI
- Added more robust exit testing
Currently Supported Features & Limitations
Please see the Implementation Status doc
Supported Platforms
Compilers
We currently build Caffeine and its dependencies with LLVM compilers (flang-new and clang) and GNU compilers (gfortran and gcc).
Operating systems and architectures
We regularly test on
- Linux: x86_64
- macOS: x86_64 and Apple Silicon
Full Changelog: 0.5.2...0.6.0
0.5.2
Support PRIF 0.5 Collective Subroutines, Events, Notifications, and more
Caffeine release 0.5.2:
- Added distributed-memory platform support
- Implemented remaining and updated existing Collective Subroutines with PRIF 0.5-compliant interfaces:
prif_co_max_characterprif_co_min_characterprif_co_reduceprif_co_max,prif_co_min,prif_co_sum
- Implemented remaining Strided Coarray Access and Contiguous Coarray Access procedures that include notifications:
prif_put_with_notify,prif_put_with_notify_indirectprif_put_indirect_with_notify,prif_put_indirect_with_notify_indirectprif_put_strided_with_notify,prif_put_strided_with_notify_indirectprif_put_strided_indirect_with_notify,prif_put_strided_indirect_with_notify_indirect
- Implemented Events and Notifications:
prif_notify_waitprif_event_post,prif_event_post_indirectprif_event_waitprif_event_query
- Implemented remaining SYNC Statements:
prif_sync_images
- Implemented remaining Storage Management procedures:
prif_alias_create,prif_alias_destroy
- Implemented remaining Coarray Queries procedures:
prif_set_context_data,prif_get_context_dataprif_image_index_with_teamprif_image_index_with_team_number(partial support)
- Implemented remaining Image Queries procedures:
prif_this_image_with_coarray,prif_this_image_with_dimprif_num_images_with_team_number(partial support)
- Fixed a number of critical defects
- Expanded CI testing to include more compiler versions, OS versions, and distributed memory
Currently Supported Features & Limitations
Please see the Implementation Status doc
Supported Platforms
Compilers
We currently build Caffeine and its dependencies with LLVM compilers (flang-new and clang) and GNU compilers (gfortran and gcc).
Operating systems and architectures
We regularly test on
- Linux: x86_64
- macOS: x86_64 and Apple Silicon
Full Changelog: 0.5.0...0.5.2
0.5.0
Support LLVM Flang and More of PRIF 0.5
Caffeine release 0.5.0:
- Implement more PRIF procedures:
prif_num_images_with_teamprif_get_teamprif_team_numberprif_get_strided,prif_get_strided_indirectprif_put_strided,prif_put_strided_indirectprif_lcobound_with_dim,prif_lcobound_no_dimprif_ucobound_with_dim,prif_ucobound_no_dimprif_coshapeprif_failed_images,prif_stopped_images,prif_image_statusprif_sync_team,prif_sync_memoryprif_size_bytes
- Add support for optional arguments for more PRIF procedures:
prif_this_image_no_coarray-teamargument
- Improve CI and testing
- Improve assertions in tests by using the
assertlibrary - Add CI action to compile and test with LLVM
flang
- Improve assertions in tests by using the
Currently Supported Features & Limitations
Please see the Implementation Status doc
Supported Platforms
Compilers
We currently build Caffeine and its dependencies with gfortran and gcc. Starting in this release, we also build Caffeine and its dependencies with LLVM flang, but when building with this compiler, there is a current known bug in our test suite that we are working towards resolving.
Operating systems and architectures
We regularly test on
- Linux: x86_64
- macOS: x86_64 and Apple Silicon
Full Changelog: 0.4.0...0.5.0
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
prifmodule, 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_pointerandprif_register_stop_callback - Replace integer kinds
c_intmax_twithc_int64_t - Update
prif_allocate_coarrayinterface and definition
- Add interfaces and definitions for
- Remove pure from
prif_error_stopand update bothprif_error_stopandprif_stopto 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
prifmodule 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
prifmodule 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
allocatableorpointercomponents, - A non-symmetric, shared heap for managing derived-type coarrays with
allocatableorpointercomponents, and - An initial working implementation of
contiguousRemote 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 variableintegerorcharacterstop 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_symmetricfunctions - Coarray RMA: Contiguous RMA via the
prif_putandprif_getfunctions - 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_reduceimplementation- Does not support derived type arguments.
- Many of the parallel features listed above as supported do not contain support for the
optionalarguments to the corresponding PRIF routines. For example, theprif_this_image,prif_num_images, andprif_sync_allroutines accept theoptionalarguments but do not support the semantics of theoptionalarguments.
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:
stopanderror stopstatements with variableintegerorcharacterstop codes 🛑 - Image enumeration:
this_image()🖼️ andnum_images()🔢 functions - Global synchronization: the
sync allstatement 🧱 - Collective subroutines:
co_min,co_max,co_sum,co_broadcast📣, andco_reduce🥘
Limitations
- The current
co_reduceimplementation- Assumes the user-provided
co_reduceoperationfunction is commutative, - Assumes no user-initiated communication happens during the execution of the user-defined
operationreduction 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_allsubroutine does not support thesync allstatement'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 memorystatements - Teams of images:
team_type; theform teamandchange teamstatements; theget_team()andteam_number()functions; and theinitial_team,current_team, andparent_teamconstants ⚽ - Image failure detection: the
failed_images()function 🆘, thefail imagestatement🚨, and thestat_failed_imageandstat_unlocked_failed_imageconstants - Coarrays:
- Intrinsic and user-defined coarrays and related features such as synchronized allocation/deallocation
- Events:
event_type, theevent postandevent waitstatements, and theevent_querysubroutine 💃 - Atomics:
atomic_int_kind,atomic_logical_kindandatomic_*subroutines 💣
- Image-exclusive execution:
criticalblocks. - Locks: the
lockandunlockstatements. 🔒